2011-06-03 7 views
5

Estoy buscando una forma única de identificar un correo electrónico en el momento de enviarlo utilizando la clase .NET SmtpClient (en System.Net.Mail), es decir,Identificar de manera única un correo electrónico al enviar usando System.Net.Mail

 SmtpClient client = new SmtpClient(smtpServer, smtpPort); 

     client.EnableSsl = false; 

     MailAddress from = new MailAddress(fromAddress); 
     MailAddress to = new MailAddress(destinationAddress); 

     MailMessage message = new MailMessage(from, to); 

     message.Body = body; 
     message.Subject = subject; 

etc.

puedo establecer la propiedad 'Mensaje-Id' usando message.Headers (se establece en un System.Guid) pero se sobreescribe por el servidor SMTP, y no sé cómo acceder la id del mensaje que genera el servidor smtp.

Necesito un sistema cliente para abrir el buzón de correo POP3 que recibe el correo electrónico y ser capaz de seguir hacia abajo por este identificador único.

¿Alguien sabe si esto es posible?

Respuesta

7

Una opción es adjuntar un encabezado personalizado al mensaje. Los encabezados personalizados se indican con un prefijo X-. Entonces, en este caso, puede crear uno llamado X-Unique-Id que no se sobrescriba.

Sin embargo, no es necesariamente el caso de que todos los clientes de correo permitirán filtrado/búsqueda basado en las cabeceras personalizadas, que tendría que comprobar el cliente.

por MSDN:

Todos los encabezados de encargo añadidas será incluido cuando la instancia MailMessage se envía.

Sólo tiene que añadir a la colección message.Headers como:

message.Headers["X-Unique-Id"] = "1";

Otra opción sería utilizar una respuesta a especial: o desde: valor que incluye el ID de mensaje. P.ej. si su dirección de respuesta fue [email protected], cámbiela a auto +{unique-id}@responder.net. Muchos servidores de correo (incluido gmail) tratarán el + como un comodín y entregarán el mensaje a [email protected] normalmente. Este es un enfoque común utilizado para permitir a los usuarios responder directamente a los mensajes en la aplicación a través del correo electrónico.

+0

Gracias, lo intentaré. –

1

¿Puede adjuntar un GUID a la línea Asunto o agregarlo al final del cuerpo del correo electrónico? Sería visible para el usuario, pero si está en la parte inferior del correo electrónico (tal vez con más información) estaría fuera del camino y aún así haría posible la búsqueda.

+2

Eso generará problemas con muchos detectores de spam, creo; SpamAssassin, al menos, tiene una regla para estos códigos de seguimiento en el cuerpo o el sujeto. – mnemosyn

4

Dependiendo de lo que entendemos por "sistema cliente", sugeriría que se agrega una cabecera de cliente, tales como X-MyHeader: GUID.

El X-Headers no interactúan con los servidores de correo; Esto también lo usan muchas herramientas de correo populares, p. mailchimp:

System.Net.Mail.MailMessage m; 
m.Headers.Add("X-MyHeader", Guid.NewGuid()); 
+0

Veo, si prefijo con 'X', el servidor smtp ignorará por defecto? –

+1

Para decirlo correctamente, RFC 822 [http://tools.ietf.org/html/rfc822] dice que ningún encabezado formal comenzará con 'X-', por lo tanto, estos encabezados no colisionan con ningún otro encabezado formalmente publicado . 'X-Sender' y' X-Mailer' son ampliamente utilizados, sin embargo. – mnemosyn

Cuestiones relacionadas