我为足球迷写了一个游戏。所以,我必须向一群人发送类似的邮件(不是完全重复的电子邮件副本)。 当我在一个循环中发送邮件时 - Yii框架发送邮件两次。 我想 - 这是因为静态变量Yii :: $ app。 请有人给我一个提示。 例如,代码。
foreach ($oRace->user as $currUser) {
$htmlContent = $this->renderPartial('start_race', ['oRace' => $oRace]);
Yii::$app->mailer->compose()
->setFrom('info@example.com')
->setTo($currUser->mail)
->setSubject('Race "' . $raceName . '" has Started')
->setHtmlBody($htmlContent)
->send();
}
提前全部谢谢!
我的梅勒配置。
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'mail.example.eu',
'username' => 'support@example.com',
'password' => 'password',
'port' => '587',
'encryption' => 'TLS',
]
],
还有一件事。循环中的最后一封邮件永远不会重复(只有最后一封)。
另一个失败的选择。 YII :: $ APP-> mailer-> sendMultiple($ allMails);
答案 0 :(得分:2)
我建议您在电子邮件中使用CC或BCC选项,而不要使用foreach
循环发送电子邮件。我希望这会对某人有所帮助。
$email = [];
foreach ($oRace->user as $currUser) {
$email[] = $currUser->mail;
}
$htmlContent = $this->renderPartial('start_race', ['oRace' => $oRace]);
Yii::$app->mailer->compose()
->setFrom('info@example.com')
->setCc($email) // If you're using Bcc use "setBcc()"
->setSubject('Race "' . $raceName . '" has Started')
->setHtmlBody($htmlContent)
->send();
答案 1 :(得分:1)
从提供的代码段中,有3个可能的原因。之一:
$oRace->user
包含每个用户两次$currUser->mail
包含两次电子邮件,例如`email@example.com; email@example.com“答案 2 :(得分:0)
毕竟 - 我发现问题不是我的Yii2框架,而是我的托管邮件服务器。 我使用https://github.com/ChangemakerStudios/Papercut来监听我的框架发送的内容。它在端口25上接收邮件,同时它在端口37804上侦听事件。这有点令人困惑。本地邮件服务器的Yii2 web.php简单配置是:
align-items: flex-start;
感谢大家,谁读过我的帖子!