20

我正在尝试将 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  

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

4

3 回答 3

18

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

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

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

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

所以这并不总是有效:

 mailMessage.Headers.Add("List-Unsubscribe", "<http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:list-request@host.com?subject=unsubscribe>"; 
于 2011-10-18T08:03:36.907 回答
4

根据List-Unsubscribe 网站,URL 应该用尖括号括起来,例如<https://www.example.com/unlist?id=8822772727>

您可以尝试以下方法:

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

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

于 2010-12-06T11:31:31.490 回答
1

除了其他答案之外,还有RFC-8058需要另一个标头来启用 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没有List-Unsubscribe-Post标头的链接。

于 2021-05-21T09:18:08.273 回答