yii2 邮件程序 smtp 连接被拒绝

yii2 mailer smtp connection refused

在配置文件中设置我的 smtp 邮件程序时,它工作正常。但是,如果我手动创建 SMPT 邮件程序,它将失败(连接被拒绝)。有人可以帮忙吗?

Yii2 配置文件:

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

我的控制器中的以下代码不起作用:

$mailer = new \yii\swiftmailer\Mailer();
$mailer->transport = new \Swift_SmtpTransport();
$mailer->transport
    ->setHost('smtp.gmail.com')
    ->setPort(587)
    ->setEncryption('tls');
$mailer->transport->setUsername('email@gmail.com');
$mailer->transport->setPassword('password');

我收到一条错误消息:连接被拒绝#111

我在 ssl 上尝试了端口 465,但我收到了相同的消息。

我这样做的主要原因是我有不同的客户帐户,每个帐户都有自己的 smtp。因此,我需要每个客户一个帐户,我似乎无法通过配置文件来做到这一点。

非常感谢您的帮助。

我刚试过它对我有用,我按照下面的方法做了

'components'=[
    'mailer' => [  //Your default mailer
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',  
            'username' => 'email@gmail.com',
            'password' => 'password',
            'port' => '587', 
            'encryption' => 'tls', 
        ],
    ],
'mailer2' => [  //Your custom mailer
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',  
            'username' => 'new_email@gmail.com',
            'password' => 'new_password',
            'port' => 'new_port587', 
            'encryption' => 'new_tls', 
        ],
    ]

以下为默认配置

 Yii::$app->mailer->compose()
        ->setFrom('info@gmail.com')
        ->setTo('xxx@gmail.com')
        ->setSubject('Subject')
        ->setTextBody('Plain text content')
        ->setHtmlBody("Hello")
        ->send();

随后是自定义邮件程序配置

 Yii::$app->mailer2->compose()
        ->setFrom('info@gmail.com')
        ->setTo('xxx@gmail.com')
        ->setSubject('Subject')
        ->setTextBody('Plain text content')
        ->setHtmlBody("Hello")
        ->send();

创建一个组件是最快的解决方案,否则,您可以使用参数存储配置,并在需要时调用。