2009-09-23 4 views
4

아무에게도 문제가 있습니까? 그렇다면 어떻게 주위를 피합니까? 우리는 산발적 인 타임 아웃 문제를 겪고 있으며 이것이 비난 받고 있습니다..NET System.Net.Mail.SmtpClient 클래스가 SMTP 트랜잭션에 QUIT 명령을 실행하지 않습니다.

같은 문제는 여기뿐만 아니라보고됩니다

http://www.vbforums.com/showthread.php?p=3609268

+3

또한뿐만 아니라 그것은 사기입니다,하지만 난이 제 3 자 이메일 제품군을 사용하여 주요 이슈를 경험 한, 전염병처럼 Safabyte 이메일 구성 요소를 방지 말씀 드리고 있습니다. –

+0

더 새로운 .NET 프레임 워크에서 수정 되었습니까? – jocull

+1

@jocull은 4.0에서 수정 된 것처럼 보입니다. –

답변

10

이 특정 문제를 해결하는 쉬운 방법이 있는지 모르겠지만, 하나의 옵션을 다운로드하는 것입니다 Mono의 SmtpClient 소스이며이를 사용하십시오 (필요한 경우 수정). 그들의 버전은 확실히 QUIT 명령을 보냅니다.

하나의 프로젝트에서 많은 수의 이메일을 보내야했습니다. .NET의 구현은 너무 비효율적이어서 동일한 SMTP 세션에서 여러 개의 고유 한 전자 메일을 보낼 방법이 없습니다. Mono의 구현을 사용하여 QUIT 명령을 보내고 연결을 닫을 때 수동으로 제어 할 수 있도록 수정했습니다. 우리가이 프로젝트를 위해 합쳐야했던 총 25 개의 관련 Mono 클래스가있었습니다 (주로 복사 + 붙여 넣기 및 네임 스페이스 편집).

조금 극단적 인 것처럼 보일 수 있지만 문제를 해결할 방법이 없다면 최상의 타사 대안 일 수 있습니다. 무료이며 많은 작업이 아니며 해당 API는 과 거의 같습니다.과 동일합니다. 원주민 SmtpClient.

+0

정보를 제공해 주셔서 감사합니다. –

+3

Mono 라이센스 (http://www.mono-project.com/Licensing)를 준수하는지 확인하십시오. 소스 코드는 기본적으로 당신이 모노의 일부를 사용하고있는 문서 어딘가에 말할 필요하고 또한 문서의 라이센스 텍스트를 인용해야 함을 의미 MIT X11 라이센스, 받고있다. –

+0

어떻게하면이 일을 할 수 있습니까? –

4

응용 프로그램이 IIS가있는 컴퓨터에서 실행되고 있습니까? 그렇다면, 당신이 활용할 수있는 내장 된 SMTP 서비스 같은 당신의 SMTP 클라이언트의 전달 방법을 설정하여 : 나는 일부 응용 프로그램이 사용하고, 그리고 그것을 믿을만한이다

var client = new SmtpClient 
{ 
    DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis 
}; 

.

+0

우리는 다른 서버에서 SMTP를 사용해야합니다. –

+0

SMTP 서비스는 릴레이 에이전트 전용이며 메일은 원하는 SMTP 서버로 전달됩니다. – mookid8000

+0

즉, 로컬 SMTP 서버를 올바르게 구성하고 유지 관리해야합니까? .NET 4.0의 RTM에서 –

4

.Net 4.에서 해결되었습니다. IDispose를 구현했으며 QUIT 명령을 전송하고 리소스를 해제합니다.

은 MSDN에 관련 문서의 복사본입니다 :

려면 SmtpClient 클래스는 더의 Finalize 방법이 없으므로 응용 프로그램이 폐기에 명시 적으로 무료 최대 자원을 호출해야합니다. Dispose 메서드 은 호스트 속성에 지정된 SMTP 서버에 연결된 모든 연결을 반복하고 은 QUIT 메시지를 보내고 은 TCP 연결을 정상적으로 끝냅니다. 또한 Dispose 메서드는 소켓 에 사용되는 관리되지 않는 리소스를 해제하고 선택적으로 관리되는 리소스를 삭제합니다.

SmtpClient를 사용하여 을 마쳤 으면 종료하십시오. Dispose 메서드는 SmtpClient를 사용할 수없는 상태로 둡니다. Dispose를 호출 한 후에 SmtpClient에 대한 참조를 모두 해제해야 가비지 수집 자 이 SmtpClient가 사용중인 메모리를 다시 확보 할 수 있습니다.

+3

-1려면 SmtpClient 메일 링에 대한 3~4메가바이트의 너무 사용하여 .NET 버전 4.0의 RTM보다 큰 첨부 파일을 보낼 수 없습니다 수있는 해결책이 아니다! –

+0

알려진 버그이며 향후에 수정 될 예정입니다. 참조 : http://connect.microsoft.com/VisualStudio/feedback/details/544562/cannot-send-e-mails-with-large-attachments-system-net-mail-smtpclient-system-net-mail-mailmessage –

+0

이제이 문제에 대한 공개 패치를 사용할 수 있습니다. 당신은 여기에서 찾을 수 있습니다 https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30226 –

0

문제를 해결하기 위해 타사 제품을 찾은 것 같습니다.모노 솔루션은 흥미로운 것으로 들리 겠지만, 나는 몇 달러를 소비하고 상용 솔루션을 얻고 싶습니다.

+0

이 코멘트가 아닌 대답 –

+1

아니해야한다, 그것은 난 방법에 대한 답이다 한계를 극복하려고합니다. –

관련 문제