2012-05-27 24 views
6

Utilizando SmtpClient y MailMessage classes en .NET para enviar correos electrónicos a través de un servidor de correo local (hMailServer), actualmente no encuentro forma de obtener el valor del encabezado Message-ID de un mensaje enviado.¿Es posible capturar el "ID de mensaje" de un mensaje de correo electrónico enviado con SmtpClient?

La idea detrás de

Estoy tratando de localizar mediante programación mensajes que no se pueden entregar, así que tengo que encontrar una manera de identificar respuestas del servidor SMTP de destino que rechaza un determinado mensaje.

Ahora pensé simplemente en recordar el valor del encabezado SMTP Message-ID y analizar los correos entrantes para este ID.

He intentado inspeccionar el Headers collection después de enviar el mensaje, pero no encontré ningún Message-ID.

Mi pregunta

¿Es posible obtener el valor Message-ID cabecera que mi servidor SMTP agrega durante el envío de una instancia MailMessage?

actualización 2012-05-27

Según this example He probado con éxito para generar manualmente un Message-ID por mi cuenta, justo antes de enviar.

Todos mis ejemplos funcionan hasta el momento, por lo que parece que esta es una solución a mi pregunta.

+1

Estoy bastante seguro de que el servidor SMTP asigna la identificación, y el protocolo SMTP no especifica devolver ese valor al cliente. Una forma de evitar esto sería enviar el mismo mensaje a BCC a una cuenta que usted controla, y extraer la identificación del mensaje de ese mensaje ... suponiendo que la identificación del mensaje se genera una vez, en el servidor SMTP inicial. Otra posibilidad es agregar una "X-tag" personalizada al correo electrónico. –

+0

Gracias, @JeremyHolovacs - Ya he intentado agregar una etiqueta personalizada (no con el prefijo "X-", sin embargo) parece que esta etiqueta se pierde al reenviar o responder al mensaje. –

+1

Lamentablemente, por http://stackoverflow.com/questions/7095104/how-to-confirm-that-mail-has-been-delivered-or-not no hay un método a prueba de balas para esto. –

Respuesta

2

La solución estándar para su problema es VERP. Lea el artículo original de Bernstein para descubrir por qué Message-Id et al. no son confiables http://cr.yp.to/proto/verp.txt

+1

Intentando averiguar cómo hacer VERP con GMail ... No se puede enviar usando las direcciones más ya que GMail sobrescribe con el correo electrónico en la cuenta autenticada (incluso cuando su dirección más se basa en la dirección de correo electrónico autenticada). – MikeJansen

+1

@MikeJansen: si tiene alguna pregunta, publique una pregunta. – tripleee

+1

lo siento, no estoy seguro de por qué publiqué ese comentario. Realmente no puedo hacer VERP con Gmail por lo que he encontrado. Esta publicación resume lo que he encontrado: http://stackoverflow.com/questions/9925392/does-gmail-not-allow-sender-to-set-a-return-path-value-to-receive-bounce-message . Tendré que usar otro servidor SMTP, el mío o el de otro proveedor. – MikeJansen

2

Puede agregar su propia identificación de mensaje antes de enviar el correo electrónico. Yo uso el siguiente código:

Guid id = Guid.NewGuid(); //Save the id in your database 
mensajeEmail.Headers.Add("Message-Id", String.Format("<{0}@{1}>",id.ToString(),"mail.example.com")); 

Nota: Para descargar mensajes utilizo OpenPop.Net, puedo comprobar la propiedad message.Headers.InReplyTo, y no es el ID de mensaje sended.

Cuestiones relacionadas