如何在Symfony 3.4项目中修复swiftmailer配置

时间:2019-04-28 12:58:32

标签: symfony swiftmailer symfony-3.4

我在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控制台服务器启动服务器:运行并执行sendMail方法,不幸的是邮件没有被发送(尽管邮件程序返回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作为服务注入,谁能看到为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

您是否从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 not smtp