SmtpClient - 发送到不同的域

Posted

技术标签:

【中文标题】SmtpClient - 发送到不同的域【英文标题】:SmtpClient - Send to different domains 【发布时间】:2012-03-17 12:19:00 【问题描述】:

我有一个指向我公司邮件服务器的 SmtpClient。我能够成功地向/从该域上的地址发送电子邮件。

但是,我需要为应用程序的用户进行密码重置和通知。这些用户使用自己的电子邮件地址(多个不同的域)进行注册。

如何向不同域的用户发送电子邮件?每次我尝试(使用我的 live.ca 电子邮件)时,都会收到以下错误:

SmtpFailedRecipientsException - 邮箱不可用。服务器响应为:5.7.1 无法中继

C# 代码

SmtpClient mailClient = new SmtpClient();
MailMessage email = new MailMessage

    Subject = "Testing Mail",
    Body = "Testing Mail",
    From = new MailAddress("myAddress@myCompany.com")
;
email.To.Add(new MailAddress("myAddress@live.ca"));
mailClient.Send(email);

Web.config 代码

  <system.net>
<mailSettings>
  <smtp>
    <network host="mail.myCompany.com" port="25" userName="myAddress@myCompany.com" password="myPassword" defaultCredentials="false"/>
  </smtp>
</mailSettings>

更新:

我已经使用以下方法使其工作:

1) Web.config

<network host="mail.myCompany.com" port="25" userName="myNetworkUsername" password="myPassword" defaultCredentials="false" />

2) C# 代码

mailClient.Credentials = new NetworkCredential("myNetworkUsername", "myPassword");
// or
mailClient.Credentials = CredentialCache.DefaultNetworkCredentials;

第二行使用登录者的凭据。它适用于本地主机,但在我部署它时不起作用。

我正在考虑创建一个默认帐户来处理应用程序的邮件并将用户名/密码放入网络配置中,但这似乎不是最安全的做法。我仍在寻找替代方案。

更新:

当我的公司将我们的 ISP 切换到 Shaw 时,代码停止工作。我们认为 Shaw 可能阻塞了我们 Exchange Server 上的一个端口。

【问题讨论】:

你可能想看看这个问题:***.com/questions/444210/… 这不是你的代码问题,是你公司的SMTP服务器的限制。要么让他们放宽你可以发送的域,要么使用不同的服务器。 只是猜测,但请尝试使用端口 587。 明天我会尝试链接上的建议。 请不要在标题前加上“C#”之类的前缀。这就是标签的用途。 【参考方案1】:

这里有一篇文章解释了使用端口 587 在域外发送电子邮件:http://mostlygeek.com/tech/smtp-on-port-587

【讨论】:

嗯。我刚刚在我的一个网站上尝试过这个,它解决了一个类似的问题。我能看到的唯一区别是“发件人”是在 SMTP 元素中指定的: 刚试了一下,发现 SMTP 异常:SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.7.1 客户端未通过身份验证。感谢您的意见,我现在将尝试其他建议。

以上是关于SmtpClient - 发送到不同的域的主要内容,如果未能解决你的问题,请参考以下文章

使用 SmtpClient 时如何保存电子邮件而不是发送?

SmtpClient 发送邮件

使用 SmtpClient 发送邮件时图像中断

为啥 MailKit SmtpClient.Send() 失败时我没有收到异常?

SmtpClient 发送没有认证

C# 使用 SmtpClient 发送内联图像的邮件