阿江 2016-10-29 10:37:19 6239次浏览 10条回复 9 1 0

公司有多个部门都可以使用自己的邮箱进行邮件发送,比如:市场部market@company.com,客服部service@company.com,所以需要在网站中设置多个发送邮箱源。 使用Yii2自带的swiftmailer进行配置和发送非常简单,但官网的文档及网上的文章都对这块描述的不是很详细,在此分享一下:

\common\config\main.php

//在主文件中配置通用信息
       'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
	    //false:非测试状态,发送真实邮件而非存储为文件
            'useFileTransport' =>false,
        ],

\common\config\main-local.php

//在local文件中配置私密信息
        'mailer' => [
	//配置邮箱'market@company.com'
        'transport'=>[
                'class'=>'Swift_SmtpTransport',
                'host'=>'smtp.company.com',
                'username'=>'market@company.com',
                'password'=>'market password',
                'port'=>'465',
                'encryption'=>'ssl',
            ],
	//配置邮箱'service@company.com'
	'transport'=>[
                'class'=>'Swift_SmtpTransport',
                'host'=>'smtp.company.com',
                'username'=>'service@company.com',
                'password'=>'service password',
                'port'=>'465',
                'encryption'=>'ssl',
            ],
        ],

\backend\controllers\MailTestController.php

function actionMail(){
	//发送时的设置
        $mail= Yii::$app->mailer->compose();
	//使用'market@company.com'发送邮件
        $mail->setFrom('market@company.com');
	//使用'service@company.com'发送邮件
	//$mail->setFrom('service@company.com');
        $mail->setTo('johnsonda@customer.com');
        $mail->setSubject("邮件测试");
        $mail->setHtmlBody("Hello Mail!!<br>发布可以带<h1>html</h1>标签的文本<br><br>");    //发布可以带html标签的文本
        if($mail->send()){
            echo "success";
        }else{
            echo "fail";
        }
}

将上面的'market@company.com'、'market password'等信息替换成你自己的正确邮箱配置信息,就可以实现多邮箱发送了! 在上例中输入测试地址就可以看到发送结果了:

http://localhost/mail-test/mail

(全文完)

觉得很赞
  • 回复于 2016-11-01 10:34 举报

    哈哈哈,6666

  • 回复于 2016-11-01 17:29 举报

    66666666

  • 回复于 2016-11-02 12:31 举报

    666666

  • 回复于 2016-11-09 11:51 举报

    不错,我之前也是用的这个。不过是单个发送的,收藏了。
    辛苦

  • 回复于 2016-11-19 23:27 举报

    不用循环吗 多个发信件时 我觉得要在 actionMail() 中添加循环

  • 回复于 2017-02-27 13:12 举报

    多个不能用,下面的好像把上面的覆盖了

  • 回复于 2017-03-13 09:00 举报

    ,前面的两个transport是并列的,具体要调用哪一个邮箱作为发件箱(根据你自己的业务逻辑),如下代码调用即可:

    //使用'market@company.com'发送邮件
    $mail->setFrom('market@company.com');
    //使用'service@company.com'发送邮件
    $mail->setFrom('service@company.com');
    
  • 回复于 2017-06-20 19:25 举报

    多个确实没有用,下面的会覆盖上面的。setFrom也没用

  • 回复于 2017-08-02 15:52 举报

    我也试了,两个确实会被覆盖掉第一个,并导致setFrom(“第一个邮箱地址”) 报错,报错如下:
    Expected response code 250 but got code "550", with message "550 5.7.1 authentication is required"

  • 回复于 2018-03-07 17:31 举报

    setTo的时候将多个邮箱地址以数组的形式扔进去就行了

    $mail->setTo(['mail1@mail.com','mail2@mail.com'])
    
您需要登录后才可以回复。登录 | 立即注册