Pergunta

Eu tentei alcançar este objetivo através de uma chamada MailMessage.Headers.Set, em VB.net. Veja abaixo:

    Dim objMail As MailMessage
    Dim objSMTPClient As SmtpClient

    objMail = New MailMessage()
    objSMTPClient = New SmtpClient()

    objMail.From = New MailAddress(MY_EMAIL_ADDRESS)
    objMail.To.Add(New MailAddress(TEST_EMAIL_ADDRESS))
    objMail.Headers.Set("Date", "09 Jan 1999 17:23:42 -0400")'date in the past'

    objMail.Subject = "The Subject"
    objMail.Body = "The Body"

    objSMTPClient.Port = 25
    objSMTPClient.Host = HOST_IP
    objSMTPClient.Credentials = New System.Net.NetworkCredential(MY_EMAIL_ADDRESS, txtPassword.Text)
    objSMTPClient.Send(objMail)

I confirmou que a chamada objMail.Headers.Set está realmente trabalhando - se eu conseguir o valor mais tarde, foi alterada com sucesso. Meu problema é que quando eu receber o e-mail no Outlook do TEST_EMAIL_ADDRESS, a data é 2009 em todos os lugares, e não 1999. Bem ali, na interface do Outlook, e também no cabeçalho, que eu acesso através do "Opções" item no contexto menu para que o e-mail.

O que estou fazendo de errado? Eu tenho um sentimento que eu perdi algo óbvio ...

Para ser claro: eu sou não fazer isso com intenção maliciosa. Eu estou trabalhando em um componente de integração de e-mail que utiliza ambos os UIDs e uma "Última processados" data para localizar o primeiro novo e-mail para integrar. Quero casos de teste, onde vários e-mails têm exatamente a mesma data / hora - como o módulo de integração de e-mail deve lidar com essas situações perfeitamente. Se eu pudesse simplesmente falso a data desta forma, eu poderia enviar como muitos e-mails como eu queria que corresponde a uma determinada data / hora, ao invés de tentar enviá-los com um script automatizado - esperando que todos eles vão ser recebidos dentro do mesmo segundo . Parece que vou precisar para tomar uma outra abordagem, no entanto.

Foi útil?

Solução

Adicionando sobre a nota de @Lasse V. Karlsen, eu acho que provavelmente o servidor SMTP está substituindo o que você colocar a mensagem em código. Em toda a honestidade, por que você ainda precisa fazer um olhar de e-mail como ela foi enviada no passado? Eu não posso pensar de uma única razão que não é desonesto, pelo menos, ou maliciosa, na pior.

Assim, não faria sentido para mim que o servidor iria substituir este cabeçalho se ele parecia suspeito. Eu não sei se é o que está realmente acontecendo, mas eu apostaria que @Lasse V. Karlsen está correto.

Se assim for, uma possível solução seria a de alterar a data no servidor SMTP para alguma data no passado (se você controlar o servidor e são capazes de fazê-lo).

Ainda assim, eu estou querendo saber por que você iria querer mesmo fazer isso. Você pode elaborar?

Adicionado

@Lasse V. Karlsen - Eu acho que você deve postar sua nota como a resposta de modo a obter o crédito para ele

.

Outras dicas

O valor de cabeçalho está sendo substituído na classe mensagem ao preparar cabeçalhos:

this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date), MailBnfHelper.GetDateTimeString(DateTime.Now, null));

A razão que eu estou tentando (sem sucesso) definir esse valor é porque eu preciso saber que para um cabeçalho calculado diferente. Eu acho que "perto o suficiente" terá que fazer.

Você pode adicionar cabeçalhos personalizados para a propriedade de cabeçalho; no entanto, não para alguns cabeçalhos reservados, incluindo Data. Os estados de documentação que o valor personalizado para cabeçalhos restritas serão descartados ou substituído leia mais aqui no MSDN

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top