如何在Yii2中使用swiftMailer

fro*_*ops 39 php swiftmailer yii yii2

我终于无法理解如何在Yii2中使用swiftMailer扩展.从这个问题来看,我没有找到问题,任务是微不足道的,但直到最后我都无法理解.

有些例子没有详细描述发送信件的所有周期或我不明白的东西:(

建立

    return [
    //....
   'components' => [
    ......
    'mail' => [
      'class' => 'yii\swiftmailer\Mailer',
      'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'localhost',
        'username' => 'username',
        'password' => 'password',
        'port' => '587',
        'encryption' => 'tls',
      ],
    ],
  ]
];
Run Code Online (Sandbox Code Playgroud)

发送

Yii::$app->mail->compose()
->setTo($toEmail)
->setFrom([$this->email => $this->name])
->setSubject($this->subject)
->setTextBody($this->body)
->send();
Run Code Online (Sandbox Code Playgroud)

我希望得到一个具体的工作实例.谢谢.

PS我调整了域名记录MX,DKIM,SPF添加.

UPD(一些答案):

在"发送"字段中传递的电子邮件,默认情况下在"返回路径"字段中被放下,必须是现有地址.某些提供商不允许从不存在的电子邮件地址发送邮件.

Den*_*G B 47

确保您已在生产环境中初始化您的应用程序以从您的应用程序发送电子邮件,否则它将被写入mailoutput文件夹.或者手动编辑配置文件,如下所示.

在common/main-local.php的组件部分中

'mail' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@backend/mail',
        'useFileTransport' => false,//set this property to false to send mails to real email addresses
        //comment the following array to send mail using php's mail function
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',
            'username' => 'username@gmail.com',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
            ],
    ],
Run Code Online (Sandbox Code Playgroud)

在你的控制器中

    \Yii::$app->mail->compose('your_view', ['params' => $params])
    ->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail'])
    ->setTo('to_email@xx.com')
    ->setSubject('This is a test mail ' )
    ->send();
Run Code Online (Sandbox Code Playgroud)

这应该工作!希望对你有帮助!


小智 9

您不需要使用swiftmailer的SMTP传输,只需'useFileTransport' => true在配置文件中删除(app/config/web.php在基本模板中),邮件就会流动.

看看文档:

http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html


Mar*_*tin 5

如果您使用的是基本模板,那么您需要添加

'viewPath' => '@app/mail',
Run Code Online (Sandbox Code Playgroud)

到配置


sam*_*bua 5

警告:此选项不再可用,因为Mandrill是由Mailchimp购买的

有时可能是使用SwiftMailer而不依赖于您的问题.就像我使用mail.ru电子邮件服务器.我在laravel社区找到了解决方案并在Yii2中实现.

您可以使用其他服务,如https://mandrillapp.com/(每月12k电子邮件,250小时内免费),并设置如下:

与mandrill的laravel社区/设置邮件

'host' => 'smtp.mandrillapp.com',
'username' => 'user@domain.name',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',
Run Code Online (Sandbox Code Playgroud)

如果您使用gmail电子邮件,您也可能面临安全问题.您可以通过允许应用程序使用您的Gmail帐户来解决安全问题.

如果您使用google登录,请使用以下链接:

https://www.google.com/settings/security/lesssecureapps

希望它会对某人有所帮助