为了账号安全,请及时绑定邮箱和手机立即绑定

在gmail中使用PHP的swiftmailer

/ 猿问

在gmail中使用PHP的swiftmailer

PHP
料青山看我应如是 2019-11-14 15:22:26

我正在编写一个简单的脚本,其中使用gmail帐户向自己发送电子邮件。


我从SwiftMailer的参考资料中更改了脚本,但未得到任何结果。怎么了?


编辑:进一步调试后,我发现该语句


$result = $mailer->send($message);

导致代码失败(下面的回显不显示)。


为什么是这样?只是因为未发送消息而导致程序崩溃?:/


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>


<body>

<?php

    require_once '/var/www/swift/lib/swift_required.php';

    echo 'Mail sent <br />';  


/*  //create the transport

    $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587);

      ->setUsername('softrain.evaluaciones@gmail.com')

      ->setPassword('softrain1234')

    ;

*/


    $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587)

      ->setUsername('softrain.evaluaciones@gmail.com')

      ->setPassword('password')

    ;


    echo 'line 40 <br />';

    $mailer = Swift_Mailer::newInstance($transport);

    $message = Swift_Message::newInstance('Wonderful Subject')

      ->setFrom(array('softrain.evaluaciones@gmail.com' => 'Evaluaciones'))

      ->setTo(array('softrain.evaluaciones@gmail.com'=> 'A name'))

      ->setBody('Test Message Body')

    ;

    echo 'line 52 <br />';


    $result = $mailer->send($message);

    echo $result;

    echo 'line 58 <br />';


?>

</body>

</html>

测试形式:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

    <head>

       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

        <title>Test Mail Script</title>

    </head>

    <body>

        <form action="scriptmail.php" method="post">

            <input type="submit"/>

            </table>

        </form>

  </body>

</html>


查看完整描述

3 回答

?
aluckdog

并不是要复活旧帖子,只是为了以防万一其他人正在寻找答案,并且因为这个帖子是在我寻找解决方案的过程中出现的,尽管年龄很大。


使用PHP SwiftMailer连接到Gmail或Google Apps电子邮件帐户时,您需要使用以下内容


$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')

  ->setUsername($this->username)

  ->setPassword($this->password);


$this->mailer = Swift_Mailer::newInstance($transporter);

这对我来说很好。在原始代码中,您使用的是端口587,而不是465,并且未指定协议(ssl)。不知道这是否重要,但是对我来说,587端口失败了,465端口工作正常。


希望能有所帮助。


查看完整回答
反对 回复 2019-11-14
?
catspeake

我在进行Google搜索时发现了这个问题,并使用了完全烘焙提供的答案中的代码。这使我到了可以在抛出的异常中看到Google smtp服务器正在响应的错误代码,表明密码和用户名未被接受。经过进一步调查,我发现了以下步骤。现在效果很好,我可以继续完善代码以进行生产。


不确定Google何时进行更改,但除了使用您的Google用户名,密码和端口(465 / ssl或587 / tls)配置代码外,您还需要执行以下步骤才能使用Google smtp服务器。


要将gmail smtp服务器与您的gmail帐户一起使用,您需要:


1)在Google的“帐户设置”中,将其设置为“允许”,以启用“访问安全程度较低的应用”。


2)在“转发和POP / IMAP”标签下的gmail设置中,检查IMAP状态,需要将其启用。(这将使发送的电子邮件保存在已发送的文件夹中。)


3)如果在执行步骤1和步骤2之后,您仍然抛出异常,则Google的smtp服务器未接受您需要打开浏览器的用户名和密码,请转到gmail并登录,然后在同一浏览器中打开另一个标签并转到该地址:https :

//accounts.google.com/DisplayUnlockCaptcha


According to Google you may have to enter a captcha.

4)立即从您的代码发送电子邮件,因为这将使它被授权使用您的Gmail帐户。


希望这可以帮助。


查看完整回答
反对 回复 2019-11-14
?
德玛西亚99

我发现回避的说法是正确的,但是对于当前版本的Swift Mailer,我不得不对他的工作进行一些改动。现在它是:


$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')

  ->setUsername('username@gmail.com')

  ->setPassword('password');


$mailer = Swift_Mailer::newInstance($transporter);

应该工作正常。


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信