我无法发送电子邮件symfony3来确认注册或简单的电子邮件

时间:2017-04-18 21:41:33

标签: symfony email fosuserbundle swiftmailer

我正在使用symfony3开发一个Web应用程序,我试图使用swiftmailer发送确认电子邮件,我想使用确认邮件并重置也在我的应用程序的用户之间发送直接电子邮件。

不幸的是,我还没有设法做到这一点。 这是我的配置文件,也是我用来发送直接邮件的代码

这是我的parameter.yml

 mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_auth_mode: login
mailer_user: ***********
mailer_password: ********
mailer_encryption: ssl

这是我的代码config.yml

 swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
encryption: ssl
username: '%mailer_user%'
auth_mode: login
password: '%mailer_password%'
spool: { type: memory }
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\User
registration:
    confirmation:
        enabled: true
        from_email:
            address:  *****e@gmail.com
            sender_name: ........
from_email:
        address: ******@gmail.com
        sender_name: ......

我发送电子邮件的代码

        $mailer = $this->get('mailer');
        $message = $mailer->createMessage()
            ->setSubject("Objet")
            ->setFrom(array('................' => "...."))
            ->setTo('..........)
            ->setBody("Hi");

        $mailer->send($message);

1 个答案:

答案 0 :(得分:0)

这是我的参数文件:

mailer_transport: gmail
mailer_host: gmail
mailer_user: ************
mailer_password: **********

这是swiftmailer的配置文件部分:

# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    spool:     { type: memory }

我在Gmail中使用双重验证,因此我生成了一个应用程序专用密码, this是您可以查看如何设置一个的地方。

这是我从控制器发送电子邮件的方式:

private function sendConfirmationEmail($user)
{
    $token = $user->getEmailConfirmationToken();
    $subject = 'Email Confirmation';
    $label = 'Confirm Email';
    $email = $user->getEmail();

    $href = "www.mysymfonyproject.com/app_dev.php/confirm?token=" . $token;

    $message = \Swift_Message::newInstance()
    ->setSubject($subject)
    ->setFrom('myemail@gmail.com')
    ->setTo( $email )
    ->setBody(
        $this->renderView(
            'Emails/confirm.html.twig',
            array('href' => $href)
        ),
        'text/html'
    );

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

    return true;
}

另外,我在配置文件中看到一些奇怪的东西,似乎你在parameters.yml和config.yml中都设置了两次“auth_mode”和“encryption”。 你的config.yml文件包含你的parameters.yml文件,就像你的parameters.yml被复制粘贴到配置文件一样,在配置文件中你有邮件设置,其中一些值是预设值的指针而其他只是值, %mailer_password%指向mailer_password参数值,该参数值包含在参数文件中。这并不复杂,只是YML和包含。因为你已经在parameters.yml中定义了所有参数,所以你需要在config.yml中指向它们,你可以通过将你的邮件的config.yml部分更改为:

来实现这一点。
transport: "%mailer_transport%"
host: "%mailer_host%"
encryption: "%mailer_encryption%"
username: "%mailer_user%"
auth_mode: "%mailer_auth_mode%"
password: "%mailer_password%"
spool: { type: memory }

或者只是复制我的应用程序设置并尝试一下。 YML开发人员问候“祝你好运:)” PS。 YML必须有适当的缩进,建议的配置文件编辑可能没有正确缩进,所以手动缩进。