【问题标题】:How do I send emails outside my domain with Exchange 2007 and c#如何使用 Exchange 2007 和 c# 在域外发送电子邮件
【发布时间】:2010-10-01 10:44:39
【问题描述】:

只要发件人和收件人地址都在我的域内,我就可以使用典型的 C# SMTP 代码跨 Exchange 2007 发送电子邮件。

当我尝试在域外发送电子邮件时,我会收到:

异常详细信息:System.Net.Mail.SmtpFailedRecipientException:邮箱不可用。服务器响应为:5.7.1 无法中继

如何让 Exchange 接受我的电子邮件并将其发送到互联网?

【问题讨论】:

    标签: c# smtp exchange-server-2007


    【解决方案1】:

    您需要让您的交换管理员配置交换以允许在域外发送。根据我的经验,由于垃圾邮件问题,他们一直不愿意这样做。

    如果它的用途有限,您可以设置服务器端规则以在域外转发满足特定条件的邮件。你也许可以在这些中使用 VBA 来美化一些东西,但我不确定。

    【讨论】:

    • +1 通常较大的公司有多个交换服务器,并且至少有一个允许在域外转发电子邮件。
    • 你能告诉我我在 Exchange 的大部分经验都是在小公司工作的吗:D
    【解决方案2】:

    向交换服务器进行身份验证。

    http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.credentials.aspx


    DefaultNetworkCredentials 返回 用户名等的空字符串和 导致此异常...

    这里是example,这里是another 使用 System.Net.Mail 发送经过身份验证的消息。

    【讨论】:

    • DefaultNetworkCredentials 为用户名等返回空字符串并导致此异常:邮箱不可用。服务器响应为:5.7.1 客户端无权以此发件人身份发送
    • +1 client.Credentials = CredentialCache.DefaultNetworkCredentials; 解决了我的中继问题。使用这个继电器很好。
    【解决方案3】:

    您是否从您的网络服务器将交换服务器设置为allow relays?我在切换到 Exchange 2007 时遇到了同样的问题。

    【讨论】:

    • 我遵循了这篇文章,但没有任何区别:(
    【解决方案4】:

    尝试 #2... 改用 Exchange Pickup Folder 怎么样?它们是通过 Exchange 发送电子邮件的更快方式,因为它只是创建电子邮件并将其放入文件夹中,无需等待连接到服务器或等待回复。另外,我认为它跳过了整个中继问题。

    像这样配置你的 SmtpClient:

    SmtpClient srv = new SmtpClient("exchsrv2007", 25) {
        DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
        PickupDirectoryLocation = "\\exchsrv2007\PickupFolder"
    }
    ...
    

    【讨论】:

    • 不是默认情况下,需要共享网络路径,并且运行 ASP.NET 的进程(或模拟)需要访问目录的权限。
    • +1 这样一个节省时间的解决方案。完美解决我的问题。
    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2014-07-19
    • 2023-03-03
    • 2018-01-17
    • 2011-12-03
    相关资源
    最近更新 更多