Editar um cabeçalho de SMTP com um Agente de Transporte do Exchange 2007
-
16-09-2019 - |
Pergunta
Atualmente estou escrevendo um Agente de Transporte do Exchange 2007 para substituir alguns cabeçalhos em todas as mensagens enviadas de um remetente específico. Eu consegui substituir o 'De' cabeçalho SMTP com sucesso, mas reescrevendo o 'Return-Path' header não parece trabalho.
Para fazer isso tudo acontecer, eu escrevi um SmtpReceiveAgent personalizado e assinar o evento OnEndOfData assim:
private static void MyAgent_OnEndOfData(ReceiveMessageEventSource source, EndOfDataEventArgs e)
{
try
{
var address = e.MailItem.Message.From.SmtpAddress;
if (address.ToLower().EndsWith("[internal email domain]"))
{
// replace the From: header - WORKING FINE!
e.MailItem.Message.From = new EmailRecipient("[displayname]",
"[email address]");
// replace the Return-Path: header - NOT WORKING!
var headerList = e.MailItem.Message.RootPart.Headers;
var header = (AddressHeader)headerList.FindFirst("Return-Path");
var newheader = new AddressHeader("Return-Path") { Value = "[email address" };
headerList.ReplaceChild(newheader, header);
}
}
catch (Exception ex)
{
// do something useful here
}
}
Solução
De acordo com as RFCs, o cabeçalho Return-Path é suposto ser definido pelo servidor SMTP do destinatário. Se um cabeçalho Return-Path existe no e-mail, ele deve ser removido, e redefinir pelo servidor do destinatário.
Talvez o que você está vendo, é a implementação correta dos RFCs.
Outras dicas
Eu não tenho certeza, mas parece que você pode querer estar mudando o "reply-to" cabeçalho e não "return-path". "Return-path" é para ser definido pelo servidor.