PHPRunner:电子邮件阵列,无法个性化消息

时间:2015-03-24 10:34:01

标签: java php

我正在使用PHPRunner,而我正在尝试创建一个按钮,向所选用户发送带有个性化正文消息的电子邮件。我在PHPRunner支持页面(Send an email to selected users)中找到了一个示例,但它仅包含硬编码消息,因此我尝试修改该示例。

如果我只选择一个用户,我设法正确发送带有个性化消息的电子邮件,但如果我选择多个用户,则所有用户都会收到相同的消息。

这就是我现在所拥有的:

$emails = array();
while( $data = $button->getNextSelectedRecord() )
{
if( $data["EMAIL_FIELD"] )
$emails[] = $data["EMAIL_FIELD"];
$body = $data["MESSAGE_FIELD"];
}
// send the email
$email = implode(", ", $emails);
$subject = "";
$arr = runner_mail(array('to' => $email, 'subject' => $subject, 'body' => $body));

$result["txt"] = "Email were sent.";
// if error happened print a message on the web page
if( !$arr["mailed"] )
{
$errmsg = "Error happened: <br>";
$errmsg.= "File: " . $arr["errors"][0]["file"] . "<br>";
$errmsg.= "Line: " . $arr["errors"][0]["line"] . "<br>";
$errmsg.= "Description: " . $arr["errors"][0]["description"] . "<br>";
$result["txt"] = $errmsg;
}

我应该改变什么?谢谢。

1 个答案:

答案 0 :(得分:0)

<强>问题:

在foreach循环中,您将每个新电子邮件地址附加到一个变量:

$emails[] = $data["EMAIL_FIELD"];

并且您在每次迭代中为$body变量赋值新值(覆盖旧变量):

$body = $data["MESSAGE_FIELD"];

因此,当你在while循环之外只调用一次runner_mail时,你会将同一个主体(从最后一次迭代)发送给所有收件人(你使用while循环构建了一个包含所有收件人的数组)。

<强>解决方案:

您需要为每个收件人调用runner_mail(因为正文不同)。你可以通过在while循环中将调用移到runner_mail来实现它:

while( $data = $button->getNextSelectedRecord() )
{
    // Send only if email field not empty
    if( $data["EMAIL_FIELD"] ) {
        // This no longer should be an array of emails
        $email = $data["EMAIL_FIELD"];
        $body = $data["MESSAGE_FIELD"];
        $subject = "";
        // Email will be sent for each record
        $arr = runner_mail(array('to' => $email, 'subject' => $subject, 'body' => $body));
    }
}