Yii2 SwiftMailer通过远程SMTP服务器(Gmail)发送电子邮件

4

我希望通过我的Gmail账户发送电子邮件。

我的邮件配置如下:

[
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,//set this property to false to send mails to real email addresses
'transport' => [
    'class' => 'Swift_SmtpTransport',
    'host' => 'smtp.gmail.com',
    'username' => 'my@gmail.com',
    'password' => 'pass',
    'port' => '587',
    'encryption' => 'tls',
    ],
]

我编写了一个名为MailController的命令:

<?php

namespace app\commands;

use yii\console\Controller;
use Yii;

/**
* Sanding mail
* Class MailController
* @package app\commands
*/
class MailController extends Controller
{
    private $from = 'my@gmail.com';
    private $to = 'to@gmail.com';

    public function actionIndex($type = 'test', $data = null)
    {
        Yii::$app->mailer->compose($type, ['data' => $data])
            ->setFrom($this->from)
            ->setTo($this->to)
            ->setSubject($this->subjects[$type])
            ->send();
    }
}

当我尝试运行:php yii mail

出现以下错误:sh: 1: /usr/sbin/sendmail: not found

但是如果我只想连接到smtp.gmail.com,为什么它需要sendmail呢?


你确定这个邮件组件配置是针对键“mailer”的吗?根据这个配置,它甚至不应该尝试发送电子邮件,因为“'useFileTransport' => true”意味着它只会将消息保存到文件中。 - Pavel Bariev
3个回答

17

我认为您配置了邮件发送器错误,因为它仍在使用默认的邮件功能。从文档中可以看到,配置应该像下面这样。发送器应该在components内部。

'components' => [
    ...
    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',
            'username' => 'username',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
        ],
    ],
    ...
],

另一个建议是使用端口号“465”和加密方式“ssl”,而不是端口号“587”和加密方式“tls”。


1
哎呀,我忘记了命令有自己的配置文件,不是web.php。现在邮件发送器正常工作了。 - ZeiZ
2
@zeiz 如果你找到了解决方案,请将其发布为答案并接受它。这样对其他人会很有帮助。 - Mahendran Sakkarai

3

Yii2针对Web和控制台工作有不同的配置文件。因此,您需要配置两者。关于此问题,我不得不创建邮件配置文件(例如mailer.php),并在两个配置文件(web.phpconsole.php)中包含它:

'components' => [
    ...
    'mailer' => require(__DIR__ . '/mailer.php'),
    ...
],

1
可能对某些人有用作为参考:

'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    'viewPath' => '@common/mail',
    'useFileTransport' => false,
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'smtp.gmail.com',
        'username' => 'username',
        'password' => 'password',
        'port' => 587,
        'encryption' => 'tls',
        'streamOptions' => [ 
            'ssl' => [ 
                'allow_self_signed' => true,
                'verify_peer' => false,
                'verify_peer_name' => false,
            ],
        ]
    ],
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接