web-dev-qa-db-ja.com

IPアドレスとしてホストを使用してSMTPを使用してメールを送信すると、リモート名を解決できませんでした

MailMessage message = new MailMessage();
message.Subject = "test";
message.Body = "test";
message.To.Add("[email protected]");
message.From = new MailAddress("[email protected]");
SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Host = "172.22.0.20";
smtp.Port = 25;
smtp.Send(message);

エラーが発生する可能性のある理由

リモート名を解決できませんでした。

IPアドレスを指定したので、明らかに解決は不要です。ポート25でIPとtelnetにpingを送信し、電子メールを正常に送信できます。しかし、私は電子メールを送信できません。

wiresharkトレースを実行しましたが、172.22.0.20にトラフィックが送信されているようには見えません

11
Lee Tickett

私はこのコードを使用し、自分の側ではうまく機能しています。正しいIPアドレスとポート番号を使用していることを確認してください。ポート番号が正しくないと思います。 (メールIDを開き、メール構成を確認してください)

MailMessage mail = new MailMessage("[email protected]", "[email protected]");
mail.Subject = "Subject";
mail.IsBodyHtml = true;
mail.Body = "this is email body";

SmtpClient client = new SmtpClient("172.22.0.20");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");
client.Port = 25;

client.Send(mail);
8

私はあなたのコードをテストしました:

static void Main(string[] args)
        {
            try
            {
                MailMessage message = new MailMessage();
                message.Subject = "test";
                message.Body = "test";
                message.To.Add("[email protected]");
                message.From = new MailAddress("[email protected]");
                SmtpClient smtp = new SmtpClient();
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.UseDefaultCredentials = false;
                smtp.Host = "127.0.0.1";
                smtp.Port = 25;
                smtp.Send(message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadLine();
            }
        }

そして、それは良いようです。私はsmtp4dev Toolsを使用しましたが、これは次のようなものです:

220 localhost smtp4dev ready
EHLO Aepro
250-Nice to meet you.
250-8BITMIME
250-STARTTLS
250-AUTH=CRAM-MD5 PLAIN LOGIN ANONYMOUS
250-AUTH CRAM-MD5 PLAIN LOGIN ANONYMOUS
250 SIZE
MAIL FROM:<[email protected]>
250 Okey dokey
RCPT TO:<[email protected]>
250 Recipient accepted
RSET
250 Rset completed
RSET
250 Rset completed
MAIL FROM:<[email protected]>
250 Okey dokey
RCPT TO:<[email protected]>
250 Recipient accepted
DATA
354 End message with period
MIME-Version: 1.0

しかし、偽のIPを配置すると、例外が発生します(通常は魔女です)。

あなたのIPが悪いか、ファイアウォールに問題があるに違いないと思います

3
user5447154

以下のコードは私の終わりでうまく機能しています.....

        MailMessage mailMessage = new MailMessage("[email protected]", "[email protected]");
        mailMessage.Priority = System.Net.Mail.MailPriority.High;
        mailMessage.Body = "message";
        mailMessage.IsBodyHtml = true;
        SmtpClient smtpClient = new SmtpClient("Host/IP", 25);
        NetworkCredential credentials = new NetworkCredential("[email protected]", "password");
        smtpClient.Credentials = credentials;
        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtpClient.Credentials = credentials;
        smtpClient.Send(mailMessage);
3

コードがサービスアプリケーションプールで実行されている場合-プロセスモデルの[詳細設定]で、IDを既定の "ApplicationPoolIdentity"ではなく "Network Service"として設定する必要があります。そうすれば、毎回機能します。そうしないと、一部のメールは機能しますが、一部は機能しません。それは奇妙な許可のことです。

2
Robin Johnson

同様の問題がここに現れました: System.Net.WebException:リモート名を解決できませんでした:

ご覧のように、try-catchステートメントをラップした単純なポーリングメカニズムを使用すると、ユーザーに報告する前にメソッドブロックを複数回(散発的に失敗する)試すことができます。

1
yantraman

IPアドレスが正しくないか、ファイアウォールで作業している可能性があります。 DNS設定も確認してください。

0
Ankit Zalani

私が見る問題はこの行です:

smtp.Host = 172.22.0.20; 

smtp.Hostには文字列が必要です。したがって、smtp.Host = "172.22.0.20";それに加えて、エラーを確認できるように以下のコードを追加してください

try 
{
    smtp.Send(mail); 
}
catch (Exception e) 
{
    Debug.WriteLine("Exception Message: " + e.Message);
}
0

逆の名前は必須かもしれませんが、このIPの名前をHostファイルに登録しようとしましたか? (またはもちろんあなたのDNSで)

追加してみてください:

172.22.0.20 my-smtp.example
0
Leahkim