2010-12-06 17 views
14

Estoy tratando de agregar un encabezado List-Unsubscribe a mi correo electrónico que se está enviando. Hasta ahora no he tenido suerte tratando de hacerlo.List-unsubscribe en el encabezado del correo electrónico. ¿Cómo?

Lo que he conseguido hasta ahora:

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); 

El unSubscribeUrl es algo así como 'www.example.com/unlist?id=8822772727'. Cuando envío el correo electrónico, todo funciona bien, excepto la opción de anulación de suscripción a la lista. Que no se muestra en ningún cliente de correo.

¡Cualquier ayuda sería bienvenida!

ACTUALIZACIÓN
Este es todo el código que utilizo para enviar el correo electrónico:

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); 

ACTUALIZACIÓN 2
Después de un poco de investigación me dio la cabecera en el MailMessage. Cuando envié un correo electrónico que puedo ver los siguientes encabezados:

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 

Pero cuando abro el correo electrónico en cualquier cliente que no puedo ver el botón de darse de baja en el cliente? ¿Estoy haciendo algo más mal?

+0

Cómo ves la "Lista-Darse de baja" al comprobar los encabezados de los mensajes en el cliente receptor? ¿Puedes agregar otros encabezados? Intente utilizar WireShark para verificar que esté enviando el encabezado List-Unsubscribe al servidor SMTP local. Si es así, es posible que su servidor SMTP local esté eliminando ese encabezado. –

+1

El RFC solo muestra las URL de 'mailto:' en los ejemplos, tal vez solo admitan 'mailto:' anular la suscripción? – tripleee

Respuesta

2

De acuerdo con List-Unsubscribe website, la URL debe estar envuelta con corchetes angulares, p. Ej. <http://www.example.com/unlist?id=8822772727>.

Usted puede intentar algo como:

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

Hola Frederic, Gracias por su respuesta. Traté de agregar los corchetes angulares, pero no hace la diferencia. Hice lo siguiente: 'mailMessage.Headers.Add (" List-Unsubscribe ", String.Format (" <{0}> ", personalUnsubscribeUrl)); mailMessage.HeadersEncoding = Encoding.Default; ' – Gerard

+0

@Gerard, ¿has comprobado que tu URL realmente comienza con 'http: //'? Creo que podría ser obligatorio. –

+0

@Frederic, La url que uso es: 'http: // demo.localhost/organisatie/afmelden-via-url? id = a7522a34-5c3d-4b38-8ea9-6c3ed360b377' – Gerard

14

La mayoría de los clientes de correo electrónico mailto sólo admiten enlaces.

probar esto, que debería funcionar siempre:

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

El RFC especifica que es posible utilizar HTTP-enlaces también. Pero he encontrado que si incluye enlaces http, los clientes de correo electrónico ya no muestran el enlace para darse de baja. Creo que es debido a la posibilidad de que las personas solo tengan acceso al protocolo de correo.

Así que esto no siempre funciona:

mailMessage.Headers.Add("List-Unsubscribe", "<http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:[email protected]?subject=unsubscribe>"; 
+1

Tuve este mismo problema. Tenía tanto un formulario http como un formulario de mailto en el encabezado y GMail no mostraba el enlace para cancelar la suscripción. Cuando eliminé el http y fui con solo la URL de mailto, funcionó bien. –

+2

Es una respuesta obsoleta, pero para la historia ... GMail y MS Outlook (y m.b. otros clientes populares) ya no muestran el enlace de cancelación de suscripción. Deberías merecer la reputación de un remitente honorable. Después, ESP PUEDE agregar su dirección a la lista blanca y permitir que los usuarios vean el enlace para darse de baja en la interfaz de usuario. Además, para aquellos que implementan DKIM: si falla la verificación de DKIM, también puede ser debido a la violación máxima de LENGTH de este encabezado. He probado diferentes longitudes de encabezado 'List-Unsubscribed' y descubrí que GMail falla DKIM si la cadena tiene más de 60 caracteres (UTF-8). Y ambas versiones 'mailto' y' http' habían pasado la verificación. – kokosda

Cuestiones relacionadas