当我尝试通过ASP MVC3项目使用SmtpClient类发送电子邮件时,我的服务器出现了奇怪的现象。这是我正在使用的代码。
try
{
var client = new SmtpClient("MailServer");
client.UseDefaultCredentials = true;
MailMessage message = new MailMessage("me@mydomain.com", "friend@mydomain.com", "Test Message", "Test Body");
client.Send(message);
}
catch (Exception ex)
{
// Do Nothing
}
我已部署在三个环境中;在Windows 7上(使用VS 2010 IIS)它发送电子邮件很好,在Windows 2003 IIS6机器上它发送电子邮件很好,最后在Windows 2008 R2 II7服务器上我收到以下错误:
Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender using username
任何人都可以就可能造成这种情况的原因提出建议。我注意到当我查看User.Identity.Name
时,这将返回一个空字符串。
答案 0 :(得分:16)
邮件服务器可能不支持发送匿名电子邮件,并且需要指定在邮件服务器上注册的凭据。
您可以像这样指定凭据:
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("username", "password");
希望这有帮助。
答案 1 :(得分:6)
如果您使用的是Exchange服务器且登录帐户和发件人电子邮件不同,则会收到错误消息"无权发送..."。这是因为帐户权限。您必须授予"发送为"登录帐户的权限。
答案 2 :(得分:5)
我解决了从web.config中删除身份验证凭据的问题
<system.net>
<mailSettings>
<smtp from="SystemAdmin@domain.do">
<!--network host="EXCH-SERVER" port="25" userName="userName" password="password" defaultCredentials="false" /-->
<network host="EXCH-SERVER" port="25" />
</smtp>
</mailSettings>
答案 3 :(得分:1)
如果您已尝试所有内容并且仍然失败,则可能是服务器仅接受匿名用户。如果您尝试使用凭据进行连接:
defaultCredentials="true"
defaultCredentials="false" userName="foo" password="false"
然后服务器将返回错误.NET SMTP Client - Client does not have permissions to send as this sender
。
这很奇怪,但作为最后的手段,只需尝试简单:
defaultCredentials="false"
强> 答案 4 :(得分:1)
对我而言,它使用了不同的凭据 -
在我使用的网络凭证中 -
new NetworkCredential(smtpUser, smtpPassword)
和fromAddress
var fromAddress = new MailAddress("anotheruser@gmail.com", string.Empty);
当发送电子邮件时,fromAddress与实际网络凭据不同,将导致此问题。 见下文 -
using (var message = new System.Net.Mail.MailMessage(fromAddress, toAddress)
{
Subject = Keys.MailSubject,
Body = body,
IsBodyHtml = true
})
{
smtp.Send(message);
}
简单的解决方法是将两个邮件保持为网络凭据的一个。
答案 5 :(得分:0)
User.Identity.IsAuthenticated返回什么,如果它返回false就是你的问题。您正在尝试以未经身份验证的用户身份发送邮件。
答案 6 :(得分:0)
有同样的问题 - 来自ASP.Net的凭据永远不会成为可以在我的环境中发送电子邮件的东西。所以我在混乱中找到了这条路径(其中还包括NTLM无法始终正常工作以及我将邮件配置信息放在web.config中的可能性):
System.Net.Configuration.SmtpSection section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as System.Net.Configuration.SmtpSection;
// set up SMTP client
SmtpClient smtp = new SmtpClient();
System.Net.CredentialCache myCache = new System.Net.CredentialCache();
NetworkCredential myCred = new NetworkCredential(section.Network.UserName, section.Network.Password);
string host = section.Network.Host;
int port = section.Network.Port;
// do this because NTLM doesn't work in all environments....
if (myCred != null)
{
myCache.Add(host, port, "Digest", myCred);
myCache.Add(host, port, "Basic", myCred);
myCache.Add(host, port, "Digest-MD5", myCred);
myCache.Add(host, port, "Digest MD5", myCred);
myCache.Add(host, port, "Plain", myCred);
myCache.Add(host, port, "Cram-MD5", myCred);
myCache.Add(host, port, "Cram MD5", myCred);
myCache.Add(host, port, "Login", myCred);
//myCache.Add(host, port, "NTLM", myCred);
}
smtp.Credentials = myCache;
smtp.UseDefaultCredentials = false;
//smtp.EnableSsl = true;
根据您的配置,您可能需要取消注释最后一行。
答案 7 :(得分:0)
使用Visual Studio 2013运行包有一件事对我有用。 我删除了“使用Windows身份验证”&#39; SMTP连接管理器编辑器中的标记。