특정 판매 주문에 대한 메모를 입력하는 기능이있는 웹 응용 프로그램을 개발했습니다.C#에서 어떤 이메일이 다른 이메일에 대한 답장인지 어떻게 알 수 있습니까?
고객 또는 고객 서비스 담당자가 메모를 입력하면 해당 당사자에게 전자 메일 알림이 전송됩니다 (전자 메일 알림은 C#의 SmtpClient & MailMessage 개체를 사용하여 전송됩니다).
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);
}
내가 메시지의 Message-Id
로 Guid
을 설정하고이 메시지 헤더에 전송되는.
이 모든 것이 정상적으로 작동합니다.
이제 해당 당사자가 각자의받은 편지함에서 전자 메일 알림에 회신 할 수있는 기능을 개발하고 싶습니다.
그리고 응답을 당사자가 통보받은 동일한 판매 주문에 대한 메모에 기록하고 싶습니다.
알림 - 답장을 위해받은 편지함을 읽는 데 OpenPop.dll을 사용하고 있습니다. 위의 함수에서
/// <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;
}
}
나는 내 "
[email protected]"계정에서 모든 이메일을 읽을 수 있어요. 그러나 나는 이메일의
In-reply-to
헤더에서
Message-Id
을 찾을 수 없습니다.
내가 뭘 잘못하고 있는지 모르겠다.
믿을만한 방법이 없다는 것을 알고있는 한, 전자 메일 클라이언트가 자비 롭습니다. 각 전자 메일 클라이언트에는 고유 한 단점이 있습니다. 필자가 보았던 유사한 시스템의 대부분은 유일한 ID를 넣기 위해 * 제목 줄 *을 사용했다가 메시지가 처음부터 "RE :"를 제거 할 때 사용되었다. –
이메일에 몇 가지 맞춤 헤더를 추가했습니다. – PraveenVenu
Outlook의 대화조차도 주제에 기반한다고 생각합니다. –