SendGrid-从客户自己的域发送邮件



我正在开发一款使用SendGrid.com的产品,因此可以向客户的最终用户发送系统电子邮件。这些电子邮件来自我们自己的域,我们称之为ourdomain.example。这是通过遍历SendGrid的已验证域流来设置DNS记录以验证域来完成的。

我们的一些客户询问我们是否可以从他们自己的域发送系统电子邮件,例如,他们希望从系统发送的电子邮件是否代表@customerdomain.example发送。

问题是,我如何在SendGrid中设置它,以便我们可以向客户提供DNS设置?

我真的不希望这是一个手动过程,因为我们可能有数百名客户想要使用自己的域。我试着联系SendGrid的支持,但他们基本上一直链接到这个页面:https://docs.sendgrid.com/ui/account-and-settings/how-to-set-up-domain-authentication.这是我们为自己的域所做的,但如果我们需要处理来自不同客户的数百个域,这并不是一个真正可行的解决方案。

有人知道这个过程是否可以通过SendGrid API实现自动化吗?也许是这样的:

  • 客户在我们这里创建一个帐户(域:customerdomain.com)
  • 我们调用SendGrid的API;为域CCD_ 3创建域验证">
  • 我们取回客户(customerdomain.example的所有者)需要输入到其DNS设置中的DNS条目
  • 我们开始发送发件人地址设置为something@customerdomain.example的电子邮件

也许我找错了地方,但我根本不知道如何以正确的方式做到这一点。

任何帮助都将不胜感激!

在尝试了几种不同的方法后,我们最终通过以下方式使用SendGrid API实现了这一点:

  1. 对于每个自定义域,使用Domains API对此进行身份验证(https://docs.sendgrid.com/api-reference/domain-authentication/authenticate-a-domain)这将为您提供域ID以及包含要为域设置的CNAME和DKIM值的DNS对象。请您的客户将这些应用于域的DNS设置
  2. 应用DNS更改后,通过调用域API上的Validate方法对其进行验证:https://docs.sendgrid.com/api-reference/domain-authentication/validate-a-domain-authentication

如果域已成功验证,则可以通过SendGrid将该域用作发送方域。

我希望这能帮助其他遇到麻烦的人。

我将添加第二个答案,以防这对某人有所帮助。多年来,我们从未遇到过从域名1发送电子邮件的问题。我在SendGrid上验证了domain1,当我们发送电子邮件时,我们会替换我们的电子邮件地址sender@domain1.com我们会用客户的电子邮件地址来称呼它,这很有效。在过去的几年里,我们开始看到更多的问题,然后到了只有少数客户以这种方式工作的地步;尽管它多年来一直以这种方式工作。

我的最佳猜测是,为什么我们的一些客户可以发送,而其他大多数客户不能(尤其是免费电子邮件帐户),你问?我相信,那些仍在以这种方式工作的客户一定已经通过SendGrid以某种方式验证了他们的电子邮件域。他们是否有自己的应用程序?这只是一个猜测,但大约有10-15名客户仍然可以通过这种方式发送,即使他们的电子邮件地址与domain1.com认证的域不匹配。

我确实理解眼前的问题以及它为什么停止工作。我们验证了域1,但客户的电子邮件地址可能是user@gmail.com或user@hotmail.com.从技术上讲,这将是SPOOFING,因为FROM中标记的电子邮件与服务器不匹配,而且客户的电子邮件域没有SPF。顺便说一句,如果我们尝试我们的方式,@gmail和@hotmail域现在100%都会失败。这就是我发现问题的原因。我创建了一个测试帐户,并注意到电子邮件没有发出,或者更确切地说,没有发出的电子邮件是客户的电子邮件地址,并在FROM上盖章。所以我打开了调试,注意到SendGrid错误,指出user@gmail.com不是经过身份验证的电子邮件地址(语言可能略有偏离)。我确实回顾了我们的历史并进行了检查,大约一年或一年半前,这个问题开始变得更加普遍。我想SendGrid可能一开始就不打算使用这种方法,也许他们现在已经收紧了这种方法?这只是一个猜测。我正在开发的这个应用程序以前从一开始就是这样设置的,最初是由其他人编写的。

为了解决这个问题,我就是这么做的。我做到了我们的FROM电子邮件地址总是在哪里no-reply@domain1.com.然后,我获取客户的电子邮件地址,并将其用作回复电子邮件地址,而不是FROM电子邮件地址。通过这样做,我们现在是合规的,因为我们是从域1发送的。

然而,如果一封电子邮件发给一位客户,而他们现在点击了回复,那么回复至少会转到客户的电子邮件地址,而不是无回复电子邮件地址。我想,如果有人手动将回复更改为,可能会把事情搞砸。这是我唯一能解决这个问题的方法,而不必对每个客户的电子邮件域进行身份验证。

稍后我可能会设置一些代码,我们可以在表上翻转布尔值,以允许客户使用自己的电子邮件地址发送(前提是他们可以输入SendGrid DNS信息)。我仍在争论这是否有益。

目前,它100%的时间都在工作,我的设置方式是发送FROM domain1,并使用客户的电子邮件地址作为回复。

如果有人对此有任何意见或问题,我很乐意尽我所能回答。我花了很长时间才弄清楚为什么会发生这种情况,起初它看起来很随机,因为有些域正在发送,尽管我认为根据我的理解,如果它本应该起作用的话,它根本就不起作用了。

最新更新