2010-08-18 4 views
0

CDO 개체를 사용하여 첨부 파일과 함께 메시지를 보내려고합니다. SMTP 서버를 사용할 수 있고 모든 정보가 올 바르면 메시지가 첨부 파일과 함께 올바르게 전송됩니다.CDO 메시지가 전송되지 않고 메시지의 첨부 파일을 삭제할 수 없습니다.

그러나 SMTP 서버가 잘못된 경우 (예상대로) 메시지가 전송되지 않지만 어딘가에 "어둡게"보입니다. 나는 다음을 사용하고있다 :

Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2 

인터넷을 통해 검색 한 결과이 옵션을 사용하면 60 초의 시간 초과가 발생합니다. 그러나 메시지에 첨부 된 파일은 사용할 수 없습니다.

내가 한 테스트는 첨부 된 파일과 잘못된 SMTP 서버를 사용하여 메시지를 보내는 것입니다. 그런 다음 몇 분 동안 기다렸다가 내가 첨부 한 파일을 삭제하려고합니다. 그러나, 나는 그것을 시도 할 때, 나는 허가 문제가있다. 보내는 전자 메일 프로그램을 죽일 때 파일을 삭제할 수 있습니다.

메시지를 보내지 않을 때 시간 제한을 구성하는 방법, 메시지가 전송되지 않을 때 파일을 어떻게 분리하는지 그리고 메시지가 전송 될 때까지 프로그램을 대기시키는 방법을 알고 싶습니다. (메시지를 보낸 다음 컴퓨터에서 첨부 된 파일을 지우려고하므로 메시지가 실제로 보내 졌는지 또는 시간 초과인지를 알아야합니다.

답변

1

CDO는 절망적으로 사용되지 않으므로 System.Net.Mail로 전환하는 것이 좋습니다. 특정 문제는 파일 잠금 문제와 비슷합니다. CDO의 버그와 같은 멍청이는 전자 메일 메시지 작성을위한 첨부 파일을 열지 만 SMTP 서버가 중단되면 파일을 닫지 못하게합니다.

이 버그는 .NET에서 COM 서버 (예 : CDO)를 처리하는 방법으로 인해 악화 될 수 있습니다. COM 개체는 가비지 수집기가 실행될 때까지 해제되지 않습니다. 어느 시간이 걸릴 수 있습니다, 특히 귀하의 프로그램은 이메일을 보내려고 시도 후 아무 것도 중요하지 않습니다. CDO 개체에서 Marshal.ReleaseComObject()를 호출하면이 문제를 해결할 수 있습니다. 프로그램에서 다른 CDO 인터페이스 참조가있을 때 작동하지 않는 경향이 있습니다. 이러한 참조는 숨겨져있는 경향이 있습니다. GC.Collect() + GC.WaitForPendingFinalizers()는 객체 참조를 무효화 한 후에 큰 망치입니다.

하지만 실제로는 System.Net.Mail을 사용하십시오.

+0

전자 메일을 보내거나 보낸 후 개체를 정리하기 때문에 문제가 가비지 수집기라고 생각하지 않기 때문에 System.Net.Mail을 사용하려고합니다. 도움 주셔서 감사합니다! – jpnavarini

관련 문제