asp.Net自動送信emailを実現
3297 ワード
利用するNetが持っているMailは実現しやすくて、コードは簡単ですが、途中で多くの問題にぶつかって、再びrecordを書きます
exampleをするとき、gmailはtestを通過するのが一番で、あまり大きな問題に遭遇しませんでした.
htmlの内容を読み取り、gmailで送信します.gmailのHostとPortは、smtpとpop 3がそれぞれ送信と受信であり、またportは587であり、他の一般的なサイト25とは異なり、注意してください.
次に重要なのは、自分が作ったメールサーバについて、自社のサーバを利用してメールを送ることです.
ほとんどのコードは同じですが、違いは次のとおりです.
smtpclient.Host = "203.125.222.***"; smtpclient.Port = 25;
hostはドメイン名もipアドレスも書けます.しかし、ドメイン名は前にstmpを追加するかどうか分かりません.例えば、会社のmailはmailです.mydomain.com、またネットワークポートは8383ですが、このhostはどうやって記入しますか?この問題は私にも分からなかった.
またportが固定されているのは25で、このポートはさっきの8383とは異なり、それはネットワークポートで、この25はメールボックス送信ポートです.
次の問題が発生しました.送信中にエラーが発生しました.
The remote certificate is invalid according to the validation procedure.
証明書検証が必要です.
=============================================================================================
解決策:証明書を強制的に通過します.
関数を追加します.
そしてあなたのSmtpClient smtpclient=new SmtpClient();前の呼び出し:
これにより、送信時にSSLの制限を強制的に通過することができ、証明書の検証は不要になります.
个人的に书いていますが、异议や间违いがあれば、ご指摘ください...
exampleをするとき、gmailはtestを通過するのが一番で、あまり大きな問題に遭遇しませんでした.
// HTML ,
string strPath = Environment.CurrentDirectory + "\\email.htm";
// ,“System.Text.Encoding.Default”
StreamReader sr = new StreamReader(strPath, System.Text.Encoding.Default);
StringBuilder body = new StringBuilder();
body.Append(sr.ReadToEnd());
//
sr.Close();
string mailpwd = "XXXX";
MailMessage mymail = new MailMessage();
mymail.From = new System.Net.Mail.MailAddress("[email protected]", "XXXX");
mymail.To.Add(new MailAddress("[email protected]"));
mymail.Subject = "Net Mail";
mymail.Body = body.ToString().Trim();
mymail.BodyEncoding = System.Text.Encoding.UTF8;
mymail.Priority = MailPriority.Normal;
mymail.IsBodyHtml = true;
SmtpClient smtpclient = new SmtpClient();
smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpclient.EnableSsl=true;
smtpclient.Host = "smtp.gmail.com";
smtpclient.Port = 587;
smtpclient.Credentials = new System.Net.NetworkCredential("XXXX", mailpwd);
try
{
smtpclient.Send(mymail);
Console.WriteLine("Send Success!");
}
catch (System.Exception e)
{
Console.WriteLine("Error" + e.Message);
}
htmlの内容を読み取り、gmailで送信します.gmailのHostとPortは、smtpとpop 3がそれぞれ送信と受信であり、またportは587であり、他の一般的なサイト25とは異なり、注意してください.
次に重要なのは、自分が作ったメールサーバについて、自社のサーバを利用してメールを送ることです.
ほとんどのコードは同じですが、違いは次のとおりです.
smtpclient.Host = "203.125.222.***"; smtpclient.Port = 25;
hostはドメイン名もipアドレスも書けます.しかし、ドメイン名は前にstmpを追加するかどうか分かりません.例えば、会社のmailはmailです.mydomain.com、またネットワークポートは8383ですが、このhostはどうやって記入しますか?この問題は私にも分からなかった.
またportが固定されているのは25で、このポートはさっきの8383とは異なり、それはネットワークポートで、この25はメールボックス送信ポートです.
次の問題が発生しました.送信中にエラーが発生しました.
The remote certificate is invalid according to the validation procedure.
証明書検証が必要です.
=============================================================================================
解決策:証明書を強制的に通過します.
関数を追加します.
public static bool ValidateServerCertificate(object sneder, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
そしてあなたのSmtpClient smtpclient=new SmtpClient();前の呼び出し:
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
SmtpClient smtpclient = new SmtpClient();
これにより、送信時にSSLの制限を強制的に通過することができ、証明書の検証は不要になります.
个人的に书いていますが、异议や间违いがあれば、ご指摘ください...