UTF-8 이메일을 보내는 방법은 무엇입니까?


82

이메일을 보낼 때 영어 이외의 문자가 이메일에 표시되지 않습니다. 아래와 같이 표시됩니다.

ä½ ™ 生ä»ä»

실제로 이것이 원인을 알 수 있습니까? 스크립트에 Content-type과 charset을 추가하려고했지만 여전히 동일하게 표시됩니다.

나는 사용했다 Mail::Factory("mail");


2
당신은 무엇을 사용합니까? 네이티브 mail()또는 Zend_Mail또는 PHPMailer? Factory 메서드의 코드가 필요합니다!
Wesley van Opdorp 2011 년

2
추가적으로 대상 이메일 클라이언트를 관리해야합니다. 이메일 클라이언트에서 이메일을 올바르게 볼 수 있다고해서 고객이 올바른 메일을 볼 수 있다는 의미는 아닙니다. 결국 나는 항상 utf-8 charset 헤더로 html-email을 빌드합니다. 이렇게하면 대부분의 이메일 클라이언트가 콘텐츠를 올바르게 표시합니다.
마르코

@FlyBy : 네, 정확히 제가하고자하는 것은 utf-8 문자셋으로 내용을 표시하지만 여전히 이메일을 올바르게 볼 수 없습니다.
deepWebMie

Content-Type 및 charset은이 작업을 수행하기 위해 정확히 필요한 것이지만 더 많은 정보를 제공해야합니다. 코드를 보여 주시겠습니까? 및 / 또는 결과 메시지의 소스? 데이터가 올바르게 utf8로 인코딩 되었습니까?
tripleee

3
다음은 내 예제 코드입니다. $mail = Mail::factory("mail"); $to = "me@abc.com"; $body = "好信"; $headers = array("Content-type =>"text/plain: charset=\"UTF-8","From" => "abc@abc.com","To" => "me@abc.com","Subject" => "Test Send Chinese mail-好信"); $mail->send($to, $headers, $body); 이것이 맞습니까? 내가 기대하는 바를 보여주지 않습니다. 본문, 머리글 또는 제목에 중국어 단어를 표시해야합니다.
deepWebMie

답변:


116

"Content-Type : text / html; charset = UTF-8"헤더를 메시지 본문에 추가 할 수 있습니다.

$headers = "Content-Type: text/html; charset=UTF-8";

네이티브 mail()함수 를 사용하는 경우 $ headers 배열이 4 번째 매개 변수가됩니다. mail($to, $subject, $message, $headers)

PEAR Mail :: factory ()를 사용하는 경우 코드는 다음과 같습니다.

$smtp = Mail::factory('smtp', $params);

$mail = $smtp->send($to, $headers, $body);

여기 내 코드가 있습니다. $ mail = Mail :: factory ( "mail"); $ to = "me@abc.com"; $ body = "好 信"; $ headers = array ( "Content-type =>"text / plain : charset = \ "UTF-8", "From"=> "abc@abc.com", "To"=> "me@abc.com" , "Subject"=> "테스트 중국어 메일 보내기-好 信"); $ mail-> send ($ to, $ headers, $ body) 맞습니까? 내가 기대하는 바를 보여주지 않습니다. 본문, 머리글 또는 제목에 중국어 단어를 표시해야합니다.
deepWebMie

1
7 비트 전송 인코딩을 사용하는 이메일 도구는 무엇입니까?
Grodriguez

3
PHP의 네 번째 매개 변수 mail()는 배열이 아닌 문자열입니다 !!
Vladimir Panteleev

2
charset=UTF-8주위에 따옴표없이 작성하십시오 UTF-8!
Mel_T 2015

4
text/htmlHTML 형식으로 이메일을 보내는 경우 에만 사용 하십시오. 일반 텍스트 이메일의 경우 text/plain.
Stewart

34

모든 메일 시스템 (예 : http://10minutemail.com )이 UTF-8 메일을 읽을 수있는 것은 아니기 때문에 다소 지정된 문자 집합 (ISO-8859-2 )을 사용하고 있습니다. 필요한 경우 :

function utf8_to_latin2($str)
{
    return iconv ( 'utf-8', 'ISO-8859-2' , $str );
}
function my_mail($to,$s,$text,$form, $reply)
    {
        mail($to,utf8_to_latin2($s),utf8_to_latin2($text),
        "From: $form\r\n".
        "Reply-To: $reply\r\n".
        "X-Mailer: PHP/" . phpversion());
    }

애플 장치가 이전 버전을 잘 읽을 수 없었기 때문에 다른 메일러 기능을 만들었습니다.

function utf8mail($to,$s,$body,$from_name="x",$from_a = "info@x.com", $reply="info@x.com")
{
    $s= "=?utf-8?b?".base64_encode($s)."?=";
    $headers = "MIME-Version: 1.0\r\n";
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n";
    $headers.= "Reply-To: $reply\r\n";  
    $headers.= "X-Mailer: PHP/" . phpversion();
    mail($to, $s, $body, $headers);
}

2
그리고 ISO-8859-2로 표현할 수없는 콘텐츠를 보내려고한다면?!
deceze

4
$headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";이 라인은 내 문제를 해결했습니다. 감사합니다!
Julia

1
일반 텍스트 우편물의 가독성을 위해 인용 된 인쇄 가능한 인코딩을 고려하십시오. 다음과 같이 간단합니다.'=?utf-8?Q?' . quoted_printable_encode($string) . '?='
Quoting Eddie

@Julia 감사합니다, 저도.
fdrv

참조 및 숨은 참조는 어떻습니까?
Toskan 2017

1

그렇지 않으면 HTML, 다음 UTF-8사용하지 않는 것이 좋습니다. koi8-r그리고 windows-1251에만 문제없이. 따라서 html 메일을 사용하십시오.

$headers['Content-Type']='text/html; charset=UTF-8';
$body='<html><head><meta charset="UTF-8"><title>ESP Notufy - ESP Сообщения</title></head><body>'.$text.'</body></html>';


$mail_object=& Mail::factory('smtp',
    array ('host' => $host,
        'auth' => true,
        'username' => $username,
        'password' => $password));
$mail_object->send($recipents, $headers, $body);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.