2012-08-03 2 views
1

주말에 MTA (POSTFIX)가 갑자기 메시지 경계에 선을 긋기 시작했습니다. 우리는 multipart/alternative 메시지를 정의하고 헤더를 정의하는 몇 가지 PHP 템플릿을 가지고 있습니다. 다음은 금요일에 작동하는 PHP 메일러 형식입니다. 그런 다음 갑자기 월요일에 중지되었습니다. 당신이 줄 바꿈 꽤 꺼져 볼 수 있듯이POSTFIX/sendmail이 갑자기 추가 줄 바꿈을 추가했습니다.

Date: Fri, 3 Aug 2012 16:52:39 -0400 (EDT) 





--09127kjhd821 

Content-Type: text/plain; charset=UTF-8 

Content-Transfer-Encoding: quoted-printable 

원본 (작업을)

Date: Tue, 31 Jul 2012 12:36:45 -0400 (EDT) 



--09127kjhd821 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: quoted-printable 

:

$headers = "From: name <[email protected]>\r\n" . 
    "Reply-To: name <[email protected]>\r\n" . 
    "MIME-Version: 1.0\r\n" . 
    "Content-Type: multipart/alternative; boundary=\"09127kjhd821\""; 

$txt = "\r\n\r\n--09127kjhd821\r\n" . 
    "Content-Type: text/plain; charset=UTF-8\r\n" . 
    "Content-Transfer-Encoding: quoted-printable\r\n\r\n" . 
    "Text Message"; 

$html = "\r\n\r\n--09127kjhd821\r\n". 
    "Content-Type: text/html; charset=UTF-8\r\n" . 
    "Content-Transfer-Encoding: base64\r\n\r\n" . 
    chunk_split(base64_encode("HTML Message")); 

$body = $txt . $html . "\r\n\r\n--09127kjhd821--"; 

mail(
    "[email protected]", 
    "=?UTF-8?B?" . base64_encode("Subject") . "?=", 
    $body, 
    $headers 
); 

난 다음 브로큰 참조 깨진 것들에 원래 메일을 비교 각 \ r과 \ n에 대해 두 배로 늘었습니다. 아무 것도이 문제를 일으키는 내 지식으로 바뀌지 않았습니다.

어떤 제안이나 도움을 주시면 대단히 감사하겠습니다.

+0

처음에 php.ini 파일에서 sendmail_path을 변경하여 문제를 해결? – Sammaye

+0

여러 고객이 불평하고 있습니다. 키커는 우리 Gmail이 핫메일과 휴대 전화처럼 멋지게 표시하는 것 같습니다. 다른 gmail 클라이언트는 MIME 형식을 보게됩니다. 저는 고객의받은 편지함 중 하나를 사용하여 메시지를보고 해당 서버 관리자와 대화하여 스팸 필터 게시물이 메시지를 처리했는지 여부를 확인한 다음 다른 사람들로부터 불만 사항을 받기 시작했습니다. * EDIT * 또한 이메일 소스 파일 본문을 게시했지만 클라이언트 파싱 본문은 게시하지 않았습니다. – fyrye

답변

2

유일한 단점은 POSTFIX와 PHP에서 LF를 CRLF로 변환하여 CRLF가 메시지 본문에 경계와 헤더가 CRCRLF로 변환 될 때 정의되었을 때입니다. 그러나 메시지 소스를 저장하는 것은 16 진수 편집기에서 CRLF로만 표시됩니다.이 편집기는 내가 사용하거나 이메일로 클라이언트 다운로드 프로세스를 사용하는 변환 일 수 있습니다.

왜 이전에 제대로 작동했는지 갑자기 변경된 이유는 아직도 이해가 가지 않습니다. 내가 생각할 수있는 유일한 차이점은 아마도 CRLF에서 LF로 변경되었을 수있는 스크립트 줄 끝 (line-endings)으로 인해 변환이 발생하여 본문에 CRLF가 포함 된 전자 메일을 위반했기 때문일 수 있습니다.

내가 궁극적으로 이러한 메시지를 모두 볼 수 같은 메일 클라이언트의 동일한 버전을 사용 했습니까,

sendmail_path="/usr/bin/dos2unix|/usr/sbin/sendmail -t -i" 
+0

나는 실제로 문제를 결정했다. Google의 방화벽에는 메일 본문을 수정하고 올바르게 형식을 지정하는 이메일 필터가 있습니다. 위의 문제는 방화벽의 이메일 필터로 해결되었습니다. 전자 메일 필터 구독이 문제의 당일 만료되어 보내지는 모든 전자 메일의 형식이 잘못되었습니다. – fyrye