使用php的swiftmailer和gmail

and*_*and 37 php gmail swiftmailer

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

我从SwiftMailer的引用中修改了脚本,但是我没有得到任何结果.怎么了?

编辑:进一步调试后我发现了这个声明

$result = $mailer->send($message);
Run Code Online (Sandbox Code Playgroud)

导致代码失败(下面的回显不打印).

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

<!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" 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>
Run Code Online (Sandbox Code Playgroud)

测试表格:

<!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>
Run Code Online (Sandbox Code Playgroud)

ful*_*ked 86

并不意味着复活旧帖子,但以防其他人正在寻找答案,并且因为这篇文章是在我寻找解决方案时出现的,尽管年龄很大.

使用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);
Run Code Online (Sandbox Code Playgroud)

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

希望有所帮助.

  • 对于在Goole启用了两步验证的用户,您必须使用生成的密码. (7认同)
  • 不推荐使用端口465,您应该使用端口587. (6认同)

小智 36

我发现这个问题正在进行谷歌搜索,并使用完全烘焙提供的答案中的代码.它让我能够看到在例外情况下,谷歌smtp服务器正在响应一个错误代码,表明密码和用户名不被接受.经过进一步调查,我发现了以下步骤.现在它工作得很好,我可以继续充实生产代码.

不知道当谷歌所做的变化,但除了与谷歌的用户名,密码和端口(465/SSL或587/TLS)的配置您的代码,你需要做下面的步骤,以便能够使用谷歌的SMTP服务器.

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

1)在Google"帐户设置"中,通过将其设置为"允许",启用"访问安全性较低的应用".

2)在"转发和POP/IMAP"选项卡下的gmail设置中,检查IMAP状态,需要启用它.(这将允许发送的电子邮件保存在已发送的文件夹中.)

3)如果在步骤1和2,你仍然抛出异常谷歌的SMTP服务器不接受用户名和密码,您需要打开浏览器,进入到Gmail并登录,然后在同一浏览器中打开另一个选项卡andgo到这个地址:https:
//accounts.google.com/DisplayUnlockCaptcha

According to Google you may have to enter a captcha.
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.


Ric*_*ard 6

我发现evad说的是真的,但我不得不为当前版本的Swift Mailer改变他的工作.现在它是:

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername('username@gmail.com')
  ->setPassword('password');

$mailer = Swift_Mailer::newInstance($transporter);
Run Code Online (Sandbox Code Playgroud)

应该工作正常.

  • Hos与完全解决方案有什么不同? (7认同)

Jim*_* W. 4

GMail SMTP 系统在 SSL 和端口方面存在问题。我发现很难让它与 PHP 很好地协同工作。

我发现的最好的、确实有效的东西是phpGMailer。您也许可以筛选这些代码,看看他们是如何让它工作的,但这对我来说总是完美无缺。

我知道这并不能解决 SwiftMail 问题,只是想我会指出这一点:)