如果没有给出 FROM 地址,则获取 'default' FROM 地址。NET.Mail

Get 'default' FROM address if no FROM address is given .NET.Mail

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

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

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

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

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

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

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

在所有情况下,都应该有一个系统默认的电子邮件地址。您必须与管理 SMTP 服务的人员协调,但他们可以设置一个 "no-reply" 电子邮件地址,仅用于发送电子邮件。如果您无法通过任何其他方式得出它,那将是您的最终选择。