2011-08-10 3 views
1

누구든지 도움을받을 수 있는지 궁금합니다.UTF-8로 메일 보내기

나는 3 개의 언어 (모든 내용이 같은 반복적 인 내용)로 일부 내용을 보내는 스크립트를 상속 받았지만, 수신 된 내용이 UTF-8 문제인 것으로 가정되어 내용이 깨졌습니다.

내가해야 할 일은 charset 부분을 utf-8로 변경하거나 7 비트 부분처럼 바꿀 필요가있는 부분입니까?

내가 (아직 테스트) 하나 UTF-8 참조 기본 인코딩을 참조 할 것 같다 여기 http://bitprison.net/php_mail_utf-8_subject_and_message 뭔가

있었다 삽입 위치를 볼 수 있습니다,하지만 난 여기에 필요한 경우 확실하지 않다?

감사

// Contruct message body. 
       $body = ""; 

       // Add message for non-mime clients. 
       $body .= "This is a multi-part message in MIME format.\n"; 

       // Add text body. 
       $body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $textContent; 

       // Add HTML body. 
       $body .= "\n--$boundary\nContent-Type: text/html; charset=ISO-8859-1; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $htmlContent; 

       mail($row["email"], "Update Your ArtsDB Listing", $body, $headers); 

업데이트 된 코드이 허용됩니다? 나는 여기에 다른 예를 들어 보았다.

$body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $textContent; 

      // Add HTML body. 
      $body .= "\n--$boundary\nContent-Type: text/html; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $htmlContent; 
+1

Swift Mailer, PEAR Mail ... 당신은이 셋 인코딩을 사용 보인다보다

E 메일은 그 이유 조만간 당신은 타사 라이브러리를 사용하게, 단단하다. –

답변

4

처럼 좋은 lib 디렉토리를 사용할 수 있지만 있다? 그것은 중요한 비트입니다. Content-Transfer-Encoding: 7bit에 따르면 7 비트 인코딩이므로 원시 UTF-8이 될 수 없습니다. 그러나 전자 메일에 사용되는 일반적인 7 비트 인코딩은 사용하지 않습니다. 그렇지 않으면 Content-Transfer-Encoding: quoted-printable 헤더가 있습니다.

요약하면, 다음을 수행해야합니다

  1. 유효한 UTF-8이 포함 된 소스 문자열 되세요.
  2. 전송 인코딩을 선택하십시오 (예 : quoted_printable_encode()).
  3. 선택한 전송 인코딩을 알려주는 헤더를 추가하십시오.

원시 UTF-8을있는 그대로 보내고 Content-Transfer-Encoding: 8bit을 설정할 수도 있지만 권장하지 않습니다. 매우 긴 라인을 보내면 SMTP 표준을 위반할 위험이 있습니다. 또한 어떤 유산 프로그램이 진행될 지 전혀 알지 못합니다. - 하나를 사용하려고 PHP Mailer

+0

아주 명확하지 않은 모든 맞춤형 CMS를 상속 받았기 때문에 모든 종류의 파일과 라이브러리에 연결되어있는 것 같습니다. 모든 알 수없는 부분을 해독하려고 시도한 것입니다. 내가 처음부터 글을 쓰고 있었다면 나는 더 행복했을 것이다. – mro

+0

7 비트를 8 비트 인코딩으로 변경했습니다. (상단의 편집에서) – mro

+0

이것이 분해 검사와 관련이 있다는 것을 이해합니다. 그러나 현재는 일반적으로 어제 수정이 필요합니다. – mro

1

콘텐츠 전송 인코딩 : 7 비트

이것은 말도 안돼 - 7 비트 데이터와 8 + 비트 표현 사이에 직접적인 매핑이 없습니다. MIME 헤더를 변경하여 사용중인 인코딩을 명시해야합니다.

SMTP의 경우 전송 인코딩은 7 비트 ASCII 문자 집합이어야합니다. utf8 데이터를 변경하려면 이것을 인코딩해야합니다. 일반적인 인코딩은 base64와 quoted printable입니다 (PHP는 둘 다 인코딩 및 디코딩 fns를 제공합니다).

이유는 바로 $textContent 변수를 무엇을 ... 당신은 메시지 부분이 UTF-8, 괜찮 사용하는 메일 리더에게 Content-Type: text/plain; charset=UTF-8를 사용 phpmailer 또는 swiftmailer

+0

안녕하세요, 저는 스크립트를 통해 자신의 길을 고르고 있습니다. (이 문제는 언어 숯불이 표시되지 않았습니다.) 너무 많이 화를 내지 않으려 고해서 문자 세트를 변경할 수 있기를 바랍니다. – mro

+0

이것은 여기에서 사용한 예입니다. yo, whassup?'; $ headers = "보낸 사람 : [email protected] \ r \ n" 'X-Mailer : PHP /'. phpversion(). "\ r \ n". "MIME 버전 : 1.0 \ r \ n" "Content-Type : text/html; charset = utf-8 \ r \ n" "콘텐츠 전송 인코딩 : 8 비트 \ r \ n \ r \ n"; // 메일 보내기 ($ to, $ 제목, $ 메시지, $ 헤더); ?> – mro