0

私は、ネット上の多くのウェブサイトで見つけた単純な標準コードで動作する、完全に機能する VB.NET ソリューションを持っています。これは次のようなものです。

    Dim oMessage As New MailMessage
    oMessage.From = New MailAddress("someone@abc.com")
    oMessage.To.Add("someone_else@abc.com")
    oMessage.Subject = "test mail"
    oMessage.Body = "test mail body"
    oMessage.IsBodyHtml = False
    Dim oSMTP As New SmtpClient("192.168.1.253")
    oSMTP.Port = 25
    oSMTP.EnableSsl = False
    oSMTP.Credentials = New System.Net.NetworkCredential("someone@abc.com", "password")
    oSMTP.Send(oMessage)

実用的なソリューションは、通常の構成の gmail smtp サーバーに依存しています。SMTPサーバーが会社のLAN(192.168.1.253)にあり、ポート25を使用する別の環境で同じソリューションを複製しようとしました.SSLは必要ありません。事実: 1) ソリューションを展開しようとしているサーバーは、専用アドレスから電子メールを送信するサードパーティ ソフトウェアを実行しています (同じ電子メール アドレスを使用する必要があります)。この機能はアクティブで機能しています。2) telnet 経由で SMPT サーバーに接続しようとしたところ、SMPT プロトコルを使用してプライベートのメール アドレスにメールを送信することに成功しました。他のソフトウェアが同じジョブを実行しても問題が発生しないため、これは予期されたものです。3) エラーを取得するために try-catch ブロックを使用してソリューションをテストしましたが、コードがエラーなしで終了しても、宛先にメールが届きません。

私は smtp とメッセージ (および別の送信先アドレス) に対してさまざまなオプションを試しましたが、結果は常に同じでした: メッセージは送信されません。最後のチャンスは、サーバー構成またはウイルス対策ソフトウェアとの競合を探すことです。しかし、SMPT プロトコルを介したサーバーとの「プレーンな」ダイアログが成功し、私の非常に単純なコードが成功しない理由がわかりません。

最後のメモ: 私が言及したメール サーバーは、Microsoft Exchange Server である必要があります。

どこに問題があるのでしょうか? どんな助けでも大歓迎です。

4

1 に答える 1

0

アプリケーションとメール サーバー間の通信を監視するには、wireshark を使用することをお勧めします。私はかつて同様の問題を抱えていたことを知っており、メッセージを受信した後にサーバーが応答したエラーメッセージを見ることができました(何らかの理由で、エラーメッセージがアプリケーションに到達していませんでした)

これも行います:

                oMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

そのため、サーバーがメッセージの送信に失敗した場合は、通知されます。

また、SendAsync メソッドを使用してメールを送信し、(smtp オブジェクトの) SendCompleted イベントに自分自身をバインドする場合、イベントが与える AsyncCompletedEventArgs オブジェクトでエラーを確認できるはずです。

于 2013-09-25T13:51:02.510 に答える