【问题标题】:Symfony 3 - Swiftmailer not sending emailSymfony 3 - Swiftmailer 不发送电子邮件
【发布时间】:2019-10-05 00:23:39
【问题描述】:

我正在尝试在用户提交表单后使用 SwiftMailer(版本 = Swift-5.4.8)发送电子邮件。我无法确定未发送电子邮件的原因。我只尝试过使用 gmail 设置,因为我听说它最容易使用(我是网络开发新手)。

我已尝试更改 config.yml、parameters.yml

parameters.yml:

    parameters:
        database_host: 127.0.0.1
        database_port: null
        database_name: symfony
        database_user: root
        database_password: null
        mailer_transport: gmail
        mailer_encryption: ssl
        mailer_auth_mode: login
        mailer_host: smtp.gmail.com
        mailer_user: myemail@gmail.com
        mailer_password: mypass
        secret: mysecret

config.yml(相关sn-p,需要其他部分请lmk)

    swiftmailer:
        transport: '%mailer_transport%'
        host: '%mailer_host%'
        username: '%mailer_user%'
        password: '%mailer_password%'
        spool: { type: memory }

默认控制器

    $form = $this->createFormBuilder()
        ->add('from', EmailType::class)
        ->add('message', TextareaType::class)
        ->add('send',SubmitType::class)
        ->getForm()
    ;

    if ($form->isSubmitted()){
        $data = $form->getData();

        $message = \Swift_Message::newInstance()
            ->setSubject('Join Our Team Request')
            ->setFrom($data['from'])
            ->setTo('myemail2@gmail.com')
            ->setBody(
                $data['message'],'text/plain'
            )
        ;

        $this->get('mailer')->send($message);
    }

    return $this->render('xxx.html.twig', array("title" => "...","join_team_form" =>$form->createView()));

视图和表单正确呈现。看来表单提交正确,但我从未收到电子邮件。再次成为网络开发新手,欢迎提出任何建议。

编辑:我能够使用命令提示符和“php bin\console swiftmailer:email:send”命令成功配置和发送电子邮件。问题是它使用了一个 dev_config 文件,愚蠢的错误。但是,当我仍然填写表格并单击发送按钮时,没有发送任何电子邮件。仅使用上述命令。有什么见解吗?

EDIT2:第一个 EDIT 的解决方案是运行“composer update”......很好......

【问题讨论】:

  • 您是否设置了您的 gmail 帐户?
  • 是的电子邮件帐户是不久前创建的

标签: php symfony swiftmailer symfony-3.4


【解决方案1】:

尝试使用 tls 加密和 smtp 传输协议。 您的 config.yml 将与此类似:

# Swiftmailer Configuration
swiftmailer:
    transport: 'smtp'
    host: 'smtp.gmail.com'
    username: 'myemail@gmail.com'
    password: 'mypass'
    encryption: tls
    auth_mode: login

而且,您必须激活对不太安全的应用程序的访问权限,并在您的 gmail 帐户中禁用两步验证。

【讨论】:

  • Gmail 传输类型会为您设置好一切,因此您的配置会变得不必要地复杂。
【解决方案2】:

this documentation 中描述了在 Symfony 上使用 gmail 发送邮件的最佳实践

但是为此你需要在你的应用程序中加载环境变量,我不知道你的情况。

下面应该可以工作。将您的 config.yml 更新为

swiftmailer:
    url: 'gmail://%mailer_user%:%mailer_password%@localhost?encryption=tls&auth_mode=oauth'
    spool: { type: 'memory' }

另一个建议是在发送邮件之前检查您的表单是否有效。否则,如果fromnull"",则发送将失败

if ($form->isSubmitted() && $form->isValid()){ ... }

如果它不起作用,请告诉我

【讨论】:

  • 我按照指示更新了 config.yml,但没有成功。我出于调试目的删除了 isValid() 部分,但外观很好。我想知道本地主机是否是罪魁祸首。如果我弄清楚了,我会更新。谢谢
  • 是的,目前已启用
猜你喜欢
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2016-02-23
相关资源
最近更新 更多