Tôi đã phát triển một ứng dụng web, trong đó có chức năng để nhập ghi chú cho một Đơn đặt hàng cụ thể.Làm cách nào để biết email nào là thư trả lời cho một email khác, trong C#?
Khi ghi chú được Khách hàng hoặc Người quản lý dịch vụ khách hàng nhập, thông báo qua email được gửi đến bên liên quan (thông báo qua email được gửi bằng SmtpClient & đối tượng MailMessage trong 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);
}
Tôi đang thiết lập một Guid
như Message-Id
của thông điệp được gửi trong tiêu đề thư.
Tất cả điều này hoạt động tốt.
Bây giờ tôi muốn phát triển một chức năng để các bên trả lời thông báo qua email từ hộp thư đến tương ứng của họ.
Và tôi muốn ghi lại câu trả lời trong ghi chú cho cùng một Đơn hàng bán hàng (mà bên nhận được thông báo).
Tôi đang sử dụng OpenPop.dll để đọc hộp thư đến để nhận thông báo trả lời.
/// <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;
}
}
Từ chức năng trên, tôi có thể đọc tất cả email từ tài khoản "[email protected]" của tôi. Nhưng tôi không thể tìm thấy số Message-Id
trong tiêu đề In-reply-to
của email.
Tôi không biết mình đang làm gì sai.
Theo như tôi biết không có phương pháp đáng tin cậy để làm điều này, bạn đang ở lòng thương xót của một ứng dụng email, và mỗi khách hàng email có quirks riêng của mình. Hầu hết các hệ thống tương tự mà tôi đã nhìn thấy sử dụng * dòng tiêu đề * để đặt một id duy nhất trong, và sau đó, khi tin nhắn được trả lời để dải "RE:" từ đầu. –
Chúng tôi đã sử dụng để thêm một số tiêu đề tùy chỉnh trong email. – PraveenVenu
Tôi tin rằng ngay cả các cuộc hội thoại của Outlook cũng dựa trên chủ đề. –