【发布时间】:2021-03-28 10:30:30
【问题描述】:
我见过一些代表用户发送电子邮件的网站,但是当电子邮件通过时,它看起来只是好像它来自用户。例如网站上的联系表格。
我希望做同样的事情,但显然是在用户许可的情况下。这可以在 C# 代码或不会进入垃圾邮件/垃圾文件夹的类似服务中执行吗?
理想情况下,发件人/回复电子邮件地址应该来自用户并且不会被阻止,即只要我得到他们的许可,就可以通过正确的服务器。
【问题讨论】:
我见过一些代表用户发送电子邮件的网站,但是当电子邮件通过时,它看起来只是好像它来自用户。例如网站上的联系表格。
我希望做同样的事情,但显然是在用户许可的情况下。这可以在 C# 代码或不会进入垃圾邮件/垃圾文件夹的类似服务中执行吗?
理想情况下,发件人/回复电子邮件地址应该来自用户并且不会被阻止,即只要我得到他们的许可,就可以通过正确的服务器。
【问题讨论】:
您可以做到这一点的唯一方法是,如果他们发送的域将您的域的 SPF 添加到他们的 SPF 记录,并且可能他们发布了您持有其私钥的 DKIM 记录。实际上,对于允许任意发件人的联系表单,这是不可能发生的。此外,如果发件人使用来自 gmail 等服务的电子邮件地址,您将永远不会发生这种情况。
因此,大多数这样做的联系表格只是做错了——他们伪造了发件人地址并希望他们能侥幸逃脱,或者他们根本不知道更好。使用未经您许可的发件人地址简直就是伪造,如今它通常会被丢弃在垃圾邮件中或被彻底拒绝——但这并不能阻止您尝试做如此愚蠢的事情!
您提到了解决此问题的唯一方法,即reply-to 地址。在这种情况下,您通常从您自己发送给您自己,但使用提交者的地址作为回复,这样当您回复消息时,它会发送给他们。这不需要任何特殊许可,也不是伪造的,因此通常可以正常工作。
The contact form example provided with PHPMailer 使用这种方法,您应该能够理解您使用的任何语言。
这种方法存在一些实际问题。主要的一个原因是邮件程序经常忽略来自他们以前看到的地址的消息中的 from name(而不是地址)。这意味着即使您将提交者的姓名与您自己的地址一起放入回复中(因此它包含诸如 Jane User <contactform@example.com> 之类的内容,它也会忽略它并使用 first 使用的任何名称地址。这很烦人,但不会破坏任何东西。
【讨论】: