无法使用 yii2 swiftmailer 发送邮件

Cannot send mail with yii2 swiftmailer

尝试使用 Yii::$app->mailer->compose() 函数发送邮件时出现错误。尝试连接smtp服务器时出现此错误,因此我提供错误消息和邮件程序YII2配置

Expected response code 250 but got code "535", with message "535-5.7.8
Username and Password not accepted.
Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials 59sm3639427wrc.23 -> gsmtp"

这是来自 config/common.php 文件的参数:

'mailer'       => [
        'class'            => 'yii\swiftmailer\Mailer',
        'useFileTransport' => false,
        'transport'        => [
            'class'      => 'Swift_SmtpTransport',
            'port'       => '587',
            'encryption' => 'tls',
            'username' => 'myemailbox@yahoo.com',
            'password' => 'myemailpass',
            'host' => 'smtp.mail.yahoo.com',
        ],
    ],

我已经在 Yahoo 帐户设置中启用了 "Allow apps that use less secure sign in" 功能。尝试 "app password" 选项但得到相同的结果。 在使用 yahoo smtp 之前,我用 google smtp 以同样的方式进行了尝试。错误信息仍然指向 https://support.google.com 页面。 Apache 是否可以缓存登录并传递给 smtp 服务器?

当然,我查看了 google 支持页面并按照 https://accounts.google.com/DisplayUnlockCaptcha 页面中的说明进行操作。

尝试更改端口

'mailer'       => [
        'class'            => 'yii\swiftmailer\Mailer',
        'useFileTransport' => false,
        'transport'        => [
            'class'      => 'Swift_SmtpTransport',
            'port'       => '465',
            'encryption' => 'tls',
            'username' => 'myemailbox@yahoo.com',
            'password' => 'myemailpass',
            'host' => 'smtp.mail.yahoo.com',
        ],
    ],

我解决了这个问题,但没有查出具体原因。也许有某种配置错误缓存。 所以我把这个直接设置放在 compose 函数之前:

\Yii::$app->mailer->setTransport([
        'class'      => 'Swift_SmtpTransport',
        'port'       => '587',
        'encryption' => 'tls',
       'username' => 'myemailbox@yahoo.com',
        'password' => 'myemailpass',
        'host' => 'smtp.mail.yahoo.com',
    ]);

它开始起作用了。