Ответ 1
if(@mail($emailRecipient, $subject, $message, $headers))
{
echo "Mail Sent Successfully";
}else{
echo "Mail Not Sent";
}
Я создаю автоматизированный информационный бюллетень, который вроде бы застрял в этой проблеме. Мне нужно знать, отправлено ли электронное письмо или нет. Вот мой код
@$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";