2013-06-21 5 views
2

2010 년 (여전히 Net 2.0을 사용하고있었습니다) SmtpClient와 함께 SmtpDeliveryMethod.SpecifiedPickupDirectory를 사용할 때 숨은 참조를받는 사람에게 메일이 보내지지 않는 문제가 발생했습니다.SmtpClient : SmtpDeliveryMethod.SpecifiedPickupDirectory를 사용할 때 숨은 참조가 무시되었습니다.

웹 (linklink)를 검색 한 후, 나는 다음 해결했다 :

if (message.Bcc.Count > 0) 
{ 
    System.Text.StringBuilder bcc = new System.Text.StringBuilder(); 
    for (int i = 0; i < message.Bcc.Count; i++) 
    { 
     bcc.Append(message.Bcc[i].Address); 
     bcc.Append(";"); 
    } 
    message.Headers.Add("Bcc", bcc.ToString()); 
    message.Bcc.Clear(); 
} 

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(); 
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory; 
smtp.PickupDirectoryLocation = PickupDir; 
smtp.Send(message); 

이 해결 방법은 숨은 참조받는 사람이 메일 보내기의 헤더에 눈에 보였다 부작용으로했다, 그러나에 우리의 경우 Bcc가 로깅 목적으로 사용 되었기 때문에 이것이 문제가되지 않았습니다.

며칠 전에 우리는 Net 4.0 (최종적으로)으로 전환했고 문제는 재 포장되었습니다. 해결 방법을 제거하려고 시도했지만 도움이되지 않았습니다.

Send 메서드가 차단되어 메일을 보내는 동안 사용자를 대기 상태로 유지하므로 솔루션을 사용할 수 없습니다 (메일 서버로드에 따라 다름). SmtpDeliveryMethod.Network는 솔루션이 아닙니다. 메일 보내기가 실패하거나 프로세스가 충돌 할 때 메일이 손실되므로 메일 비동기를 보내는 것도 옵션이 아닙니다.

나는이 문제에 대해 웹상에서 해결책을 찾지 못했지만 어떤 아이디어가 있습니까?

답변

1

.Net 4.0에서는 작동하지 않습니다. 그러나 버그가 아니라 그렇게 설계되었습니다. 이것 좀 봐 link

보이는 것처럼 거기에 당신이 찾고있는 동작을 구현할 수있는. NET 3.5 버그가 있습니다.

+0

이 조합이 지원되지 않으면 (Bcc + PickupDirectory) SmtpClient 및/또는 MailMessage의 도움말 페이지에서 언급해야합니다. – Marc