在电子邮件标题中列出取消订阅。如何?
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 应该用尖括号括起来,例如<https://www.example.com/unlist?id=8822772727>
.
你可以试试这样的:
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。并且mailto
和http
版本都通过了检查。【参考方案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 取消订阅电子邮件