这基本上是从我的StackOverflow问题的交叉post,看看我是否可以得到一个服务器端的angular度来看。
我试图通过我们内部的Exchange 2007服务器(使用SMTP)将来自C#控制台应用程序的自动电子邮件从机器发送到同一个域中的所有客户端,但是我遇到了只允许通过身份validation的发件人的分发列表的问题。 基本上我发送的邮件被交易所拒绝:
#550 5.7.1 RESOLVER.RST.AuthRequired; authentication required ##rfc822;[email protected]
我正在使用System.Net.Mail.SmtpClient并将Credentials属性设置为System.Net.CredentialCache.DefaultNetworkCredentials (它应该通过运行该进程的当前用户的Windows凭据),但是在某处沿线的证书运行此程序的帐户(我,有效邮箱的有效域用户)不能正确传递到Exchange。
我正在使用System.Net.CredentialCache.DefaultNetworkCredentials因为我不想硬编码的用户名或密码(无论是在代码本身或任何types的configuration文件); 我希望该过程使用Windows身份validation与我们的SMTP服务器进行身份validation。
这里是我用来重现问题的一个testing程序(域名已被分类):
using System; using System.Net.Mail; namespace ConsoleApplication1 { class Program { static void Main() { var smtpClient = new SmtpClient { Host = "MAIL", Port = 25, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = System.Net.CredentialCache.DefaultNetworkCredentials }; var mailMessage = new MailMessage { Body = "Testing", From = new MailAddress(Environment.UserName + "@example.com"), Subject = "Testing", Priority = MailPriority.Normal }; mailMessage.To.Add("[email protected]"); smtpClient.Send(mailMessage); } } }
每当我运行这个自己(再次,我是一个有效的用户在域上,与Exchange服务器上的现有邮箱)我得到一个无法投递退回邮件从响应:
#550 5.7.1 RESOLVER.RST.AuthRequired; authentication required ##rfc822;[email protected]
我谈到我们的Exchange服务器pipe理员,他从Exchange服务器的事件日志中看到以下错误:
Account For Which Logon Failed: Security ID: NULL SID Account Name: Account Domain: Failure Information: Failure Reason: Unknown user name or bad password. Status: 0xc000006d Sub Status: 0xC0000064
显然,状态码和子状态码转换为:
0xc000006d This is either due to a bad username or authentication information. Usually logged as status code with 0xc0000064 as substatus 0xC0000064 user name does not exist
所以再次,就好像沿线的某个地方一样,即使将SmtpClient.Credentials设置为System.Net.CredentialCache.DefaultNetworkCredentials ,我的Windows凭据也不会传递到Exchange服务器
有任何想法吗?
或者是否有可能以某种方式configurationExchange 2007中的通讯组列表,要求authentication的发件人,除非该发件人在同一个域上? (我猜测Exchange没有办法保证当邮件通过SMTP发送时,但我对Exchangepipe理知之甚less)
提前致谢!
尝试设置smtpClient.UseDefaultCredentials = true。
此属性的默认值为false。 我不知道这是否能解决您的问题,但似乎是一件容易的事情。
很久以前,我记得在Exchange中,必须在每个帐户的基础上启用SMTPlogin,因此虽然可以使用本地协议(基于RPC)连接到Exchange,但您的帐户可能未configuration为允许SMTP访问。
以下是从谷歌smtpconfiguration
SmtpServer.Port = 587; SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password"); SmtpServer.EnableSsl = true;
您可以使用CDOSYS,Windows 2000库(CDosys.dll)的协作数据对象(CDO)代替SMTP。 Cdosys.dll库也被称为CDOSYS。 按照链接: C#CDO电子邮件