簡體   English   中英

使用.net中的SmtpClient發送郵件

[英]Sending mail using SmtpClient in .net

我無法使用smtp客戶端發送郵件。 這是代碼:

SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="sender@gmail.com";
mailMessage.To.Add("recipient@gmail.com");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);

問題是,當我在ASP.NET應用程序中使用此代碼時,我不會收到任何郵件。 在asp.net中,我將從郵件地址更改為NetworkCredential中給出的用戶名,我收到郵件。

但是在C#windows應用程序中,即使發件人的電子郵件地址無效,我也可以收到電子郵件。

我發現在設置'UseDefaultCredentials = false'之前設置SmtpClient Credentials屬性UseDefaultCredentials = false會導致忽略憑據。

失敗:

SmtpClient smtp = new SmtpClient;
smtp.Credentials = new NetworkCredential("user","pass");
smtp.UseDefaultCredentials = false;

作品:

SmtpClient smtp = new SmtpClient;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("user","pass");

去搞清楚。

這意味着您的郵件服務器不允許郵件中繼。 您的郵件服務器只允許您從經過身份驗證的電子郵件ID發送郵件作為用戶名。 通常這樣做是為了防止郵件作為除經過身份驗證的身份之外的不同身份發送。

試試這個 :

MailMessage mail = new MailMessage("emailfrom","emailto");

mail.From = new MailAddress("emailfrom");
mail.Subject = txtsbjct.Text;
string Body = txtmsg.Text;
mail.Body = Body;

mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
smtp.Credentials = new System.Net.NetworkCredential("youremail", "yourpassword");

smtp.EnableSsl = true;
smtp.Send(mail);
txtemail.Text = "";
txtmsg.Text = "";
txtsbjct.Text = "";
Label1.Text = "your email has been send";
mail = null;
smtp = null;

簡短的回答: 不要使用.net內部SMTP客戶端類 - 使用MailKit

答案很長:

  1. 在MS文檔中標記為已過時

[System.Obsolete(“SmtpClient及其網絡類型設計不佳,我們強烈建議您使用https://github.com/jstedfast/MailKithttps://github.com/jstedfast/MimeKit代替”)公共課SmtpClient:IDisposable

  1. 使用oss lib MailKit
  2. 詳細說明:因為你將很快而不是后來面對它的缺陷。 在這里閱讀或閱讀互聯網。
  3. 以下是發送純文本郵件和多部分郵件的示例。

我故意沒有復制粘貼文檔中的示例,因為文檔可能會隨着時間的推移而改變,最好閱讀。

void sendEmail(string strFrom
                        , string strTo
                        , string strSubject
                        , string strBody)
   {

       MailMessage objMailMessage = new MailMessage();
       System.Net.NetworkCredential objSMTPUserInfo =
           new System.Net.NetworkCredential();
       SmtpClient objSmtpClient = new SmtpClient();

       try
       {
           objMailMessage.From = new MailAddress(strFrom);
           objMailMessage.To.Add(new MailAddress(strTo));
           objMailMessage.Subject = strSubject;
           objMailMessage.Body = strBody;

           objSmtpClient = new SmtpClient("172.0.0.1"); /// Server IP
           objSMTPUserInfo = new System.Net.NetworkCredential
           ("User name", "Password","Domain");
           objSmtpClient.Credentials = objSMTPUserInfo;
           objSmtpClient.UseDefaultCredentials = false;
           objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

           objSmtpClient.Send(objMailMessage);
       }
       catch (Exception ex)
       { throw ex; }

       finally
       {
           objMailMessage = null;
           objSMTPUserInfo = null;
           objSmtpClient = null;
       }
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM