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にトラフィックが送信されているようには見えません
私はこのコードを使用し、自分の側ではうまく機能しています。正しい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);
私はあなたのコードをテストしました:
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が悪いか、ファイアウォールに問題があるに違いないと思います
以下のコードは私の終わりでうまく機能しています.....
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);
コードがサービスアプリケーションプールで実行されている場合-プロセスモデルの[詳細設定]で、IDを既定の "ApplicationPoolIdentity"ではなく "Network Service"として設定する必要があります。そうすれば、毎回機能します。そうしないと、一部のメールは機能しますが、一部は機能しません。それは奇妙な許可のことです。
同様の問題がここに現れました: System.Net.WebException:リモート名を解決できませんでした:
ご覧のように、try-catchステートメントをラップした単純なポーリングメカニズムを使用すると、ユーザーに報告する前にメソッドブロックを複数回(散発的に失敗する)試すことができます。
IPアドレスが正しくないか、ファイアウォールで作業している可能性があります。 DNS設定も確認してください。
私が見る問題はこの行です:
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);
}
逆の名前は必須かもしれませんが、このIPの名前をHostファイルに登録しようとしましたか? (またはもちろんあなたのDNSで)
追加してみてください:
172.22.0.20 my-smtp.example