我无法发送电子邮件 symfony 3 既不能确认注册也不能发送简单的电子邮件

i cant send email symfony3 neither to confirm registration or for a simple email

我正在使用 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);

这是我的参数文件:

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 开发者问候 "Good Luck :)" PS。 YML 必须有适当的缩进,建议编辑的配置文件可能没有正确缩进,因此请手动缩进。