4

SMTP サーバー経由でメールを送信しようとしていますが、次のエラーが表示されて失敗します。

メールボックス名は許可されていません。サーバーの応答は、送信者には有効な逆引き DNS が必要でした。

ここに画像の説明を入力 残念ながら、問題を解決するための有意義な情報を見つけることができませんでした

これが私の方法です:

public void SendSmtp()
{
    try
    {
        using (MailMessage message = new MailMessage())
        {
            message.From = new MailAddress("some@email.com");
            message.To.Add(new MailAddress("other@email.com"));


            message.Subject = "subject";
            message.Body = "body";
            message.IsBodyHtml = true;

            // NetworkCredential basicCredential = new NetworkCredential("test@test.com", "password");
            try
            {
                using (SmtpClient client = new SmtpClient())
                {
                    client.Host = "mail.host.com";
                    client.Port = 25;
                    client.UseDefaultCredentials = true;
                    //  client.Credentials = basicCredential;
                    client.Send(message);
                    MessageBox.Show("Success!!");
                }

            }

            finally
            {
                //dispose the client
                message.Dispose();
            }

        }
    }
    catch (SmtpFailedRecipientsException ex)
    {
        for (int i = 0; i < ex.InnerExceptions.Length; i++)
        {
            SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
            if (status == SmtpStatusCode.MailboxBusy ||
                status == SmtpStatusCode.MailboxUnavailable)
            {
                Console.WriteLine("Delivery failed - retrying in 5 seconds.");
                System.Threading.Thread.Sleep(5000);
                //client.Send(message);
            }
            else
            {
                Console.WriteLine("Failed to deliver message to {0}",
                    ex.InnerExceptions[i].FailedRecipient);
            }
        }
    }
}

これは、理由がわからない別のサーバーまたはローカルマシンで試したときにうまく機能します。サーバーへの SMTP 許可アクセスをセットアップしました。ご意見をお聞かせください。

4

3 に答える 3

2

エラーは、コードが接続しようとしている SMTP サーバーからの直接応答です。クライアント マシンに有効な逆引き DNS マッピング (例: 127.0.0.1 -> localhost) がないため、SMTP サーバーが接続を拒否しています。

クライアントが自分自身を として識別するのと同じくらい単純なことかもしれませんexample.comが、SMTP サーバーが逆ルックアップを行うと、サーバーの IP が として返されますsystem-1-2-3.4.hostingprovider.com

于 2013-07-19T19:43:05.330 に答える
2

私の質問を振り返ってみると、この問題に直面した場合、コードの問題ではなく、ネットワークの問題であると言えます。

これをテストする簡単な方法は、ロックダウンの少ない環境でコードを実行することです。このエラーは、実稼働サーバーでのみ発生していました。開発ではうまくいきました。

つまり、ビジュアル スタジオを閉じて調査する必要があります。エラーは誤解を招く可能性があるため、エラーに 100% 依存するのではなく、ツールを使用して問題をデバッグしてください。Wiresharkを使用してパケットを調べたところ、SMTPサーバーで IP が拒否されていることに気付きました。

私の場合、サーバーに複数のネットワークカードがあったため、気づきませんでした。簡単に推測できなかったもの。したがって、ツールを使用してトラフィック ネットワークを監視することをお勧めします。そうすれば、理由がわかります。

当てずっぽうではなく、ツール* を使って答えを出してください。

*ツール: Wireshark に加えて、mxtoolboxなどのサイトが非常に役立つ可能性があります

于 2014-12-04T15:37:31.917 に答える