컴퓨터과학/Microsoft 2013.09.24 17:37

닷넷에서 메일 전송시 첨부파일 명이 깨지는 현상이 간혹 발생한다.

이유는 대충 아래와 같은데 (더 있으면 댓글로 알려주세요...)

1. 파일명이 수신 메일서버가 지원하지 않는 문자셋으로 인코딩 된 경우

2. 파일명이 non-ASCII 문자를 포함하면서 파일명을 UTF-8로 인코딩한 길이가 42바이트 이상인 경우


1의 경우는 문자셋을 지정하여 보내면 되는데...참 난감한 것이..

수신자의 메일서버가 어떤 문자셋을 지원하는지 알수가 없는 것이다.


그러나 일반적으로 첨부파일명을 EUC-KR로 인코딩하면 한글 첨부파일을 주고받는데에는 무리가 없다.

attatchment.NameEncoding = System.Text.Encoding.GetEncoding("euc-kr"); // euc-kr 인코딩


참고로 아웃룩으로 발송시 CP949로 인코딩 되는 것을 확인하였는데..

이는 발송자의 운영체제(윈도우)에서 사용하는 기본 문자셋을 이용하여 인코딩하는 것으로 보인다. 


attatchment.NameEncoding = System.Text.Encoding.Default; // 현재 운영체제의 기본 인코딩

attatchment.NameEncoding = System.Text.Encoding.GetEncoding(949); // CP949 인코딩


2의 경우는 좀 답답하다.

.NET Framework 4.0의 버그인데 파일명이 이런식으로 보이는 경우다.

보여지는 파일명

=?ks_c_5601-1987?Q?130917_=C0=CC=BD=C3=BD= BA=C5=DB?= =?ks_c_5601-1987?Q?.xls?=


메일에서의 소스

Content-Type: application/vnd.ms-excel;

 name="=?utf-8?B?PT9rc19jXzU2MDEtMTk4Nz9RPzEzMDkxN189QzA9Q0M9QkQ9QzM9QkQ9?=\

\

 =?utf-8?B?QkE9QzU9REI/PQ0KID0/a3NfY181NjAxLTE5ODc/UT8ueGxzPz0=?="

Content-Transfer-Encoding: base64

Content-Disposition: attachment


파일명의 인코딩이 두번 된 것인데 위의 경우는 CP949로 인코딩 된 후 그게 다시 한 번 UTF-8로 인코딩 된 경우였다.


2번 타이틀에 쓴것 처럼 파일명에 non-ASCII 문자가 포함하고 있으면서 파일명을 UTF-8로 인코딩한 길이가 42바이트가 넘어가면 UTF-8로 한번 더 인코딩하는 치명적인 버그다.

http://support.microsoft.com/kb/2402064/en-us


아래 참조에 공식 패치가 있으니 다운받아 설치해야한다.

https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=31723


클라이언트에 해당 기능이 포함되어 이미 배포되었다면 추후 패치시 굉장히 곤란한 경우로...-_-

.NET의 메일 발송을 이용할 것이라면 가능하면 .NET 3.5로 개발하는 것을 추천한다.





posted by 연식킴
컴퓨터과학/Microsoft 2013.08.14 16:54

System.Net.Mail을 통한 메일 전송은 굉장히 간단하고 사용하기 편리하게 구현되어있다.

하지만 .Net Framework 3.5까지는 조금 문제가 있었는데..

System.Net.Mail.SmtpClient 객체의 Send() 메서드가 SMTP 서버에서 컨넥션을 Close()하지 않아 대량 메일 발송시 전송이 되지 않는 문제가 발생되었다.

.Net 4.에서는 해당 문제가 해결이 되었는데 Send() 후 SmtpClient객체의 Dispose() 메서드를 호출해주면 된다.


이 정보는 아래 링크의 포스트에서 얻게 되었으며,

.Net 3.5에서는 아래 링크에 있는 Socket을 이용한 메일 전송 코드가 있으니 참조하면 되겠다.


http://codesnipets.wordpress.com/2010/04/21/smtp-email-using-sockets-system-web-mail/


posted by 연식킴