wake-up-neo.net

.Net System.Mail.Message fügt mehrere "An" -Adressen hinzu

BEARBEITEN: Diese Frage ist sinnlos, außer als Übung in roten Heringen. Das Problem stellte sich als Kombination aus meiner Idiotie heraus (NO ONE wurde per E-Mail verschickt, da der Host nicht angegeben wurde und in der web.config nicht korrekt war) und die Benutzer sagten mir, dass sie manchmal die E-Mails erhielten und manchmal nicht In Wirklichkeit bekamen sie NIEMALS die E-Mails.

Also, anstatt die richtigen Schritte zu unternehmen, um das Problem in einer kontrollierten Umgebung zu reproduzieren, habe ich mich auf die Benutzerinformationen und die Mentalität "Es funktioniert auf meinem Computer" gestützt. Eine gute Erinnerung an mich selbst und alle anderen, die manchmal eine Rolle spielen Dummkopf.


Ich habe gerade etwas getroffen, das ich für inkonsistent halte und wollte sehen, ob ich etwas falsch mache, ob ich ein Idiot bin oder ...

MailMessage msg = new MailMessage();
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");

Schickt diese E-Mail wirklich nur an eine Person, die letzte.

Um Multiples hinzuzufügen, muss ich Folgendes tun:

msg.To.Add("[email protected],[email protected],[email protected],[email protected]");

Ich verstehe es nicht Ich dachte, ich würde mehrere Personen zur Adressensammlung To hinzufügen, aber ich habe sie ersetzt.

Ich glaube, ich habe gerade meinen Fehler erkannt. Um ein Element zur Sammlung hinzuzufügen, verwenden Sie .To.Add (neue MailAdresse ("[email protected]"))

Wenn Sie nur eine string verwenden, ersetzt sie alles, was sie in ihrer Liste hatte EDIT: Andere Leute haben getestet und sehen dieses Verhalten nicht. Dies ist entweder ein Fehler in meiner speziellen Version des Frameworks oder eher ein Idiot-Manöver von mir.  

Pfui. Ich würde das als ziemlich große Gotcha betrachten! Da ich meine eigene Frage beantwortet habe, aber ich denke, dass dies im Stackoverflow-Archiv von Nutzen ist, werde ich sie trotzdem fragen. Vielleicht hat jemand sogar eine Vorstellung von anderen Fallen, in die Sie fallen können.

37
Matt Dawdy

Ich konnte Ihren Fehler nicht replizieren:

var message = new MailMessage();

message.To.Add("[email protected]");
message.To.Add("[email protected]");

message.From = new MailAddress("[email protected]");
message.Subject = "Test";
message.Body = "Test";

var client = new SmtpClient("localhost", 25);
client.Send(message);

Ausgeben des Inhalts von An: MailAddressCollection :

MailAddressCollection (2 Beiträge)
DisplayName-Benutzerhostadresse 

user example.com [email protected]
user2 example.com [email protected]

Und die resultierende E-Mail, wie von smtp4dev gefangen:

Received: from mycomputername (mycomputername [127.0.0.1])
     by localhost (Eric Daugherty's C# Email Server)
     3/8/2010 12:50:28 PM
MIME-Version: 1.0
From: [email protected]
To: [email protected], [email protected]
Date: 8 Mar 2010 12:50:28 -0800
Subject: Test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

Test

Sind Sie sicher, dass mit Ihrem Code oder SMTP-Server kein anderes Problem vorliegt?

32
Lance McNearney

Sie können dies entweder mit mehreren System.Net.Mail.MailAddress-Objekten tun oder Sie können eine einzelne Zeichenfolge angeben, die alle durch Kommas getrennten Adressen enthält

10
Brian Surowiec
private string FormatMultipleEmailAddresses(string emailAddresses)
    {
      var delimiters = new[] { ',', ';' };

      var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

      return string.Join(",", addresses);
    }

Jetzt kannst du es gerne benutzen 

var mailMessage = new MailMessage();
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]"));
9
prashant

Sie können versuchen, die E-Mails in eine durch Kommas getrennte Zeichenfolge ("[email protected], [email protected]") zu setzen:

C #:

ArrayList arEmails = new ArrayList();
arEmails.Add("[email protected]");
arEmails.Add("[email protected]");
           
string strEmails = string.Join(", ", arEmails);

VB.NET bei Interesse:

Dim arEmails As New ArrayList
arEmails.Add("[email protected]")
arEmails.Add("[email protected]")

Dim strEmails As String = String.Join(", ", arEmails)
5
Chad Levy

Fügen Sie mehrere System.MailAdress-Objekte hinzu, um zu erhalten, was Sie möchten.

3
David Brunelle

Danke, dass Sie das entdeckt haben. Ich wollte gerade Zeichenfolgen hinzufügen, die genauso denken wie Sie, dass sie am Ende der Sammlung hinzugefügt würden. Es scheint, dass die Parameter sind:

msg.to.Add (<MailAddress>) fügt MailAddress am Ende der Auflistung hinzu
msg.to.Add (<string>) fügt der Sammlung eine E-Mail-Liste hinzu

Etwas andere Aktionen je nach Param-Typ, ich denke, das ist eine ziemlich schlechte Form, ich hätte Split-Methoden AddStringList von etwas vorgezogen.

0
Mike

Geben Sie Adressen wie folgt ein:

objMessage.To.Add(***addresses:=***"[email protected] , [email protected] , [email protected]")

0
user2923556