Как я могу отправлять письма через php-скрипт? Я пытаюсь сделать что-то вроде этого:
for($k=0;$k<=$x->length-1;$k++) { for($l=0;$l<=$j-1;$l++) { if($y->item($k)->nodeValue==$JobNoArr[$l] && $AcceptanceDateArr[$l]=='0000-00-00') { //echo $v->item($k)->nodeValue ; $email = $v->item($k)->nodeValue . ","; $to = $email; $subject = "My subject"; $txt = "Hello world!"; $headers = "From: webmaster@example.com" . "\r\n" . "CC: someother.valid@email.adr"; mail($to,$subject,$txt,$headers); } } }
Пожалуйста, помогите мне в этом вопросе.
Лучший Zeeshan
Я настоятельно рекомендую не отправлять почту с помощью функции PHP mail()
. Составление действительных писем и их успешное выполнение сложнее, чем кажется на первый взгляд. Существует кодировка, объединение частей, валидация и санитария, отчет об ошибках (больше, чем bool mail(...)
), поддержка аутентификации и включение и выключение … Функция mail()
не предлагает ничего из этого.
Попробуйте SwiftMailer или аналогичный. Вы можете настроить его на использование функции mail()
PHP и многое другое. Я очень рекомендую.
Вы слишком много пытаетесь разобраться. Попробуйте идти шаг за шагом. Сначала отправьте простое электронное письмо с жестко запрограммированными параметрами для его работы, а затем устраните его в контексте ваших вложенных циклов.
проблема почтовая функция очень ненадежна, особенно при отправке большого количества писем.
я бы порекомендовал заглянуть в библиотеку PHPmailer (использует прямое SMTP-соединение): http://phpmailer.codeworxtech.com/
Код (внутренний блок) выглядит корректно. Убедитесь, что ваша среда настроена правильно. http://ca3.php.net/manual/en/mail.setup.php
сначала сделайте
echo $result = mail($to,$subject,$txt,$headers);
и посмотреть, что получилось, ошибка?
Я рекомендую использовать класс phpMailer
почему у вас есть запятая в конце строки?
$email = $v->item($k)->nodeValue . ",";
вы отправляете по электронной почте каждый раз.
Почтовая функция php-s использует sendmail как MTA, поэтому, если некоторые письма проходят, а некоторые нет, я бы посмотрел на журнал sendmail на наличие ошибок.
Если вы находитесь на общем веб-хосте или домашнем компьютере, основным доменом для сервера будет что-то вроде
server.your-isp-or-host.com
Затем спам-фильтр увидит, что сообщение электронной почты
yourdomain.com
когда он действительно пришел с первого адреса, а затем удалит его.
Это объясняет характер вашей ошибки.
Если вы находитесь на выделенном сервере или статический IP-адрес, указывающий на ваш домашний компьютер с правильно настроенной DNS, вышеуказанное не применяется.
если он работает, отправляя письма в gmail, тогда он должен работать нормально, отправляя письма на yahoo тоже
вы можете обнаружить, что проблема заключается не в отправке писем, а, может быть, в Yahoo, они маркируют их как спам или блокируют их на шлюзе
я замечаю, что вы добавляете запятую в конец адреса электронной почты, в чем смысл?
могут быть другие проблемы, правильны ли ваши петли, покрывают ли они все случаи, которые вы ожидали.
вы отправляете тысячи писем? может ваш mta обрабатывать скорость, с которой вы помещаете электронные письма в очередь
ваш скрипт нажимает max_execution и останавливается?