Я создаю автоматизированный информационный бюллетень, который каким-то образом застрял в этой проблеме. Мне нужно знать, отправлено ли электронное письмо или нет. Вот мой код
@$send = mail($emailRecipient, $subject, $message, $headers);
Я попытался добавить его в оператор if, но он не работает здесь, это код.
if( @$send = mail($emailRecipient, $subject, $message, $headers)){ //do something }else{ //do something }
if(@mail($emailRecipient, $subject, $message, $headers)) { echo "Mail Sent Successfully"; }else{ echo "Mail Not Sent"; }
Во-первых, я бы предложил использовать стороннюю почтовую библиотеку ( SwiftMailer , PHPMailer , Zend_Mail …) для отправки электронной почты вместо встроенной mail
. Компоновка почты сложнее, чем большинство людей понимают, особенно если вы хотите делать многостраничные и / или форматированные HTML-сообщения.
Во-вторых, помимо проверки того, было ли сообщение успешно доставлено на первую (обычно локальную) почтовую службу, практически невозможно определить, было ли отправлено электронное письмо. Это связано с тем, что почта по сути работает, и есть немного, чем можно сделать по этому поводу.
Единственное, что вы можете (и действительно должны) делать, это убедиться, что ваша система обрабатывает возвращенные письма разумным способом. например. Если адрес электронной почты постоянно отскакивает, рассмотрите отказ от подписки на адрес.
Вот правда: к сожалению, вы не можете надежно определить, было ли отправлено или получено электронное письмо: электронная почта не является надежной формой общения.
Результат вызова mail()
указывает только на то, что PHP смог отправить электронное письмо в MTA, но это не укажет, действительно ли отправлено электронное сообщение или что получатель действительно получил его.
Если вы хотите повысить надежность, вы должны использовать что-то другое, кроме mail()
. Хотя я никогда не использовал его, PHPMailer или другая библиотека SMTP может предоставить вам возвращаемую информацию из MTA, которая расскажет вам больше о доставке в очередь, но без опроса для сообщения о отказе (которое может или не может быть доставлено в отправителя), вы не можете сказать, получил ли получатель электронное письмо.
Вы также можете попробовать это
$send = mail($to,$subject,$msg); if($send) { echo "Your Account is Successfully Created. You must Activate your account."; } else echo "Failed to send";