2016-04-25 58 views
1

经过几个小时的MAIL研究(其中有许多问题),我最终自己问了这个问题,因为我找不到完全的答案回答我的。如果没有给出FROM地址,则获取'默认'FROM地址。NET.Mail

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

由于不是所有的邮件客户端都是相同的,我想构建一些东西来获得正确的FROM地址。

经过一番研究,我发现我可以使用UserPrincipal.Current.EmailAddress来实现这一点,但我发现EmailAddress值并不总是存在于Active Directory中。

问题是,有没有办法总是得到的FROM地址或这是可撤销的?或者我应该将它限制在像outlook和Gmail这样的最常用的邮件客户端上?

+0

实际上,你不能说出什么是“正确”的电子邮件地址,例如,你可以扫描我的笔记本电脑所有你喜欢的,我没有运行任何电子邮件应用程序。但我有很多电子邮件地址,而且我会选择一个,但只有我知道那是哪个。当使用本地交换服务器时,AD查找功能往往效果最好,但情况并非总是如此。 – BugFinder

回答

2

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

如果未明确设置,则可以从ActiveDirectory获取电子邮件地址。 ActiveDirectory在域中设置,因此电子邮件地址将是userId + '@' + activeDirectoryDomain。这成为一个问题的地方是,如果您使用来自第三方的基于声明的身份验证,并且第三方不填充电子邮件声明。例如,Facebook和谷歌认证提供了一个电子邮件地址,而Twitter认证则没有。

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

+0

很好的解释!使它更清晰。我可能会让FROM地址不可选。谢谢。 – Nicolas