php – detecta se o email é enviado

Estou construindo um boletim informativo automatizado, estou meio preso com este problema. Preciso saber se o e-mail foi enviado ou não. Aqui está o meu código

@$send = mail($emailRecipient, $subject, $message, $headers); 

Eu tentei adicioná-lo a uma declaração if, mas isso não funciona aqui é o código.

 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"; } 

Em primeiro lugar, sugiro usar uma biblioteca de correio de terceiros ( SwiftMailer , PHPMailer , Zend_Mail …) para enviar e-mails em vez da function de mail incorporado. Escrever o correio é mais complicado do que a maioria das pessoas percebem, especialmente se você deseja fazer e-mails com formato múltiplo e / ou HTML.

Em segundo lugar, além de verificar se a mensagem foi entregue com sucesso ao primeiro serviço de e-mail (geralmente local), é praticamente impossível determinar se um email foi enviado. Isto é devido à maneira como o email funciona inerentemente e há pouco do que pode ser feito sobre isso.

A única coisa que você pode (e realmente deveria) fazer, é certificar-se de que o seu sistema lida com os e-mails rejeitados de forma sã. por exemplo. Se um endereço de e-mail continuamente saltar, considere cancelar a inscrição do endereço.

Aqui está a verdade: infelizmente você não pode detectar de forma confiável se um e-mail foi enviado ou recebido: o email não é uma forma confiável de comunicação.

O resultado de uma chamada para o mail() indica apenas que o PHP poderia enviar o e-mail para um MTA, mas isso não indicará se um e-mail foi ou não enviado ou o destinatário realmente o recebeu.

Se você quer mais confiabilidade, você precisa usar algo além do mail() . Embora eu nunca usei, o PHPMailer ou outra biblioteca SMTP pode fornecer as informações retornadas do MTA, o que lhe dirá mais sobre a entrega na fila, mas sem pesquisa para uma mensagem de retorno (que pode ou não ser entregue ao checkbox de input do remetente) você não tem como saber se um destinatário recebeu o e-mail.

Você também pode tentar isso

 $send = mail($to,$subject,$msg); if($send) { echo "Your Account is Successfully Created. You must Activate your account."; } else echo "Failed to send";