在电子邮件标题中列出取消订阅。如何?

Posted

技术标签:

【中文标题】在电子邮件标题中列出取消订阅。如何?【英文标题】:List-unsubscribe in e-mail header. How-to? 【发布时间】:2011-05-20 22:24:03 【问题描述】:

我正在尝试将 List-Unsubscribe 标头添加到我正在发送的电子邮件中。到目前为止,我没有任何运气尝试这样做。

到目前为止我得到了什么:

var mailMessage = new MailMessage
                    
                        Subject = newsletter.Subject,
                        Body = newsLetterhtml,
                        IsBodyHtml = true,
                        Sender = new MailAddress(senderAddress)
                    ;
                    mailMessage.To.Add(subscriber.Email);
                    mailMessage.ReplyToList.Add(senderAddress);
                    mailMessage.Headers.Add("List-Unsubscribe", unSubscribeUrl);

unSubscribeUrl 类似于“www.example.com/unlist?id=8822772727”。 当我发送电子邮件时,除了列表取消订阅选项外,一切正常。没有在任何邮件客户端中显示。

欢迎任何帮助!

更新 这是我用于发送电子邮件的全部代码:

var mailMessage = new MailMessage
                    
                        Subject = newsLetter.Subject,
                        Body = newsLetterHTML,
                        IsBodyHtml = true,
                        Sender = new MailAddress(senderAddress)
                    ;
                    mailMessage.To.Add(subscriber.Email);
                    mailMessage.ReplyToList.Add(senderAddress);
                    mailMessage.Headers.Add("List-Unsubscribe", String.Format("<0>", "http://www.foo.com/unlist?id=8888"));
                    mailMessage.HeadersEncoding = Encoding.Default;

                    var smtpClient = new SmtpClient();
                    smtpClient.Send(mailMessage);

更新 2 经过一番研究,我将标题放入了mailMessage。当我发送电子邮件时,我可以看到以下标题:

List-Unsubscribe: <http://demo.localhost/home/hobbymap-gerard/afmelden-voor-nieuwsbrief?id=c786aeb0-554d-4670-94d8-82d6f25a050b>
MIME-Version: 1.0
From: info@test.nl
To: test@gmail.com
Reply-To: info@test.nl
Date: 8 Feb 2011 09:50:22 +0100
Subject: Test met plaatje
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: quoted-printable  

但是当我在任何客户端中打开电子邮件时,我在客户端中看不到取消订阅按钮?我做错了什么吗?

【问题讨论】:

在接收客户端检查邮件头时,您是否看到“List-Unsubscribe”?你可以添加其他标题吗?尝试使用 WireShark 验证您是否将 List-Unsubscribe 标头发送到本地 SMTP 服务器。如果是这样,可能是您的本地 SMTP 服务器正在剥离该标头。 RFC 仅在示例中显示mailto: URL,可能它们仅支持mailto: 取消订阅? 【参考方案1】:

根据List-Unsubscribe website,URL 应该用尖括号括起来,例如&lt;https://www.example.com/unlist?id=8822772727&gt;.

你可以试试这样的:

mailMessage.Headers.Add("List-Unsubscribe", String.Format(
    CultureInfo.InvariantCulture, "<https://0>", unSubscribeUrl));

为确保您不会被标记为垃圾邮件,请确保拥有 SSL 认证域。

【讨论】:

您好 Frederic,感谢您的回复。我尝试添加尖括号,但没有任何区别。我做了以下事情:`mailMessage.Headers.Add("List-Unsubscribe", String.Format("", personalUnsubscribeUrl)); mailMessage.HeadersEncoding = Encoding.Default;' @Gerard,您是否检查过您的网址实际上是否以http:// 开头?我认为这可能是强制性的。 @Frederic,我使用的网址是:http://demo.localhost/organisatie/afmelden-via-url?id=a7522a34-5c3d-4b38-8ea9-6c3ed360b377 @Gerard,您能否使用localhost 以外的域进行测试,例如类似http://www.foo.net/...? @Frederic,不,没有任何区别。【参考方案2】:

大多数电子邮件客户端仅支持 mailto-links。

试试这个,它应该总是有效的:

mailMessage.Headers.Add("List-Unsubscribe", "<mailto:list@host.com?subject=unsubscribe>");

RFC 规定也可以使用 http 链接。 但我发现,如果您包含 http 链接,电子邮件客户端将不再显示取消订阅链接。我认为这是因为人们可能只能访问邮件协议。

所以这并不总是有效:

 mailMessage.Headers.Add("List-Unsubscribe", "<http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:list-request@host.com?subject=unsubscribe>"; 

【讨论】:

我遇到了同样的问题。我在标题中有一个 http 和 mailto 表单,而 GMail 没有显示取消订阅的链接。当我删除 http 并只使用 mailto url 时,它工作正常。 这是一个过时的答案,但对于历史... GMail 和 MS Outlook(以及 m.b. 其他受欢迎的客户端)不再显示退订链接。你应该值得尊敬的发件人的声誉。之后,ESP 可以将您的地址添加到白名单中,并允许用户在 UI 中看到退订链接。此外,对于那些实施 DKIM 的人:如果 DKIM 检查失败,也可能是因为违反了此标头的最大长度。我测试了不同的List-Unsubscribed 标头长度,发现如果字符串长度超过 60 个字符(UTF-8),GMail 会失败 DKIM。并且mailtohttp 版本都通过了检查。【参考方案3】:

除了其他答案,还有RFC-8058需要另外一个header来启用HTTPS链接退订功能:

List-Unsubscribe:<https://example.com/unsubscribe.html?opaque=123456789>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

List-Unsubscribe-Post 标头应该有一个值List-Unsubscribe=One-Click。这是为了防止反垃圾邮件软件意外取消订阅,并允许额外的步骤显示带有取消订阅按钮的网页。

某些电子邮件客户端不会处理没有List-Unsubscribe-Post 标头的List-Unsubscribe 链接。

【讨论】:

以上是关于在电子邮件标题中列出取消订阅。如何?的主要内容,如果未能解决你的问题,请参考以下文章

通过 sendgrid/mail 发送时,如何向我的电子邮件添加取消订阅链接

Windows 8 邮件应用程序未显示订阅/取消订阅超链接?

使用 Fetch api Javascript 取消订阅电子邮件

Django,使用 Mailchimp 列表发送取消订阅的电子邮件

取消订阅按钮后表单的 EventListener 不起作用

带有取消订阅链接的 Rails 电子邮件