프로그래밍/델파이

TIdMessage.GenerateHeader의 제목 처리 버그

채윤아빠 2009. 12. 22. 23:59
728x90
반응형


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;