Django:SendGrid Click Tracking服务阻止消息框架运行

时间:2018-10-18 22:20:09

标签: django message sendgrid

我正在尝试使用Django使用SendGrid作为电子邮件提供程序来通过确认电子邮件来实现注册,我的“ SignUpActivationView”代码会验证令牌,然后将用户重定向到首页,在该首页上会使用消息显示成功/错误消息框架:

class SignUpActivationView(RedirectView):
    redirect_url = reverse_lazy('link_list')

    def dispatch(self, request, *args, **kwargs):
        ...
        # if token is valid:
        messages.error(self.request, 'Your account is now active.')
        return HttpResponseRedirect(self.redirect_url)
        # if token is invalid:
        messages.error(self.request, 'Your account could not be activated.')
        return HttpResponseRedirect(self.redirect_url)

到目前为止,只要我将链接复制并粘贴到浏览器中,我的方法就可以使用,如果我单击该链接,则会激活用户,但成功消息不会显示在应用程序中。我相信这是因为SendGrid的点击跟踪服务正在包装我的链接:

SendGrid Click Tracking Service

我发现一种解决方法是通过添加和'clicktracking = off'HTML属性来告诉SendGrid不跟踪链接,缺点是我只能告诉SendGrid不要跟踪电子邮件的HTML版本中的链接。如果用户的电子邮件客户端决定打开电子邮件的纯文本版本,则链接仍然会被包装。

 # solution: do not track clicks
 # caveat: only works in HTML, not in plain text emails
 <a clicktracking=off href="http://foo.bar">Confirmation link</a>

因此对于纯文本电子邮件,链接跟踪是相当重要的一个月。

有什么方法可以使邮件框架与链接跟踪一起工作?

1 个答案:

答案 0 :(得分:1)

当SendGrid跟踪您的链接时,“单击”转到SendGrid,在SendGrid跟踪链接之前,它会返回302 Found重定向到您在原始电子邮件中提供的URL。

因此,只要您在此处提供正确的链接,当“点击”到达您的服务器时,它就会使用适当的令牌返回到服务器。
您可以在Chrome的开发人员工具的网络标签下查看此行为,这可以帮助您解决此处的问题。

此外,您可以在其设置:跟踪设置部分下,禁用所有SendGrid的点击跟踪,而不仅仅是逐个链接。
默认情况下,SendGrid不跟踪纯文本链接,因为它会使它们变得更长。如果要这样做,则必须在那些相同的设置下主动启用它。如今,收件人很少能以纯文本格式查看,因此对参与度统计的贡献不大,因此通常不建议启用该功能。

相关问题