Список-отписка в шапке письма. Как?

Я пытаюсь добавить заголовок 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: [email protected]
To: [email protected]
Reply-To: [email protected]
Date: 8 Feb 2011 09:50:22 +0100
Subject: Test met plaatje
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: quoted-printable  

Но когда я открываю электронную почту в любом клиенте, я не вижу кнопку отписки в клиенте? Я делаю что-то еще не так?


person Gerard    schedule 06.12.2010    source источник
comment
Видите ли вы List-Unsubscribe, когда проверяете заголовки сообщений на принимающем клиенте? Можете ли вы добавить другие заголовки? Попробуйте использовать WireShark, чтобы убедиться, что вы отправляете заголовок List-Unsubscribe на локальный SMTP-сервер. Если это так, возможно, ваш локальный SMTP-сервер удаляет этот заголовок.   -  person Sam Skuce    schedule 06.12.2010
comment
RFC показывает только mailto: URL в примерах, возможно, они поддерживают только mailto: отписки?   -  person tripleee    schedule 25.08.2011


Ответы (3)


Большинство почтовых клиентов поддерживают только mailto-ссылки.

Попробуйте это, это должно работать всегда:

mailMessage.Headers.Add("List-Unsubscribe", "<mailto:[email protected]?subject=unsubscribe>");

В RFC указано, что можно также использовать http-ссылки. Но я обнаружил, что если вы включаете http-ссылки, почтовые клиенты больше не показывают ссылку отписки. Я думаю, это из-за возможности того, что люди имеют доступ только к почтовому протоколу.

Так что это не всегда работает:

 mailMessage.Headers.Add("List-Unsubscribe", "<http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:[email protected]?subject=unsubscribe>"; 
person 0x20    schedule 18.10.2011
comment
У меня была такая же проблема. У меня была форма http и mailto в шапке, а GMail не отображал ссылку для отписки. Когда я удалил http и пошел только с URL-адресом mailto, он работал нормально. - person Mike Dotterer; 30.11.2011
comment
Это устаревший ответ, но для истории ... GMail и MS Outlook (и многие другие популярные клиенты) больше не показывают ссылку для отказа от подписки. Вы должны заслужить репутацию почетного отправителя. После этого ESP МОЖЕТ добавить ваш адрес в белый список и позволить пользователям видеть ссылку отписки в пользовательском интерфейсе. Кроме того, для тех, кто реализует DKIM: если проверка DKIM не удалась, это также может быть связано с нарушением max LENGTH этого заголовка. Я протестировал различную длину заголовка List-Unsubscribed и обнаружил, что GMail не выполняет DKIM, если строка длиннее 60 символов (UTF-8). И обе версии mailto и http прошли проверку. - person Victor Ponamarev; 18.04.2016

Согласно веб-сайту List-Unsubscribe, URL должен быть заключен в угловые скобки, например <https://www.example.com/unlist?id=8822772727>.

Вы можете попробовать что-то вроде:

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

Чтобы убедиться, что вы не помечены как спам, убедитесь, что у вас есть сертифицированный домен SSL.

person Frédéric Hamidi    schedule 06.12.2010
comment
Привет Фредерик, Спасибо за ваш ответ. Я попытался добавить угловые скобки, но это не имеет значения. Я сделал следующее: `mailMessage.Headers.Add(List-Unsubscribe, String.Format(‹{0}›, personalUnsubscribeUrl)); mailMessage.HeadersEncoding = Encoding.Default;' - person Gerard; 06.12.2010
comment
@ Джерард, ты проверил, что твой URL действительно начинается с http://? Я думаю, что это может быть обязательным. - person Frédéric Hamidi; 06.12.2010
comment
@Frederic, URL, который я использую: http://demo.localhost/organisatie/afmelden-via-url?id=a7522a34-5c3d-4b38-8ea9-6c3ed360b377 - person Gerard; 06.12.2010
comment
@ Джерард, можешь ли ты протестировать домен, отличный от localhost, например. что-то вроде http://www.foo.net/...? - person Frédéric Hamidi; 06.12.2010
comment
@ Фредерик, нет, это не имеет значения. - person Gerard; 06.12.2010
comment
@ Джерард, может проблема в почтовом клиенте. Какой из них вы используете для своих тестов? - person Frédéric Hamidi; 06.12.2010
comment
@Frederic, я обновил вопрос той частью, которая отправляет электронные письма. - person Gerard; 06.12.2010

В дополнение к другим ответам есть также 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.

person Yuri    schedule 21.05.2021