2017-07-11 7 views
0

J'utilise la bibliothèque @jstedfast Mimekit/Mailkit, Pour envoyer des courriels de masse de mon application. Je veux savoir comment obtenir le statut de livraison de chaque email. C'est mon premier essai pour obtenir ceci et après un certain RnD j'ai obtenu que nous devons placer ou passer report-type = delivery-status certains où, mais je n'ai pas eu aucune idée où faire la forme le doc où j'ai lu ceci . J'essaie aussi en surchargeant DeliveryStatusNotification, mais je n'ai rien reçu. Peut-être que je vais dans la mauvaise direction pour obtenir la notification/statut. J'ai appris que @jstedfast est actif ici. J'ai appris que @jstedfast est actif ici. J'ai besoin de ton aide pour ça. Je n'ai reçu aucune instruction pour le faire. Merci d'avance.obtenir le statut de livraison de courrier électronique avec la bibliothèque mimekit/mailkit

Répondre

1

La première chose que vous devez faire est de sous-classe SmtpClient comme l'exemple dans la documentation:

http://www.mimekit.net/docs/html/M_MailKit_Net_Smtp_SmtpClient_GetDeliveryStatusNotifications.htm

public class DSNSmtpClient : SmtpClient 
{ 
    public DSNSmtpClient() 
    { 
    } 

    /// <summary> 
    /// Get the envelope identifier to be used with delivery status notifications. 
    /// </summary> 
    /// <remarks> 
    /// <para>The envelope identifier, if non-empty, is useful in determining which message 
    /// a delivery status notification was issued for.</para> 
    /// <para>The envelope identifier should be unique and may be up to 100 characters in 
    /// length, but must consist only of printable ASCII characters and no white space.</para> 
    /// <para>For more information, see rfc3461, section 4.4.</para> 
    /// </remarks> 
    /// <returns>The envelope identifier.</returns> 
    /// <param name="message">The message.</param> 
    protected override string GetEnvelopeId (MimeMessage message) 
    { 
     // Since you will want to be able to map whatever identifier you return here to the 
     // message, the obvious identifier to use is probably the Message-Id value. 
     return message.MessageId; 
    } 

    /// <summary> 
    /// Get the types of delivery status notification desired for the specified recipient mailbox. 
    /// </summary> 
    /// <remarks> 
    /// Gets the types of delivery status notification desired for the specified recipient mailbox. 
    /// </remarks> 
    /// <returns>The desired delivery status notification type.</returns> 
    /// <param name="message">The message being sent.</param> 
    /// <param name="mailbox">The mailbox.</param> 
    protected override DeliveryStatusNotification? GetDeliveryStatusNotifications (MimeMessage message, MailboxAddress mailbox) 
    { 
     // In this example, we only want to be notified of failures to deliver to a mailbox. 
     // If you also want to be notified of delays or successful deliveries, simply bitwise-or 
     // whatever combination of flags you want to be notified about. 
     return DeliveryStatusNotification.Failure; 
    } 
} 

Cela indique au serveur SMTP pour vous envoyer des courriels au sujet de l'état de livraison de chaque message que vous envoyez. Ces messages auront un type MIME de niveau supérieur multipart/report avec une valeur report-type de delivery-status.

En d'autres termes, l'en-tête Content-Type ressemblera à ceci:

Content-Type: multipart/report; report-type=delivery-status; boundary=ajkfhkzfhkjhkjadskhz 

Une fois que vous analysez le message avec MimeMessage.Load(), vous pouvez vérifier si le Body est un MultipartReport avec la ReportType attendue valeur de la propriété. De là, vous pouvez localiser la partie enfant qui est de type MessageDeliveryStatus (généralement la deuxième partie je pense). De là, vous voudrez vérifier la propriété StatusGroups (voir http://www.mimekit.net/docs/html/P_MimeKit_MessageDeliveryStatus_StatusGroups.htm) - chaque HeaderList dans la collection aura des informations pour un destinataire différent.

Vous devez lire les RFC répertoriés dans les documents StatusGroups pour déterminer les en-têtes et les valeurs que vous devrez rechercher.

+0

Cette API a-t-elle un moyen de gérer le courrier indésirable comme s'il n'existait pas? Je veux vérifier le courrier rebond. –

+0

Oui. Cette information sera dans les en-têtes. Lire le etc pour plus de détails. – jstedfast

+0

Pourriez-vous upvote et accepter ma réponse? Merci! – jstedfast