[英]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 。
答案很長:
[System.Obsolete(“SmtpClient及其網絡類型設計不佳,我們強烈建議您使用https://github.com/jstedfast/MailKit和https://github.com/jstedfast/MimeKit代替”)公共課SmtpClient:IDisposable
我故意沒有復制粘貼文檔中的示例,因為文檔可能會隨着時間的推移而改變,最好閱讀。
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.