Symfony 3-Swiftmailer不发送电子邮件

时间:2019-05-17 16:30:14

标签: php symfony swiftmailer symfony-3.4

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

我尝试更改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(相关代码段,如果需要其他部分,请lmk)

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

DefaultController

    $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()));

视图和表单正确呈现。表单似乎正确提交,但是我从未收到电子邮件。再次成为Web开发人员的新手,任何建议都值得赞赏。

2 个答案:

答案 0 :(得分:0)

尝试使用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帐户中禁用两步身份验证。

答案 1 :(得分:0)

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()){ ... }

让我知道它是否不起作用