C#で、どのEメールが別のEメールへの返信かを知ることができますか?
質問
私はWebアプリケーションを開発しました。そのため、特定の販売順序のためのメモを入力する機能があります。
顧客またはカスタマーサービスの実行担当者によってノートが入力された場合、電子メール通知が関連当事者に送信されます(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("replyto@email.com");
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);
}
.
メッセージヘッダーに送信されているメッセージのGuid
としてMessage-Id
を設定しています。
これは全てうまく機能します。
今、当事者がそれぞれの受信トレイからの電子メール通知に返信する機能を開発したい。
そして私は同じ販売時代のメモに返信を記録したい(パーティーが通知を受けた)。
通知応答の受信トレイを読み込むための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;
}
}
.
上記の関数から、私は私の "replyto@email.com"アカウントからすべての電子メールを読むことができます。しかし、私はEメールのMessage-Id
ヘッダーにIn-reply-to
を見つけることができません。
私は間違っていることを知りません。
解決
最善の解決策
あなたの返品アドレスはreplies@yourdomain.com
メールサーバーにフィルタルールを追加する必要があるため、repliess andanyrelensdatahere@yourdomain.comに返信されたメッセージが返信@ yourdomain.comメールボックス
Facebookの通知直接電子メール返信にこれを使用しています。
Gmailも使用します(Gmailアドレスがある場合は試してください)
(
これが役立つことを願っています。もしそうなら、メールサーバーの設定で頑張ってください
他のヒント
@JBLで返信されたので、プラスアドレッシングコンセプトを使用しました。電子メールプロバイダにSMTP
サーバーでこの概念を有効にするように依頼しました。 Gmailはデフォルトでこれを提供します。
電子メールを送信するときは、以下のような注文で入力されたすべてのメモのためにアドレスに固有の返信を行います。
String sReplyToadd = "replyto@domain.com";
String replyToAddress = sReplyToadd.Substring(0, sReplyToadd.IndexOf('@')) + "+on" + orderID + "un" + userID + sReplyToadd.Substring(sReplyToadd.IndexOf('@'), sReplyToadd.Length - sReplyToadd.IndexOf('@'));
.
これは、replyToAddress = "replyto+on1234un5678@domain.com"
、注文を識別するための固有のアドレスであり、注文を識別し、注文を識別します。
今、アドレスへのこの一意の返信は、以下のように外出する電子メールに割り当てられます。
using (MailMessage objEmail = new MailMessage())
{
objEmail.Body = eMailBody;
objEmail.From = new MailAddress("from@domain.com", "Display Name");
objEmail.IsBodyHtml = true;
objEmail.Subject = "email subject goes here";
objEmail.To.Add(new MailAddress("tosomeuser@gmail.com");
//here we set the unique reply to address for the outgoing email
objEmail.ReplyTo = new MailAddress(replyToAddress); //replyto+on1234un5678@domain.com
SmtpClient objSmtp = new SmtpClient();
objSmtp.EnableSsl = true;
objSmtp.Credentials = new NetworkCredential("username", "password");
objSmtp.Host = "127.0.0.1";//"smtp.gmail.com" for gmail
objSmtp.Port = 25;
objSmtp.Send(objEmail);
}
.
ReplyTo
アドレスは、下に示すように、ユーザーが自分の電子メールクライアントの[返信]ボタンをクリックしている場合は、TOアドレスに表示されます。
ユーザーがTo
アドレスを変更しない場合は、replyto@domain.com
メールボックスに受信されます。 返信を正しくマッピングするには、 を正しくマッピングするには、アドレスを変更しないでください。
メールボックスにメールが届くと、電子メールの返信のTo
アドレスを確認し、必要な順序IDとユーザーIDを以下のように取得する必要があります。
.
String replyFor = objEmail.To[0].ToString();
Int64 orderID = Convert.ToInt64(replyFor.Substring(replyFor.LastIndexOf("+on") + 3, replyFor.LastIndexOf("un")));
Int64 userID = replyFor.Substring(replyFor.LastIndexOf("un") + 2, replyFor.IndexOf("@") - replyFor.LastIndexOf("un") - 2);
それから私たちは後で幸せに暮らしていました!!!