He desarrollado una aplicación web, en la cual hay una funcionalidad para ingresar notas para un pedido de venta en particular.¿Cómo puedo saber qué correo electrónico es una respuesta a otro correo electrónico, en C#?
Cuando un cliente o un ejecutivo de servicio al cliente ingresa una nota, se envía una notificación por correo electrónico a la parte correspondiente (la notificación por correo electrónico se envía utilizando SmtpClient & MailMessage objects en C#).
using (MailMessage objEmail = new MailMessage())
{
Guid objGuid = new Guid();
objGuid = Guid.NewGuid();
String MessageID = "<" + objGuid.ToString() + ">";
objEmail.Body = messagebody.ToString();
objEmail.From = new MailAddress(sFrmadd, sFrmname);
objEmail.Headers.Add("Message-Id", MessageID);
objEmail.IsBodyHtml = true;
objEmail.ReplyTo = new MailAddress("[email protected]");
objEmail.Subject = sSubject;
objEmail.To.Add(new MailAddress(sToadd));
SmtpClient objSmtp = new SmtpClient();
objSmtp.Credentials = new NetworkCredential("mynetworkcredential", "mypassword");
objSmtp.DeliveryMethod = SmtpDeliveryMethod.Network;
objSmtp.EnableSsl = true;
objSmtp.Host = "myhostname";
objSmtp.Port = 25;
objSmtp.Timeout = 3 * 3600;
objSmtp.Send(objEmail);
}
estoy fijando un Guid
como el Message-Id
del mensaje que se envió en las cabeceras de los mensajes.
Todo esto funciona bien.
Ahora quiero desarrollar una funcionalidad para que las partes respondan a la notificación por correo electrónico desde su bandeja de entrada respectiva.
Y quiero registrar las respuestas en las notas para el mismo pedido de ventas (para el que la parte recibió la notificación).
Estoy usando OpenPop.dll para leer la bandeja de entrada para respuestas de notificación.
/// <summary>
/// Fetch all messages from a POP3 server
/// </summary>
/// <param name="hostname">Hostname of the server. For example: pop3.live.com</param>
/// <param name="port">Host port to connect to. Normally: 110 for plain POP3, 995 for SSL POP3</param>
/// <param name="useSsl">Whether or not to use SSL to connect to server</param>
/// <param name="username">Username of the user on the server</param>
/// <param name="password">Password of the user on the server</param>
/// <returns>All Messages on the POP3 server</returns>
public static List<Message> FetchAllMessages(string hostname, int port, bool useSsl, string username, string password)
{
// The client disconnects from the server when being disposed
using (Pop3Client client = new Pop3Client())
{
// Connect to the server
client.Connect(hostname, port, useSsl);
// Authenticate ourselves towards the server
client.Authenticate(username, password);
// Get the number of messages in the inbox
int messageCount = client.GetMessageCount();
// We want to download all messages
List<Message> allMessages = new List<Message>(messageCount);
// Messages are numbered in the interval: [1, messageCount]
// Ergo: message numbers are 1-based.
for (int i = 1; i <= messageCount; i++)
{
allMessages.Add(client.GetMessage(i));
}
// Now return the fetched messages
return allMessages;
}
}
De la función anterior, puedo leer todos los correos electrónicos de mi cuenta "[email protected]". Pero no puedo encontrar el Message-Id
en el encabezado In-reply-to
de los correos electrónicos.
No sé lo que estoy haciendo mal.
Por lo que sé que no hay un método confiable para hacer esto, usted está a merced de un cliente de correo electrónico, y cada cliente de correo electrónico tiene sus propias peculiaridades. La mayoría de los sistemas similares que he visto usan * subject línea * para poner una identificación única en, y luego, cuando el mensaje es respondido para quitar "RE:" desde el principio. –
Solíamos agregar un encabezado personalizado en el correo electrónico. – PraveenVenu
Creo que incluso las conversaciones de Outlook están basadas en temas. –