如何在Yii2邮件程序中向多个收件人发送邮件?
此代码适用于多个收件人但无效。
$value = Yii::$app->mailer->compose()
->setFrom([$this->email => $this->name])
->setTo(array($model->email_1,$model->email_2))
->setSubject($model->status)
->setHtmlBody($model->description)
->send();
如何在yii2邮件程序中添加setCc?
此代码用于添加setCc,但这也无效。
$value = Yii::$app->mailer->compose()
->setFrom([$this->email => $this->name])
->setTo($model->email_1)
->setCc($model->email_2)
->setSubject($model->status)
->setHtmlBody($model->description)
->send();
答案 0 :(得分:12)
我刚刚尝试了以下代码,它正在运行。 代码中唯一奇怪的东西似乎是在带有数组的setFrom中。
Yii::$app->mailer->compose()
->setFrom('addrs1@gmail.com')
->setTo(array('addrs1@gmail.com', 'addrs2@hotmail.com'))
->setCc(array('addrs3@gmail.com'))
->setSubject('Sending Email')
->setTextBody('This is Plain text content')
->setHtmlBody('Please go to <a href="http://google.com/">GOOGLE</a>')
->send();
在Swift邮件代码中有以下注释:
* Set the From address of this message.
*
* It is permissible for multiple From addresses to be set using an array.
*
* If multiple From addresses are used, you SHOULD set the Sender address and
* according to RFC 2822, MUST set the sender address.
希望它有所帮助。
答案 1 :(得分:1)
为我工作:
->setTo([
'john.doe@gmail.com' => 'John Doe',
'jane.doe@gmail.com' => 'Jane Doe',
])
答案 2 :(得分:1)
如何在 yii2 邮件程序中添加 setCc?
上述答案的不足之处,特别是对于新手来说,是没有提到如何将视图中输入框中的值转换为如上所述的数组。值得注意的是,输入框中以逗号分隔的电子邮件地址列表不是数组而是列表。并且单个值不是列表。那么我们如何捕获可能的单个值和多个值:
这是一种方法,将验证动态包含在控制器中,而不是通过模型验证,将输入框中的电子邮件地址列表转换为数组,无论输入框只有一项还是不止一项项。
在您的控制器中:
//You can use the EmailValidator to validate each
//individual post from the view. In my case my
//cc inputbox has a name = "cc" and id = "cc"
use yii\validators\EmailValidator;
//Assuming your view stresses separation of fields
//with ONLY a comma ..as tip to inputbox.
public function emailinvoice() {
$validator = new EmailValidator([
'enableIDN'=>true,
'checkDNS'=>true
]);
//if getting value from view directly WITHOUT a model: id and name of inputbox is 'cc'
$cc = Yii::$app->request->post('cc');
//if getting value from model: field is called 'email_2'
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$cc = $model->email_2;
//catch multiple addresses by building an array
//as mentioned above
$array = [];
//the field is not empty => single address, or there is a separator comma in it => multiple addresses.
//You can add more validators here ie || (strpos($cc, ';')
if (!empty($cc)||(strpos($cc, ','))){
//remove comma
$cc = explode(',', $cc);
//after explode cc is an array.
//so $cc[0] = 'name@domain.com'
//and $cc[1] = ' name2@domain.com'
//Note the space before the second
//element which you will have to remove.
//Each array component could have a
//space before it especially the second
//element so trim spaces for all items
//in new array
$i = 0;
foreach ($cc as $address) {
//remove the potential spaces
$address = ltrim(rtrim($address));
if ($validator->validate($address)) {
//include in new array
$array[$i] = $address;
}
else {
Yii::$app->session->setFlash('danger', 'cc error'.$i);
}
$i+=1;
}
$send->setCc($array);
}
}
答案 3 :(得分:0)
尝试解决方案:
$mail = Yii::$app->mailer->compose($mail_type, $params)
->setFrom([ self::$_sender => self::$_senderName ])
->setSubject($subject);
foreach(self::$_to as $receiver){
$mail->setTo($receiver)
->send();
}
答案 4 :(得分:0)