20 Stimmen

System.Net.Mail Alternative

Ich arbeite an einem Tool, das E-Mails mit unserem Mailserver in C# terminiert. Ich hatte die System.Net.Mail-Klassen verwendet, um die E-Mail zu senden.

In letzter Zeit bin ich auf verschiedene Probleme im Zusammenhang mit RFC-Verletzungen und anderen Problemen gestoßen, z. B. dass SmtpClient die SMTP-Sitzung nicht protokollgemäß beendet. Jedes dieser Probleme trägt zu einer hohen Spam-Quote bei und beeinträchtigt die E-Mail-Zustellung, so dass ich eine Lösung für diese Probleme benötige.

Ich frage mich, was andere Leute getan haben, um diese Probleme zu lösen. Haben die Leute angefangen, eine Drittkomponente zu verwenden, und wenn ja, welche?

EDIT : Als Beleg dafür siehe: http://www.codeproject.com/KB/IP/MailMergeLib.aspx

0 Stimmen

In Ihrem zweiten Absatz sollten Sie einen Link zu den Belegen angeben, auf die Sie sich beziehen.

1 Stimmen

Du meine Güte: social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/ Das hat also eindeutig keine hohe Priorität.

0 Stimmen

Tatsächlich war es für uns eine hohe Priorität, dies für .NET 4.0 zu beheben, und wir haben speziell in diesem Bereich von System.Net.Mail erhebliche Verbesserungen vorgenommen. Siehe meine Antwort unten

5voto

Gebb Punkte 6128

Eine Alternative ist MailKit . Hat eine Tonne von Funktionen, Senden kann zuverlässig abgebrochen werden über eine CancellationToken also hat es keine das Problem de SmtpClient dass es die angegebene Zeitüberschreitung nicht einhält. Hat eine Menge von Downloads auf NuGet, auch.

Auch die jüngsten Dokumentation empfiehlt es:

[System.Obsolete("SmtpClient und sein Netzwerk von Typen sind schlecht konzipiert, wir empfehlen dringend die Verwendung von https://github.com/jstedfast/MailKit y https://github.com/jstedfast/MimeKit stattdessen")] public class SmtpClient : IDisposable

2voto

Nathan Palmer Punkte 1885

Wenn Sie einen Microsoft Exchange 2007 E-Mail-Server haben, können Sie dessen Webservice Richtung zum Senden von E-Mails. Der Webdienst selbst ist etwas seltsam, aber wir konnten die Seltsamkeiten kapseln und dafür sorgen, dass er genau wie unsere SMTP-Klasse funktioniert.

Zunächst müssen Sie einen Verweis auf den Exchange-Webdienst wie folgt erstellen: https://mail.yourwebserver.com/EWS/Services.wsdl

Hier ist ein Beispiel:

public bool Send(string From, MailAddress[] To, string Subject, string Body, MailPriority Priority, bool IsBodyHTML, NameValueCollection Headers)
{
    // Create a new message.
    var message = new MessageType { ToRecipients = new EmailAddressType[To.Length] };

    for (int i = 0; i < To.Length; i++)
    {
        message.ToRecipients[i] = new EmailAddressType { EmailAddress = To[i].Address };
    }

    // Set the subject and sensitivity properties.
    message.Subject = Subject;
    message.Sensitivity = SensitivityChoicesType.Normal;
    switch (Priority)
    {
        case MailPriority.High:
            message.Importance = ImportanceChoicesType.High;
            break;

        case MailPriority.Normal:
            message.Importance = ImportanceChoicesType.Normal;
            break;

        case MailPriority.Low:
            message.Importance = ImportanceChoicesType.Low;
            break;
    }

    // Set the body property.
    message.Body = new BodyType
                   {
                       BodyType1 = (IsBodyHTML ? BodyTypeType.HTML : BodyTypeType.Text),
                       Value = Body
                   };

    var items = new List<ItemType>();
    items.Add(message);

    // Create a CreateItem request.
    var createItem = new CreateItemType()
                     {
                         MessageDisposition = MessageDispositionType.SendOnly,
                         MessageDispositionSpecified = true,
                         Items = new NonEmptyArrayOfAllItemsType
                                 {
                                     Items = items.ToArray()
                                 }
                     };

    var imp = new ExchangeImpersonationType
              {
                  ConnectingSID = new ConnectingSIDType { PrimarySmtpAddress = From }
              };
    esb.ExchangeImpersonation = imp;

    // Call the CreateItem method and get its response. 
    CreateItemResponseType response = esb.CreateItem(createItem);

    // Get the items returned by CreateItem.
    ResponseMessageType[] itemsResp = response.ResponseMessages.Items;
    foreach (ResponseMessageType type in itemsResp)
    {
        if (type.ResponseClass != ResponseClassType.Success)
            return false;
    }

    return true;
}

1voto

Doug L. Punkte 2636

Ich habe SQL Server zum Senden von E-Mails in Situationen verwendet, in denen der Client-Desktop nicht in der Lage war, E-Mails zu senden (normalerweise aus Sicherheitsgründen), der Server aber schon.

1voto

Jeff Tucker Punkte 3412

SmtpClient wurde in .NET 4.0 so geändert, dass er Verbindungen durch Senden einer QUIT-Nachricht ordnungsgemäß schließt. Darüber hinaus wurden erhebliche Verbesserungen bei der Einhaltung von Standards in Bezug auf die Unicode-Kodierung und das Falten langer Zeilen vorgenommen, so dass Sie feststellen sollten, dass Ihre Spam-Ergebnisse sinken, wenn Sie zu .NET 4.0 wechseln. Die Korrekturen für die Faltung und die Kodierung wurden mit .NET 4.0 Beta 2 ausgeliefert, auf die Korrektur der QUIT-Nachricht müssen Sie jedoch bis .NET 4.0 RC warten. Außerdem wird SmtpClient jetzt IDisposable implementieren, so dass Sie Ihre Smtp-Verbindungen deterministisch schließen können, wenn Sie mit dem Senden von Nachrichten fertig sind. Dieser Blog-Beitrag beschreibt einige der Verbesserungen, die vorgenommen wurden, obwohl er nicht über IDisposable auf SmtpClient spricht (es sollte irgendwann einen weiteren Blog-Beitrag in diesem Blog geben, der diese Änderung beschreibt): http://blogs.msdn.com/ncl/archive/2009/08/06/what-s-new-in-system-net-mail.aspx

1voto

Martin Vobr Punkte 5673

Was ist mit Rebex Secure Mail ?

Offenlegung: Ich bin an der Entwicklung dieser Bibliothek beteiligt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X