2007NDRをパブリックフォルダに交換する
Q1。multipart / Alternativeに変更する必要がありますが、「Content-Type:message / delivery-status」を見つけて、text / plainに変更する必要がありますが、必須ではありません。
Q2。これを行うことはできますが、「元の」メッセージの唯一のオプションは、送信者にメッセージを拒否するか、隔離するか、許可することです。削除/削除オプションはありませんが、パブリックフォルダーに移動するため、破棄されます。 。
このルートを使用する場合は、EndOfHeadersEvent中にヘッダーと本文を列挙してから、新しいMailMessageオブジェクトを生成し、元のヘッダーと本文を含めます
Q3。それはうまくいくはずです..それがうまくいかないことがわかる唯一の理由は、サーバー上で受け入れられたドメインではない外部の受信者/ドメインに送信しようとしている場合です..それがあなたがやろうとしていることなら、あなたは実際の外部アドレスを使用してメール連絡先を作成してから、NDRを外部連絡先にCCする必要があります
以下は、あなたがやろうとしていることを達成することができたコードです。onRcptとonEndOfHeadersに接続する理由は、入力した受信者がパブリックフォルダーアドレスであるかどうかを確認するためです。ヘッダーの最後にあるrcptリストを列挙するよりも高速であることがわかりました。
void UserSendCounterSmtpReceiveAgent_OnRcptCommand(ReceiveCommandEventSource source, RcptCommandEventArgs e)
{
if(source == null || e == null)
{
return;
}
String recipient = e.RecipientAddress.ToString();
if (recipient.Equals("publicfolder@domain.com"))
{
this.testOnEndOfHeaders = true;
}
}
void UserSendCounterAgent_OnEndOfHeaders(ReceiveMessageEventSource source, EndOfHeadersEventArgs e)
{
if (source == null || e == null)
{
return;
}
if (testOnEndOfHeaders)
{
this.testOnEndOfHeaders = false;
Header obj = e.Headers.FindFirst("Content-Type");
if (obj.Value.Equals(@"multipart/report"))
{
obj.Value = @"multipart/alternative";
e.MailItem.Recipients.Add(new RoutingAddress("forwardto@domain.com"));
}
}
}