asp.Net自動送信emailを実現

3297 ワード

利用するNetが持っているMailは実現しやすくて、コードは簡単ですが、途中で多くの問題にぶつかって、再びrecordを書きます
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の制限を強制的に通過することができ、証明書の検証は不要になります.
个人的に书いていますが、异议や间违いがあれば、ご指摘ください...