2009-09-10 5 views
5

Próbowałem osiągnąć to poprzez wywołanie MailMessage.Headers.Set, w VB.net. Patrz poniżej:Jak mogę wysłać wiadomość e-mail z datą przeszłą z .NET?

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 potwierdził, że wezwanie objMail.Headers.Set rzeczywiście działa - jeśli dostanę wartość potem został pomyślnie zmieniony. Mój problem polega na tym, że kiedy otrzymuję e-mail w Outlook'u TEST_EMAIL_ADDRESS, data jest wszędzie w roku 2009, a nie w roku 1999. Zaraz w interfejsie programu Outlook, a także w nagłówku, do którego dostęp uzyskuję za pomocą elementu "Opcje" w kontekście menu dla tego e-maila.

Co robię źle? Mam przeczucie, że przegapiłem coś oczywistego ...

Aby było jasne: Jestem nie robiąc to złośliwie. Pracuję nad komponentem integracji e-mail, który wykorzystuje zarówno identyfikatory UID, jak i datę "Last przetworzone", aby znaleźć pierwszą nową wiadomość e-mail do integracji. Chcę przetestować przypadki, w których wiele wiadomości e-mail ma dokładnie tę samą datę/czas - ponieważ moduł integracji poczty e-mail powinien obsługiwać te sytuacje bezbłędnie. Gdybym mógł po prostu sfałszować datę w ten sposób, mógłbym wysłać tyle e-maili, ile chciałem, które pasują do konkretnej daty/czasu, zamiast wysyłać je za pomocą automatycznego skryptu - mając nadzieję, że wszystkie zostaną odebrane w ciągu tej samej sekundy . Wygląda jednak na to, że muszę przyjąć inne podejście.

+9

Prawdopodobnie jest to unieważnione przez serwery, o których mowa, które rejestrują czas otrzymania wiadomości, a nie kiedy wiadomość mówi, że została wysłana . –

+0

Myślę, że węszenie sieci pomogłoby. Lub co najmniej dodatkowe logowanie na serwerze SMTP. –

+0

@Lasse V. Karlsen Jak powiedział David Stratton, powinieneś dodać ten komentarz jako odpowiedź. To ma sens. Będę musiał wymyślić lepsze podejście. –

Odpowiedz

2

Dodawanie do @Lasse V. Uwaga Karlsen, myślę, że najprawdopodobniej serwer SMTP nadpisuje to, co umieścisz w wiadomości w kodzie. Szczerze mówiąc, dlaczego miałbyś chcieć sprawić, by wiadomość wyglądała tak, jakby była wysyłana w przeszłości? Nie mogę wymyślić ani jednego powodu, który nie jest nieuczciwy, a przynajmniej w złym guście.

Byłoby sensowne, że serwer nadpisałby ten nagłówek, gdyby wyglądał podejrzanie. Nie wiem, czy tak właśnie się dzieje, ale założę się, że @Lasse V. Karlsen ma rację.

Jeśli tak, rozwiązaniem może być zmiana daty na serwerze SMTP na jakąś datę z przeszłości (jeśli kontrolujesz serwer i możesz to zrobić).

Mimo to zastanawiam się, dlaczego chciałbyś to zrobić. Czy możesz rozwinąć?

Dodany

@Lasse V. Karlsen - Myślę, że powinieneś pisać notatkę jako odpowiedź tak dostaniesz za to punkty.

+3

Pracuję nad komponentem integracji e-mail, który wykorzystuje zarówno identyfikatory UID, jak i datę "Ostatni przetworzony", aby zlokalizować pierwszą nową wiadomość e-mail do integracji. Chcę przetestować przypadki, w których wiele wiadomości e-mail ma dokładnie tę samą datę/czas - ponieważ moduł integracji poczty e-mail powinien obsługiwać te sytuacje bezbłędnie. Gdybym mógł po prostu sfałszować taką datę, mógłbym wysłać tyle e-maili, ile chciałem, które pasują do konkretnej daty/czasu, zamiast wysyłać je za pomocą automatycznego skryptu - mając nadzieję, że wszystkie zostaną odebrane w ciągu tej samej sekundy . –

+0

Będę musiał wymyślić lepszy sposób na zrobienie tego, jak się wydaje. –

+0

+1 do komentera do testowania! Może istnieć sposób generowania lub fałszywego wiadomości e-mail dla komponentu integracji, aby nie trzeba było wysyłać ich przez serwer poczty, aby przetestować tę część. Wciąż można wykonywać testy integracyjne z serwerem poczty, ale te konkretne testy mogą działać lepiej jako izolowane testy jednostkowe. – TrueWill

0

wartość nagłówka jest nadpisane w klasie podczas przygotowywania nagłówków wiadomości:

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

Dlatego, że usiłuję (bezskutecznie) ustawić tę wartość jest, bo trzeba wiedzieć, to dla innego obliczonego nagłówku . Myślę, że "wystarczająco blisko" będzie musiał zrobić.

+1

Nie wiem, jak ta odpowiedź ma zastosowanie do pytania? – Krease

1

Możesz dodać własne nagłówki do właściwości Nagłówek; jednak nie kilka zarezerwowanych nagłówków, w tym Data. Dokumentacja stwierdza, że ​​wartość niestandardowa dla zastrzeżonych nagłówków zostanie odrzucona lub nadpisana, czytaj więcej here na MSDN

Powiązane problemy