Yii2 SwiftMailer发送邮件两次

时间:2017-09-23 07:14:33

标签: php email yii swiftmailer

我为足球迷写了一个游戏。所以,我必须向一群人发送类似的邮件(不是完全重复的电子邮件副本)。 当我在一个循环中发送邮件时 - 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);

3 个答案:

答案 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“
  • SwiftMailer的发送功能中出现了问题

答案 2 :(得分:0)

毕竟 - 我发现问题不是我的Yii2框架,而是我的托管邮件服务器。 我使用https://github.com/ChangemakerStudios/Papercut来监听我的框架发送的内容。它在端口25上接收邮件,同时它在端口37804上侦听事件。这有点令人困惑。本地邮件服务器的Yii2 web.php简单配置是:

align-items: flex-start;

感谢大家,谁读过我的帖子!