php - détecter si un email est envoyé
Im la construction d'un bulletin d'information automatisé, im un peu bloqué avec ce problème.
J'ai besoin de savoir si le message a été envoyé ou non. Voici mon code
@$send = mail($emailRecipient, $subject, $message, $headers);
j'ai essayé de l'ajouter à une instruction if, mais il ne fonctionne pas voici le code.
if( @$send = mail($emailRecipient, $subject, $message, $headers)){
//do something
}else{
//do something
}
source d'informationauteur Kiel
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je vous suggère l'utilisation d'un tiers mail de la bibliothèque (SwiftMailerPHPMailerZend_Mail...) pour l'envoi de courriels au lieu de construit dans le
mail
fonction. Composant électronique est plus complexe que la plupart des gens à réaliser, surtout si vous voulez le faire en plusieurs parties et/ou email.Deuxièmement, au-delà de vérifier si le message a été livré avec succès à la première (généralement local) e-mail du service, il est quasiment impossible de déterminer si un courriel a été envoyé. Cela est dû à la façon dont les e-mail intrinsèquement fonctionne et il y a peu que ce qui peut être fait à ce sujet.
La seule chose que vous pouvez (et devriez vraiment) faire, assurez-vous que votre système gère les courriels retournés dans un façon saine. par exemple. Si une adresse de courriel en permanence rebondit, envisager de désabonnement de l'adresse.
Voici la vérité: malheureusement, vous ne pouvez pas détecter de manière fiable si un courriel a été envoyé ou reçu: e-mail n'est pas une forme fiable de communication.
Le résultat d'un appel à
mail()
indique seulement que PHP a été en mesure d'envoyer l'email à un MTA, mais ce ne sera pas indiquer si oui ou non un e-mail a bien été envoyé, ou que le destinataire a effectivement reçu.Si vous voulez plus de sécurité, vous devez utiliser quelque chose autres que
mail()
. Bien que je n'ai jamais utilisé, PHPMailer ou d'une autre bibliothèque SMTP peut vous donner les informations renvoyées à partir de la MTA, qui va vous en dire plus sur la file d'attente de la livraison, mais sans interrogation pour un retour à l'expéditeur du message (qui peut ou peut ne pas être remis à l'expéditeur de la boîte de réception) vous n'avez aucun moyen de savoir si un destinataire a reçu le message.Seulement un souci d'exhaustivité il convient de mentionner qu'il existe un moyen d'envoyer un mail via
PHP
et de savoir si c'est vraiment acceptée par le MTA de réception (ce qui, encore une fois, ne signifie pas qu'il est livré à l'utilisateur ou tout simplement rejetées après SMTP poignée de main) ou pas.On peut théoriquement écrire un client SMTP purement dans
PHP
par exemple à l'aide intégrée dans fonctions Flux comme stream_socket_client afin de parler à la réception de MTA par direct raw tcp liens créés dans le protocole SMTP les demandes et les réponses.Logique générale de l'émission de commandes SMTP serait comme:
Bien sûr, cela est manifestement incomplète (connu devs remarquerez que je n'ai pas ni l'écoute, ni l'analyse de SMTP réponses que j'obtiendrais). Pour que cette approche soit utilisée grave ré-inventer la roue en
PHP
langue doit être effectué.Comment ceci pourrait-il être utilisé pour détecter si l'email est envoyé?
Bien, vous auriez au moins 3 types d'informations:
250 2.0.0 Ok
après l'envoi de message texteEncore une fois, ce n'est que pour des fins d'enseignement, ne le faites pas à la maison, sauf si vous êtes prêt à épouser le projet de développement conforme à la norme SMTP client.
Vous pouvez également essayer cette
$envoyer = mail($emailRecipient, $sujet, $message, $headers);
Vérifier la valeur de $a envoyé comme Si($envoyer['code_erreur'] == 0) { echo "succès"; } Else { Echo "erreur"; }