Senden von 2000 E-Mails
Ist es in Ordnung, einen SMTP-Client einmal zu instanziieren und 2.000 E-Mails synchron zu senden?
Beim Instanziieren eines SMTP-Clients für jede Nachricht, die wir mit dem Code senden, der ebenfalls am Ende dieses Beitrags eingefügt wurde, wird der folgende Fehler angezeigt:
System.Net.Mail.SmtpException: Dienst nicht verfügbar, Übertragungskanal wird geschlossen. Die Serverantwort lautete: 4.4.1 Zeitüberschreitung bei der Verbindung
Ich vermute, dass das Instantiieren des SMTP-Clients für jede Nachricht dies verursacht, aber nicht sicher ist. Code ist wie folgt.
List<MailMessage> messages = GetMailMessages();
foreach( MailMessags m in messages)
{
try
{
SmtpClient client = new SmtpClient();//SHOULD THIS BE PLACED OUTSIDE AND BEFORE THE LOOP
client.Send(m);
}
catch (Exception)
{
throw;
}
}
EDIT 1:
Ich habe das gerade bei MSDN gefunden. (http://msdn.microsoft.com/en-us/library/ee706942%28v=vs.110%29.aspx). Wenn Sie also Massen-E-Mails versenden, müssen Sie den SMTP-Client nur einmal instanziieren und für alle MailMessages wiederverwenden.
Die von der aktuellen Instanz der SmtpClient-Klasse hergestellte Verbindung zum SMTP-Server kann erneut verwendet werden, wenn eine Anwendung mehrere Nachrichten an denselben SMTP-Server senden möchte. Das ist
Besonders nützlich, wenn Authentifizierung oder Verschlüsselung verwendet werden, um eine Verbindung zum SMTP-Server herzustellen. Das Authentifizieren und Einrichten einer TLS-Sitzung kann kostspielige Vorgänge sein. Das erneute Herstellen einer Verbindung für jede Nachricht, wenn eine große Menge von E-Mails an denselben SMTP-Server gesendet wird, kann sich erheblich auf die Leistung auswirken. Es gibt eine Reihe von Massen-E-Mail-Anwendungen, die E-Mail-Statusaktualisierungen, Newsletter-Verteilungen oder E-Mail-Benachrichtigungen senden.