问题描述
我无法使用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="[email protected]";
mailMessage.To.Add("[email protected]");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);
问题是当我在ASP.NET应用程序中使用此代码时,我没有收到任何邮件.在asp.net中,我将邮件地址从NetworkCredential中指定的用户名更改为我的邮件.
The problem is that when I use this code in ASP.NET application, I do not receive any mails. When in asp.net 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发送邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!