【问题标题】:Yii2 Swiftmailer foreach sending same email to first toYii2 Swiftmailer foreach 向第一个发送相同的电子邮件
【发布时间】:2019-01-30 11:33:59
【问题描述】:

我正在尝试通过 swiftmailer 在 foreach 中发送电子邮件。但它总是只发送给第一个电子邮件收件人乘以用户数。 (比如说,有 3 个用户,它会向第一个用户发送 3 封邮件)。 我检查了 sendmail 的每次迭代都有不同的电子邮件地址,该地址在 $email 实例中($email->getTo()),只要它不能发送电子邮件(即在本地主机上)它就可以正常工作。它创建 3 封电子邮件,带有 3 个不同的地址。但是当它实际上可以通过 SMTP 发送它时,它会将所有邮件发送给同一个人,并呈现相同的文本。

我认为问题出在 $app->mailer->compose 上,但我不太确定。 (似乎该实例正在保存其数据并且无法重写,直到应用程序重置)

控制器:

foreach ($invitations as $invitation_id) {
            $model = Invitation::findOne($invitation_id);
            if (!empty($model)) {
                if (!$model->sendMail('Test mail')) {
                    $errors[] = $model->userName;
                }
            } else {
                $errors[] = "Non existing $invitation_id?";
            }
        }

模特邀请:

public function sendMail ($text){
    $user = User::findOne($this->user_id);
    $email = Yii::$app->mailer->compose('layouts/bulk-email', ['user' => $user, 'text' => $text])
        ->setFrom('test@test.com')
        ->setTo($user['mail'])
        ->setSubject('Test subject');
    return $email->send();
    }

我尝试使用 sendMultiple 方法(首先将消息创建到数组,然后一次全部发送),但它们都发送了 6 次到第一个地址。

我有什么明显的遗漏吗?

【问题讨论】:

  • 您需要将user_id 连同主题一起传递给sendMail(),您正在使用$this->user_id 将电子邮件发送到当前实例中的电子邮件。
  • 是的,抱歉,sendMail 是模型 Invitation 中的方法,而 foreach 在控制器中。这不是真正的问题 - 正如我在上面的代码中所述,我试图从 Swiftmailer 对象中获取邮件地址,它是正确的。但这并没有改变它仍然发送给第一个用户的事实。

标签: php yii2 swiftmailer


【解决方案1】:

实际问题是本地主机没有缓存 ldap 答案,但开发服务器是。所以问题实际上是 Muhammad Omer Aslam 所暗示的 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多