我无法使用smtp客户端发送邮件.这是代码:
I am unable to send the mail using smtp client. here is the code:
SmtpClient client=new SmtpClient("Host"); client.Credentials=new NetworkCredential("username", "password"); MailMessage mailMessage = new MailMessage(); mailMessage.from="sender@gmail"; mailMessage.To.Add("recipient@gmail"); mailMessage.body="body"; mailMessage.subject="subject"; client.Send(mailMessage);问题是当我在ASP.NET应用程序中使用此代码时,我没有收到任何邮件.在asp中,我将邮件地址从NetworkCredential中指定的用户名更改为我的邮件.
The problem is that when I use this code in ASP.NET application, I do not receive any mails. When in asp I change the from mail address to username given in NetworkCredential, I receive mails.
但是在C#Windows应用程序中,即使发件人的电子邮件地址无效,我也可以收到电子邮件.
But in C# windows application, I can get emails, even if sender's email address is not valid.
推荐答案我发现在设置'UseDefaultCredentials = false'之前设置SmtpClient Credentials属性 UseDefaultCredentials = false 会使凭据被忽略.
I figured out that setting the SmtpClient Credentials property before setting the ' UseDefaultCredentials = false ' UseDefaultCredentials = false causes the credentials to be ignored.
失败:
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");去吧.
**更新**
这里的顺序很重要的原因是, UseDefaultCredentials 属性上的setter实际上通过反编译的代码将 Credentials 设置为 null :
The reason the order is important here is that the setter on the UseDefaultCredentials property actually sets the Credentials to null via the decompiled code:
/// <summary>Gets or sets a <see cref="T:System.Boolean" /> value that controls whether the <see cref="P:System.Net.CredentialCache.DefaultCredentials" /> are sent with requests.</summary> /// <returns> /// <see langword="true" /> if the default credentials are used; otherwise <see langword="false" />. The default value is <see langword="false" />.</returns> /// <exception cref="T:System.InvalidOperationException">You cannot change the value of this property when an e-mail is being sent.</exception> public bool UseDefaultCredentials { get { return this.transport.Credentials is SystemNetworkCredential; } set { if (this.InCall) throw new InvalidOperationException(SR.GetString("SmtpInvalidOperationDuringSend")); this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null; } }更多推荐
在.net中使用SmtpClient发送邮件
发布评论