我有一个 .NET 程序——一个 Windows 服务——连接到 Exchange 以发送电子邮件。目标是允许它发送看似来自我雇主拥有的域内任意数量的电子邮件地址的电子邮件。该程序正在使用名为“AutoMail”的 Active Directory 帐户进行身份验证,问题是 Exchange 给出了以下错误响应代码:
System.Net.Mail.SmtpException: Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender
at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)
at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from)
at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at ConsoleApplication1.Program.Main(String[] args) in C:\WorkingCode\ConsoleApplication1\ConsoleApplication1\Program.cs:line 38
当我将网络凭据更改为我的 A/D 登录名并发送来自我的电子邮件时,它可以正常工作。
所以我的问题是:是否可以从 Exchange 端配置 AutoMail 用户以允许以任何有效格式的电子邮件地址发送电子邮件?如果是这样,怎么做?
作为参考,这里是使用的 C# 代码:
MailMessage mail = new MailMessage();
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "This is an email";
mail.Body = "This is a test. <b>This is bold</b> <font color=#336699>This is blue</font>";
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "172.16.1.33";
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("AutoMail", "password");
smtp.Send(mail);
通过 Exchange 挂钩实际登录,您需要接受发件人验证。需要设置一些权限才能冒充某人,这是 Microsoft 有意完成的。您正在寻找的权限是“发送为”。黑莓企业服务器需要这种操作,所以并不罕见。
我们解决它的方法是给用户(在你的情况下是 AutoMail)一个特定的 ACL 到 AD 中的域对象。适用于“已故用户对象”,并且仅选中“发送为”框。这将导致域中的所有用户对象(除非它们位于关闭权限继承的容器中)以允许 AutoMail 模拟它们。
(来源:sysadmin1138.net)