2008-09-09 5 views
12

Lorsque vous envoyez un courrier électronique en utilisant C# et l'espace de noms System.Net.Mail, vous pouvez définir les propriétés "De" et "Expéditeur" sur l'objet MailMessage, mais ni l'un ni l'autre ne permet cela va dans la section DATA différents les uns des autres. MAIL FROM est défini sur la valeur de la propriété "From" et si vous définissez "Sender", il ajoute uniquement un autre champ d'en-tête dans la section DATA. Cela se traduit par "De [email protected] au nom de [email protected]", ce qui n'est pas ce que vous voulez. Est-ce que je manque quelque chose?Comment pouvez-vous définir l'enveloppe SMTP MAIL FROM en utilisant System.Net.Mail?

Le cas d'utilisation contrôle la destination NDR pour les bulletins d'informations, etc., qui sont envoyés pour le compte de quelqu'un d'autre.

J'utilise actuellement aspNetEmail au lieu de System.Net.Mail, puisqu'il me permet de le faire correctement (comme la plupart des autres bibliothèques SMTP). Avec aspNetEmail, ceci est accompli en utilisant la propriété EmailMessage.ReversePath.

Répondre

1

Voulez-vous dire cela ?:

//create the mail message 
MailMessage mail = new MailMessage(); 

//set the addresses 
mail.From = new MailAddress("[email protected]"); 
mail.To.Add("[email protected]"); 

//set the content 
mail.Subject = "This is an email"; 
mail.Body = "this is a sample body with html in it. <b>This is bold</b> <font color=#336699>This is blue</font>"; 
mail.IsBodyHtml = true; 

//send the message 
SmtpClient smtp = new SmtpClient("127.0.0.1"); 
smtp.Send(mail); 

De http://www.systemnetmail.com/faq/3.1.2.aspx

+0

Non, l'adresse mail.From déterminera le MAIL FROM dans l'enveloppe et dans la section DATA. Je veux faire ces deux adresses différentes. –

+0

l'adresse mail.From ne déterminera pas nécessairement le MAIL FROM dans l'enveloppe. Cela dépend de la méthode de livraison. – bzlm

4

Je viens de découvrir comment le faire:

  • mail.From spécifier l'e-mail du visible à l'utilisateur final
  • mail.Sender spécifie l'enveloppe MAIL FROM

C'est (même s'il m'a fallu un certain temps pour le comprendre)

+2

Non, comme mentionné dans ma question: et si vous définissez "Expéditeur" il ajoute seulement un autre champ d'en-tête dans la section de données. Cela se traduit par "De [email protected] au nom de [email protected]", ce qui n'est pas ce que vous voulez. –

+0

Je vois ce que tu veux dire. J'analysais les paquets en utilisant Wireshark et l'enveloppe MAIL FROM était correctement définie. Je n'ai vu aucun problème en utilisant GMail ou AOL (expéditeur, from, to et return-path sont correctement définis). Mais quand j'utilise mon compte hotmail ou mon serveur d'échange, je vois le même message que vous. – Romhein

+1

Il ne s'agit pas de cacher l'expéditeur.Le problème est que l'enveloppe de courrier ne fait techniquement pas partie du message lui-même et que l'en-tête Return-Path est entouré de nombreuses considérations complexes. Cela signifie que la méthode de livraison réelle aura un impact sur les deux. – bzlm

7

MailMessage.Sender sera toujours insérer un en-tête Sender (interprétée comme au nom de dans votre client e-mail).

Si vous utilisez la méthode de diffusion Network sur le SmtpClient, .Sender modifiera également l'expéditeur dans l'enveloppe. L'utilisation de la méthode de livraison PickupDirectoryFromIis laissera à IIS pour déterminer l'expéditeur de l'enveloppe et IIS utilisera l'adresse From, pas l'adresse Sender.

There's a similar question on MSDN here.

2

Si vous ajoutez les lignes suivantes le Return-Path et la réponse-en-têtes sont définis dans l'en-tête de courrier.

Dim strReplyTo As String = "[email protected]" 
message.ReplyToList.Add(strReplyTo) 
message.Headers.Add("Return-Path", strReplyTo) 

Et si vous cliquez sur l'ensemble réponse e-mail à l'adresse de réponse

+0

+1. J'ai testé avec Outlook, semble fonctionner. Je me demande cependant si l'on peut être sûr à 100% que tous les clients de messagerie respectent l'en-tête 'Reply-To' et répondent à l'adresse indiquée dans cet en-tête. – Azimuth

+0

Return-Path ne fonctionnera pas dans l'en-tête. Il prendra toujours l'adresse email de rebond même votre expéditeur ou votre adresse d'expéditeur dans system.net.mail. –