如何修复 Symfony 3.4 项目中的 swiftmailer 配置
How to fix swiftmailer configuration in Symfony 3.4 project
我在我的 Symfony 3.4 项目中使用 Swiftmailer。
我编写了以下组件来发送邮件:
class MailSender {
private $mailer;
public function __construct(\Swift_Mailer $mailer) {
$this->mailer = $mailer;
}
public function sendMail($target, $subject, $content) {
$message = (new \Swift_Message($subject))
->setFrom('***@gmail.com')
->setTo($target)
->setBody($content, 'text/html');
return $this->mailer->send($message);
}
}
在我的 services.yml 我添加了:
AppBundle\Service\MailSender:
arguments:
$mailer: '@swiftmailer.mailer'
在我的 parameters.yml 我添加了:
parameters:
mailer_transport: smtp
mailer_host: smtp.gmail.com
mailer_user: ***@gmail.com
mailer_password: ***
如果我现在用 php/bin 控制台 server:run 启动我的服务器并执行 sendMail 方法,不幸的是邮件没有被发送(尽管邮件程序 returns 1 作为响应) .
Symfony Profiler 向我显示以下错误日志:
刷新电子邮件队列时发生异常:预期响应代码 250 但得到代码“530”,消息“530 5.7.0 必须先发出 STARTTLS 命令。g185sm18205331wmf.30 - gsmtp”
罕见的是:如果我在我的 TestCase 中自己构建 \Swift_Mailer 对象,邮件确实会被发送。
public function testSendMail() {
// GIVEN
$transport = (new \Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
->setUsername('***@gmail.com')
->setPassword('***');
$swiftMailer = new \Swift_Mailer($transport);
$mailSender = new MailSender($swiftMailer);
// WHEN
$mailsSent = $mailSender->sendMail('***@t-online.de', 'testMail', 'The Mailsender works!');
// THEN
$this->assertEquals($mailsSent, 1);
}
如果我将 \Swift_Mailer 作为服务注入,有人能看出为什么它不起作用吗?
您是否尝试过 symfony 文档中的这个? How to Use Gmail to Send Emails
# app/config/parameters.yml
parameters:
# ...
mailer_transport: gmail
mailer_user: your_gmail_username
mailer_password: your_gmail_password
# app/config/config_dev.yml
swiftmailer:
transport: '%mailer_transport%'
username: '%mailer_user%'
password: '%mailer_password%'
请注意,您应该将 mailer_transport 设置为 gmail 而不是 smtp
我在我的 Symfony 3.4 项目中使用 Swiftmailer。 我编写了以下组件来发送邮件:
class MailSender {
private $mailer;
public function __construct(\Swift_Mailer $mailer) {
$this->mailer = $mailer;
}
public function sendMail($target, $subject, $content) {
$message = (new \Swift_Message($subject))
->setFrom('***@gmail.com')
->setTo($target)
->setBody($content, 'text/html');
return $this->mailer->send($message);
}
}
在我的 services.yml 我添加了:
AppBundle\Service\MailSender:
arguments:
$mailer: '@swiftmailer.mailer'
在我的 parameters.yml 我添加了:
parameters:
mailer_transport: smtp
mailer_host: smtp.gmail.com
mailer_user: ***@gmail.com
mailer_password: ***
如果我现在用 php/bin 控制台 server:run 启动我的服务器并执行 sendMail 方法,不幸的是邮件没有被发送(尽管邮件程序 returns 1 作为响应) . Symfony Profiler 向我显示以下错误日志: 刷新电子邮件队列时发生异常:预期响应代码 250 但得到代码“530”,消息“530 5.7.0 必须先发出 STARTTLS 命令。g185sm18205331wmf.30 - gsmtp”
罕见的是:如果我在我的 TestCase 中自己构建 \Swift_Mailer 对象,邮件确实会被发送。
public function testSendMail() {
// GIVEN
$transport = (new \Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
->setUsername('***@gmail.com')
->setPassword('***');
$swiftMailer = new \Swift_Mailer($transport);
$mailSender = new MailSender($swiftMailer);
// WHEN
$mailsSent = $mailSender->sendMail('***@t-online.de', 'testMail', 'The Mailsender works!');
// THEN
$this->assertEquals($mailsSent, 1);
}
如果我将 \Swift_Mailer 作为服务注入,有人能看出为什么它不起作用吗?
您是否尝试过 symfony 文档中的这个? How to Use Gmail to Send Emails
# app/config/parameters.yml
parameters:
# ...
mailer_transport: gmail
mailer_user: your_gmail_username
mailer_password: your_gmail_password
# app/config/config_dev.yml
swiftmailer:
transport: '%mailer_transport%'
username: '%mailer_user%'
password: '%mailer_password%'
请注意,您应该将 mailer_transport 设置为 gmail 而不是 smtp