PHP Foreach Loop mail () - PullRequest
       1

PHP Foreach Loop mail ()

0 голосов
/ 03 августа 2011

Мой следующий скрипт работает нормально, когда в текстовую область вводится один адрес электронной почты, но после ввода двух адресов электронной почты не отправляется.Что я делаю не так?

if($_POST['submit']=='Send Email') {

$email_addresses = explode(",\n", $_POST['email']);

foreach($email_addresses as $email_address){

$email_address = trim($email_address);

send_mail(  'noreply@noreply.com',
                        $email_address,
                        'Test Email',
                        "Hello This Email Is A Test");

}


}

var_dump ($ email_addresses) приводит к этому

array(1) { [0]=> string(39) "email1@test.com email2@test.com" }

Ответы [ 4 ]

6 голосов
/ 03 августа 2011

Вы используете одно и то же имя переменной дважды

foreach($email_addresses as $email_addresses)

поэтому во втором цикле источник перезаписывается

Edit:

пожалуйста, опубликуйте вывод

var_dump($_POST['email']);
var_dump(explode(",\n", $_POST['email']));
2 голосов
/ 03 августа 2011

Должно быть:

foreach($email_addresses as $email_address){

$email_address = trim($email_address);

send_mail(  'noreply@noreply.com',
                        $email_address,
                        'Test Email',
                        "Hello This Email Is A Test");

}

Также разделение с использованием разнесения по разделителю ",\n" не очень хорошая идея (в некоторых случаях люди могут отправить ",\r\n"). Укажите несколько полей или используйте preg_split().

Если это не сработает, попробуйте var_dump($email_address); после функции explode(), чтобы получить информацию о том, что именно происходит с вводом (и, таким образом, вы видите, что ввод действительно корректен).

ОБНОВЛЕНИЕ: Как вы можете ясно видеть, в $ email_address нет \ n. Это зависит от вашей HTML-формы.

Для быстрого исправления просто explode(', ', $email_addresses); Также - вы пропустили , в своем вводе, который вам требуется, чтобы взорвать эту строку.

1 голос
/ 03 августа 2011
foreach($email_addresses as $email_addresses){ 

Означает, что вы перезаписываете исходный массив ($ email_addresses) первой записью в массиве, поскольку они имеют одинаковое имя переменной.К сожалению, PHP выдает ошибку, поэтому вы в конечном итоге переписываете свой массив с первым адресом электронной почты, а затем преждевременно (в соответствии с вашими потребностями) выходите из цикла (хотя это ожидаемое и логичное поведение).

1 голос
/ 03 августа 2011

очевидно a@b.com b@c.com не является действительным электронным письмом, и мои экстрасенсорные способности говорят мне, что это неправильный способ сделать это. Что если я введу что-то еще, кроме адреса электронной почты? Попробуйте очистить данные, которые вы получаете от пользователя. Вы не можете доверять вводу пользователя вслепую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...