프로그래밍/델파이

TIdMessage.GenerateHeader의 제목 처리 버그

채윤아빠 2009. 12. 22. 23:59


Indy를 이용하여 메일 발송 프로그램을 만들어서 사용중이었습니다.
그런데, 특정 메일은 HTML 내용이 제대로 보이지 않고, 태그가 펼쳐져 보이는 것이었습니다.

원인을 분석해보니, SMTP서버로 메일을 보낼 때, TIdMessage에서 메일 헤더를 생성합니다. 그러나 이 부분에서 제목에 한글이 있는 경우 인코딩을 하는데, 제목이 긴 경우 특정 길이(75) 이하로 잘라서 헤더를 생성해주게끔 되어 있습니다.

문제는 헤더를 생성하는 부분에서 제목이 특정 길이(75) 이상인 경우 이미 올바로 헤더를 모두 만들어져 있는데, 그 값을 GenerateHeader에서 처리하는 부분에서 한번 더 불필요하게 처리를 하면서, 헤더 부분이 깨져서 메일 전체가 잘못되는 현상이 발생하게 됩니다.

이를 해결하기 위해서, 델파이7에 기본으로 설치되어 있는 Indy-9.0.10을 제거하고, 새로 Indy-9.0.18을 다운받아서 설치하고, TIdMessage 클래스에서 다음 부분을 직접 수정하여 인디 패키지를 재빌드하면, 제목이 특정 길이(75) 이상으로 긴경우 인코딩에 문제가 생겨서 메일이 깨지는 현상이 없어집니다.

   // added 2001-Oct-29 Don Siders insures use of headers received but not used in properties
  if (FHeaders.Count > 0) then
  begin
    Result.Assign(FHeaders);
    Result.FoldLines := FHeaders.FoldLines;     // 요 두라인을 추가했습니다.
    Result.FoldLength := FHeaders.FoldLength; // 
  end;


728x90
반응형