.NET에서 과거 날짜로 이메일을 보내려면 어떻게해야합니까?
문제
vb.net에서 MailMessage.headers.set Call을 통해이를 수행하려고했습니다. 아래를 참조하십시오 :
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)
나는 objmail.headers.set 호출이 실제로 작동하고 있음을 확인했습니다. 나중에 값을 얻으면 성공적으로 변경되었습니다. 내 문제는 TELK에서 전자 메일을 받으면 1999 년이 아닌 20099 년이 아닌 날짜가 2009 년이라는 것입니다. 그 이메일 메뉴.
내가 뭘 잘못하고 있죠? 나는 분명한 것을 놓친 느낌이있다 ...
분명히 : 나는 ~ 아니다 악의적 인 의도로 이것을 수행합니다. UID와 "마지막 처리 된"날짜를 모두 사용하여 통합 할 첫 번째 새 이메일을 찾는 이메일 통합 구성 요소를 작업 중입니다. 전자 메일 통합 모듈이 이러한 상황을 완벽하게 처리해야하므로 여러 전자 메일이 동일한 날짜/시간을 갖는 사례를 테스트하고 싶습니다. 단순히 이런 식으로 날짜를 속일 수 있다면 자동 스크립트로 보내지 않고 특정 날짜/시간과 일치하는 많은 이메일을 보낼 수 있습니다. . 그래도 다른 접근 방식을 취해야 할 것 같습니다.
해결책
@lasse v. Karlsen의 메모에 추가하면 SMTP 서버가 코드에 메시지에 넣은 내용을 무시하고 있다고 생각합니다. 모든 정직으로, 왜 과거에 전송 된 것처럼 보이는 것처럼 보이도록해야합니까? 나는 최소한 부정직하지 않은 단일 이유를 생각할 수 없거나 최악의 경우 악의적입니다.
따라서 서버 가이 헤더가 의심스러워 보이면이 헤더를 덮어 쓰는 것이 합리적입니다. 그것이 실제로 무슨 일이 일어나고 있는지 모르겠지만 @lasse v. karlsen이 옳다고 확신합니다.
그렇다면 가능한 솔루션은 SMTP 서버의 날짜를 과거의 날짜로 변경하는 것입니다 (서버를 제어하고 그렇게 할 수있는 경우).
아직도, 나는 당신이 왜 이것을하고 싶은지 궁금합니다. 정교 해 줄 수 있습니까?
추가
@Lasse V. Karlsen- 메모를 답으로 게시해야한다고 생각합니다.
다른 팁
헤더를 준비 할 때 메시지 클래스에서 헤더 값이 덮어 쓰고 있습니다.
this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date), MailBnfHelper.GetDateTimeString(DateTime.Now, null));
이 값을 설정하려는 이유는 다른 계산 된 헤더에 대해 알아야하기 때문입니다. "충분히 가까이"해야 할 것 같아요.
헤더 속성에 사용자 정의 헤더를 추가 할 수 있습니다. 그러나 날짜를 포함한 예약 헤더는 거의 없습니다. 문서에 따르면 제한된 헤더에 대한 사용자 정의 값은 폐기되거나 덮어 쓸 것입니다. 여기 MSDN에서