Обработка почтовых сбоев с помощью PHP? - PullRequest
2 голосов
/ 17 января 2011

Если я отправляю электронное письмо через GMail на этот адрес nkhkhlkhlkjlkjkljlkjlk@gmail.com

Я получаю сообщение об ошибке:

Доставка следующему получателю не удалась окончательно

У меня вопрос: если я отправляю с помощью функции PHP mail, как я могу перехватить ненадежные письма?

Мой код:

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

$to = "nkhkhlkhlkjlkjkljlkjlk@gmail.com";
$subject = "Testing";
$message = "Testing body";

mail($to, $subject, $message, $headers); 

Ответы [ 6 ]

2 голосов
/ 17 января 2011

Вы не можете обнаружить такие ошибки, просто используя mail (). Вы должны указать действительный адрес возврата, а затем подключиться к этому почтовому ящику (через IMAP или POP, для этого есть функции) и проверить, отклонено ли какое-либо сообщение. Имейте в виду, что отскок может занять много времени (даже часов, из-за временных ошибок), поэтому вы должны выполнять эту проверку асинхронно.

2 голосов
/ 17 января 2011

вы можете получить сообщение по почте при использовании этого:

$bounce = 'test@domian.com';
mail($to, $subject, $message, $headers,"-f $bounce");

Это отправит все отскочившие письма на ваш адрес

1 голос
/ 17 января 2011

Вы должны войти через IMAP или POP3 в свой почтовый ящик и проанализировать адрес электронной почты и ошибку доставки.

Стоит также отметить, что вы можете указать (при отправке) пользовательские заголовки, чтобы лучше отслеживать источник сообщения, яполагаю, что MailChimp и другие делают это, отслеживают кампании и т. д. *

1 голос
/ 17 января 2011

Функция PHP mail() имеет статус ошибки в качестве возвращаемого значения функции, но она не обнаружит такого рода ошибки, потому что она только проверяет, было ли отправлено электронное письмо, но не получено.

(это потому, что он должен немедленно вернуть управление программе; он не может ждать возможного отказов, потому что они могут занять много времени - вы не хотите, чтобы ваша программа сиделаи подождать пять дней на случай, если электронное письмо будет возвращено, не так ли?)

Таким образом, единственный способ определить, было ли сообщение отклонено, - это иметь отдельную программу, которая проверяет почтовый ящик, на который будут отправлены сообщенияto.

Вы можете указать почтовый ящик для отказов, используя опцию -f в строке параметров почты (см. справочную страницу PHP mail () для получения дополнительной информации об этом).

Затем попросите отдельную программу периодически проверять этот почтовый ящик на наличие ненадежных сообщений и при необходимости сообщать о них.(есть ряд библиотек PHP, которые позволяют вам проверять почтовый ящик; Google поможет вам здесь или заглянет в PEAR)

Определение того, какое это письмо было, будет зависеть от качества отказов.Вы определенно должны быть в состоянии увидеть адрес электронной почты получателя, но не сможете определить, какое это было электронное письмо, то есть сопоставить его с конкретным случаем, когда вы сначала вызвали функцию mail().

Надеюсь, это поможет.

1 голос
/ 17 января 2011

Вы можете использовать PEAR MAil , он содержит метод parseAddressList(), который проверяет, принимает ли сервер адреса электронной почты этот адрес.Он также возвращает полезные сообщения об ошибках.

0 голосов
/ 17 января 2011

PHP ничего не знает о почте после того, как она вышла из функции mail, поэтому нет способа сделать это одновременно с отправкой почты.

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