PHPMailer 문자 인코딩 문제


190

PHPMailer를 사용하여 등록, 활성화를 보내려고합니다. 사용자에게 메일 등 :

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "name@mydomain.org";
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("mytest@gmail.com");
$mail->AddBCC('mytest2@mydomain.org', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}

$message라틴어 문자가 포함되어 있습니다. 불행히도 모든 웹 메일 (gmail, webmail.mydomain.org, emailaddress.domain.xx)은 다른 코딩을 사용하고 있습니다.

UTF-8 코딩을 사용하여 모든 메일 함에서 메일을 정확히 동일하게 표시하려면 어떻게해야합니까?

메일 헤더 너비를 변환하려고 mb_convert_encoding()했지만 운이 없습니다.


위의 CharSet의 대문자는 bovender에 의해 변경되었습니다.
Gogowitsch

답변:


476

$ message에 ISO-8859-1이 포함되어 있다고 100 % 확신한다면 David가 말한 것처럼 utf8_encode 를 사용할 수 있습니다 . 그렇지 않으면 $ message에 mb_detect_encodingmb_convert_encoding 을 사용 하십시오 .

또한

$mail -> charSet = "UTF-8"; 

다음으로 대체해야합니다.

$mail->CharSet = 'UTF-8';

그리고 배치 (애프터 클래스의 인스턴스 new). 속성은 대소 문자를 구분합니다! 목록 및 정확한 철자를 PHPMailer 문서를 참조하십시오 .

또한 PHPMailer의 기본 인코딩은 8bitUTF-8 데이터 에 문제가 될 수 있습니다. 이 문제를 해결하려면 다음을 수행하십시오.

$mail->Encoding = 'base64';

양지 'quoted-printable'아마 (심지어 어쩌면 이러한 경우에 너무 일 것을 'binary'). 자세한 내용은 RFC1341-콘텐츠 전송 인코딩 헤더 필드를 참조하십시오 .


35
글쎄, 나는 이것이 오래되어 미친 사람인지는 모르겠지만, $ mail-> Encoding = "base64"를 추가해야 나를 위해 일할 수있다
Andrew Revak

5
@AndrewRevak 당신은 하루를 저장했습니다! :)
carla

3
@AndrewRevak 좋은 물건! 그것이 그것을 해결 한 것입니다.
BernardA

mb_detect_encoding 및 mb_convert_encoding의 사용법이 좋을 것입니다.
BluE

26
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

줄이 $mail -> CharSet = "UTF-8";있어야하며 $mail = new PHPMailer();공백이 없어야합니다!

이 시도

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";

5
더 잘 읽을 수 있도록이 게시물을 업데이트했지만 op의 질문은 2 년 전에 이미 답변되었습니다. 그리고 그 대답은 이미 이것을 포함했습니다.
Dwza

5

파티에 늦어서 미안해 서버 구성에 따라 소문자 utf-8 문자를 엄격하게 지정 해야 할 수 있습니다. 그렇지 않으면 무시됩니다. 여기에서 솔루션을 검색하고 위의 답변 중 아무것도 도움이되지 않으면 이것을 시도하십시오.

$mail->CharSet = "UTF-8";

다음으로 교체해야합니다.

$mail->CharSet = "utf-8";



3

나는 & oacute를 받고 있었다 ; $ mail-> Subject / w PHPMailer에 있습니다.

나를 위해 완벽한 해결책은 다음과 같습니다.

// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';

$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);

도움이 되길 바랍니다.


1

위의 방법으로 작동하지 않고 여전히 메일은 다음과 같습니다 ª הודפסה ×•× ×©×œ.

$mail->addCustomHeader('Content-Type', 'text/plain;charset=utf-8');
$mail->Subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';;

0

@ $mail -> charSet = "UTF-8";

---이 줄은 아래에 있어야합니다

$mail = new PHPMailer(); line.

..


예, 맞습니다. 객체 인스턴스화 후에 배치해야합니다.


이것은 질문에 대한 답변을 제공하지 않습니다. 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 .
piet.t

이 문제에 대한 비판이나 설명 요청이 아닙니다. 정답은 다음과 같습니다. $ mail = new PHPMailer (); $ mail-> CharSet = 'UTF-8';
Nikos Kapetanakos

Zoian은 Holian의 답변에 대한 의견처럼 보이지 않습니다.
piet.t

charSet 속성을 사용하면 작동하지 않습니다. 올바른 것은 CharSet입니다. 사건은 다르다.
Nikos Kapetanakos 2016 년

그렇다면 왜 정답 대신에 오답을 인용합니까? 그러나 그 중 하나도 이미 존재하므로 무엇을 추가해야합니까?
piet.t

0

가장 간단한 방법은 CharSet을 UTF-8로 설정하는 것입니다.

$mail->CharSet = "UTF-8"

@NickZuber 편집으로 인해 정확한 라인이 있습니다. 원래의 질문에서 그렇게 정확하지는 않았습니다.
Mr Tsjolder

0

PHPMailer 클래스를 사용하여 이메일을 보낼 때 문자 인코딩 문제를 피하기 위해 다음 PHP 코드에서 볼 수 있듯이 "CharSet"매개 변수를 사용하여 UTF-8 문자 인코딩으로 보내도록 구성 할 수 있습니다.

$mail = new PHPMailer();
$mail->From = 'midireccion@email.com';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('emaildestino@email.com');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);


// Active condition utf-8
$mail->CharSet = 'UTF-8';


// Send mail
$mail->Send();

-5

$ mail-> charSet = "UTF-8"; ---이 줄은 $ mail = new PHPMailer () 아래에 있어야합니다. 선.

..

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.