2015-03-24 1 views
0

Я использую PHPRunner, и я пытаюсь создать кнопку для отправки электронной почты выбранным пользователям с персонализированным сообщением тела. Я нашел пример на странице поддержки PHPRunner (Send an email to selected users), но это только с жестко запрограммированным сообщением, поэтому я пытаюсь изменить пример.PHPRunner: массив электронной почты, не может персонализировать сообщение

Мне удалось отправить письмо с персонализированным сообщением, если я выбрал только одного пользователя, но если я выберу более одного, все они получат одно и то же сообщение.

Это то, что я сейчас:

$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; 
} 

Что я должен изменить? Спасибо.

+0

Можете вы добавить код, который отправляет электронные письма? –

+0

Извините, у меня больше нет кода. Это всего лишь фрагмент кода, который я использую для создания кнопки в PHPRunner – Luca

+0

Я забыл спросить, почему заголовок этого вопроса говорит «Java». Можете ли вы внести изменения, поскольку это смутит людей. –

ответ

0

Проблема:

В цикле Еогеаспа вы добавляющая каждый новый адрес электронной почты одной переменные:

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

и вы присваивающие новое значение $body переменные (отменяя старый) в каждая итерация:

$body = $data["MESSAGE_FIELD"]; 

Поэтому, когда вы звоните runner_mail только один раз за пределами цикла while вы отправите одно и то же тело (с последней итерации) всем получателям (вы создали массив всех получателей, используя цикл while).

Решение:

Вам необходимо позвонить runner_mail для каждого получателя (как тело отличается). Вы можете добиться этого, переместив вызов на runner_mail внутри цикла while:

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)); 
    } 
} 
+0

Эти решения работают отлично! Большое спасибо. – Luca

+0

Удовольствие. Имейте в виду, что в этом коде есть еще кое-что: строки 6 и 7 являются избыточными, так как вы можете использовать $ data array в вызове runner_mail(), я бы также посоветовал вам не отправлять электронные письма с пустой темой. –

+0

В этом случае я отправляю электронные письма без темы, потому что письма отправляются моему поставщику sms (Esendex). Здесь электронное письмо преобразуется в sms через служебную электронную почту на sms. Для меня это простой способ отправить персонализированные sms моим клиентам. Я знаю, что почти у каждого поставщика sms есть API, но я не программист. Большое спасибо за Вашу помощь. – Luca

Смежные вопросы