如果没有给出FROM地址,请获取“默认”FROM地址.NET.Mail

时间:2016-04-25 13:00:53

标签: c# email smtp

经过几个小时的MAIL研究(很多问题),我最后自问了这个问题,因为我找不到完全回答我的答案。

对于我的一个应用程序,我正在构建一个带有System.Net.Mail的邮件类库,它通过SMTP处理外发邮件。 FROM地址是一个可选参数,如果没有给出,那么代码应设置/处理FROM地址。

由于并非所有邮件客户端都相同,我想构建一些能够获得正确FROM地址的邮件。

经过一些研究后,我发现我可以使用UserPrincipal.Current.EmailAddress来完成此任务,但我发现EmailAddress值并不总是存在于Active Directory中。

问题是,是否有办法始终获取FROM地址或是否可以撤消?或者我应该将它限制为最常用的邮件客户端,如outlook和gmail?

1 个答案:

答案 0 :(得分:2)

为生产使用而设置的大多数SMTP服务器都不允许“欺骗”。换句话说,它们要求FROM地址是用于登录SMTP的地址。虽然SMTP规范中没有任何内容需要这种做法,但垃圾邮件发送者的存在确实存在。

如果没有明确设置,也可以派生从ActiveDirectory获取电子邮件地址。 ActiveDirectory在域中设置,因此电子邮件地址为userId + '@' + activeDirectoryDomain。如果您使用来自第三方的基于声明的身份验证,并且第三方未填充电子邮件声明,则此问题出现在您的位置。例如,Facebook和Google身份验证提供电子邮件地址,而Twitter身份验证则不提供。

在所有情况下,都应该有一个系统默认电子邮件地址。您必须与管理SMTP服务的人员进行协调,但他们可以为仅传出电子邮件设置“无回复”电子邮件地址。如果你不能以任何其他方式推导它,这将是你的最终选择。