19

C# のメール サーバーでメールをスケジュールするツールに取り組んでいます。System.Net.Mail クラスを使用してメールを送信していました。

最近、SmtpClient がプロトコルに従って SMTP セッションを終了しないなど、RFC 違反やその他の問題に関するさまざまな問題に遭遇しました。これらの問題はそれぞれ高いスパム スコアにカウントされ、電子メールの配信に影響を与えるため、これらの問題の解決策が必要です。

これらの問題を解決するために、他の人々が何に頼ったのか疑問に思っています。人々はサードパーティのコンポーネントを使い始めましたか? もしそうなら、どのコンポーネントですか?

編集: 裏付けとなる証拠として、http: //www.codeproject.com/KB/IP/MailMergeLib.aspxを参照してください。

4

8 に答える 8

3

1 つの代替手段はMailKitです。たくさんの機能があり、送信は確実にキャンセルできるCancellationTokenため、指定されたタイムアウトを尊重しないという問題はありません。SmtpClientNuGet にも多くのダウンロードがあります。

最近のドキュメントでも推奨されています。

[System.Obsolete("SmtpClient とその型のネットワークの設計が不十分です。代わりにhttps://github.com/jstedfast/MailKithttps://github.com/jstedfast/MimeKitを使用することを強くお勧めします")] パブリック クラスSmtpClient : IDisposable

于 2016-09-08T12:05:49.070 に答える
2

Microsoft Exchange 2007電子メールサーバーを使用している場合は、そのWebサービスの方向を使用して電子メールを送信するオプションがあります。Webサービス自体は少し奇妙ですが、その奇妙さをカプセル化して、SMTPクラスと同じように機能させることができました。

まず、次のようなExchangeWebサービスを参照する必要があります。https ://mail.yourwebserver.com/EWS/Services.wsdl

次に例を示します。

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;
}
于 2009-10-25T03:17:37.350 に答える
1

Rebex Secure Mailはどうですか?

開示:私はこのライブラリの開発に関わっています。

于 2010-06-21T14:05:52.883 に答える
1

SmtpClient は .NET 4.0 で変更され、QUIT メッセージを送信して接続を適切に閉じるようになりました。さらに、Unicode エンコーディングと長い行の長さの折り畳みに関して標準への準拠が大幅に改善されたため、.NET 4.0 に切り替えるとスパム スコアが低下することがわかります。フォールディングとエンコーディングの修正は .NET 4.0 Beta 2 で出荷されましたが、QUIT メッセージの修正を取得するには .NET 4.0 RC まで待つ必要があります。さらに、SmtpClient は IDisposable を実装するようになり、メッセージの送信が終了したときに smtp 接続を確定的に閉じることができるようになりました。このブログ投稿では、SmtpClient の IDisposable については触れていませんが、行われたいくつかの改善点について詳しく説明しています (その変更について説明するある時点で、そのブログの別のブログ投稿にする必要があります)。 http://blogs.msdn.com/ncl/archive/2009/08/06/what-s-new-in-system-net-mail.aspx

于 2009-12-15T10:07:09.133 に答える
1

クライアント デスクトップは (通常はセキュリティ上の理由で) メールを送信できなかったが、サーバーは送信できたという状況で、SQL Server を使用して電子メールを送信しました。

于 2009-10-23T15:12:06.050 に答える
0

Castle Email.Sender コンポーネント?

于 2009-10-23T15:15:37.400 に答える
0

私はこれらのコンポーネントに満足しています:

于 2009-10-23T15:19:30.950 に答える
0

標準に準拠した広範なメール ツール (およびその他の IETF 標準) のスイートとして、/n software のIP*Worksが優れた API であることが何度かわかりました。着信シナリオと発信シナリオの両方で使用しました。送信シナリオでは、大規模なメール送信のサポートに使用し、現在のプロジェクトでは、使用頻度の高い受信カスタマー サポート メールボックスの大規模な IMAP メールの取得に使用しています。コンプライアンスの問題が発生したことはありません (これまでのところ非常に良好です)。

このスイートは、IMAP と SMTP だけではありません。それはここで見つけることができます.そして、あなたがあなたのお金のために何を得るかを考えると、コストはかなり耐えられることがわかりました.

于 2009-10-25T21:40:22.927 に答える