使用php的swiftmailer与Gmail
我正在写一个简单的脚本,在这个脚本中使用一个gmail账户来发送一封电子邮件给自己。
我从SwiftMailer的引用改变了脚本,但我没有得到任何结果。 怎么了?
编辑:进一步debugging后,我发现这个声明
$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" 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>
testingforms:
<!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>
不要故意复活一个旧post,但为了防止其他人在寻找答案,并且因为这个post在我寻找解决scheme的时候出现了,不pipe年龄大小。
使用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端口正常工作。
希望有所帮助。
我发现这个问题做一个谷歌search,并使用全面提供的答案中的代码。 它让我到了我可以看到抛出exception的地步,谷歌smtp服务器响应一个错误代码,指出密码和用户名不被接受。 经过进一步的调查,我发现了以下步骤。 现在它工作的很好,我可以继续充实生产的代码。
不知道Google何时进行了更改,除了使用Google用户名,密码和端口(465 / ssl或587 / tls)configuration代码之外,还需要执行以下步骤才能使用Google smtp服务器。
要使用gmail帐户使用Gmail邮件服务器,您需要:
1)在谷歌的“帐户设置”中,通过将其设置为“允许”,启用“访问不太安全的应用程序”。
2)在“转发和POP / IMAP”选项卡下的Gmail设置中,检查IMAP状态,需要启用。 (这将允许发送的电子邮件保存在发送的文件夹中。)
3)如果在步骤1和步骤2之后仍然抛出exceptionGoogle的smtp服务器不接受用户名和密码,您需要打开浏览器,转到gmail并login,然后在同一个浏览器中打开另一个选项卡,并到此地址:
https://accounts.google.com/DisplayUnlockCaptcha
According to Google you may have to enter a captcha.
4)立即从您的代码发送电子邮件,因为这将允许它被授权使用您的Gmail帐户。
希望这可以帮助。
我发现evad说的是真实的,但是我不得不为Swift Mailer的当前版本改变他的工作。 现在它是:
$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl') ->setUsername('username@gmail.com') ->setPassword('password'); $mailer = Swift_Mailer::newInstance($transporter);
应该工作正常。
GMail SMTP系统在给定SSL和端口时存在问题。 我发现很难让它与PHP很好地工作。
我发现的最好的东西是phpGMailer 。 你也许可以通过这个代码来看看他们是如何运作的,但是这对我来说一直是完美无瑕的。
我知道这不解决SwiftMail问题,只是想我会指出:)
465是ssl的端口,587用于tlsencryption(查看http://swiftmailer.org/docs/sending.html#encrypted-smtp )