web-dev-qa-db-fra.com

Comment vérifier si le courrier a été envoyé avec succès

Je développe une application Asp.Net, dans laquelle j'envoie un courrier à l'adresse de messagerie de l'utilisateur, s'il oublie le mot de passe.

Je veux vérifier si le courrier a été envoyé avec succès ou non .. Est-ce qu'il y a une méthode pour le savoir?.

MODIFIER

Au cas où un email id n'existe pas, alors je détecte un échec.

20
Vaibhav Jain

si votre méthode SmtpMail.Send(message) ne renvoie aucune erreur, cela signifie que l'e-mail a été envoyé au serveur SMTP, alors vous êtes en dehors de votre juridiction, c'est à quel point vous pouvez le savoir.

18
Francisco Aquino

Si vous utilisez System.Net.Mail, essayez

message.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess;
9
statenjason

Placez la méthode .Send (msg) dans un bloc try catch et attrapez SmtpFailedRecipientException.

try
{
    mail.Send(msg);
}
catch (SmtpFailedRecipientException ex)
{
    // ex.FailedRecipient and ex.GetBaseException() should give you enough info.
}
8
Brandon

Selon spec :

S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:<[email protected]>
S: 250 Ok
C: RCPT TO:<[email protected]>
S: 250 Ok
C: RCPT TO:<[email protected]>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <[email protected]>
C: To: Alice Example <[email protected]>
C: Cc: [email protected]
C: Date: Tue, 15 Jan 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
{The server closes the connection}

Dès que le serveur dit 250 Ok: queued as 12345, vous ne pouvez pas savoir avec certitude s'il a réellement envoyé un courrier électronique ou s'il a été livré.

6
Anton Gogolev

Non. Le courrier électronique (basé sur SMPT) est un protocole de transport peu fiable et, même s’il existe quelques piratages permettant de détecter qu’un courrier électronique a été reçu et lu, par ex. en incorporant une URL d'image individualisée dans l'e-mail et en vérifiant que l'image a été demandée par le client du destinataire, il n'existe aucun moyen absolument fiable de répondre à votre demande.

4
jarnbjo

La méthode SmtpClient.Send lève une exception s'il y a un problème d'envoi. Mais au-delà de l'envoi de ce message au serveur SMTP, il est impossible de savoir s'il parvient à la destination.

4
Ken Pespisa

Vous pouvez utiliser DeliveryNotificationOptions pour recevoir un accusé de réception.

Si vous avez un objet MailMessage nommé mail, procédez comme suit:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
4
Aaron

J'utilise Gmail SMTP pour envoyer des mails avec mon programme. Un faux courrier envoyé renvoie Ok même avec l'interruption SmtpFailedRecipientException.

Mais lorsque je vérifie avec Outlook mon destinataire gmail, je constate que le courrier n'a pas été envoyé avec une explication. Avec un sujet Notification de statut de livraison (échec)

Ma question est la suivante: il est possible d’obtenir cette notification dans le programme.

J'ai trouvé ça mais ce n'est pas pour POP

Notifier le client C #, lorsque le serveur SMTP reçoit un nouvel email

0
Ismail Gunes