Masalah penyandian karakter PHPMailer


190

Saya mencoba menggunakan PHPMailer untuk mengirim pendaftaran, aktivasi. dll surat kepada pengguna:

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;  
}

The $messageberisi karakter latin. Sayangnya semua webmail (gmail, webmail.mydomain.org, emailaddress.domain.xx) menggunakan kode yang berbeda.

Bagaimana saya bisa memaksa menggunakan pengkodean UTF-8 untuk menampilkan email saya persis sama di semua kotak surat?

Saya mencoba mengkonversi lebar header surat mb_convert_encoding(), tetapi tidak berhasil.


Kapitalisasi CharSet di atas diubah oleh bovender.
Gogowitsch

Jawaban:


476

Jika Anda 100% yakin $ message mengandung ISO-8859-1 Anda dapat menggunakan utf8_encode seperti yang dikatakan David. Kalau tidak, gunakan mb_detect_encoding dan mb_convert_encoding pada $ message.

Perhatikan juga itu

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

Harus diganti dengan:

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

Dan ditempatkan setelah instantiasi kelas (setelah new). Properti bersifat case sensitif! Lihat dokumen PHPMailer daftar & ejaan yang tepat.

Pengkodean standar PHPMailer juga 8bitdapat menjadi masalah dengan data UTF-8. Untuk memperbaiki ini, Anda dapat melakukan:

$mail->Encoding = 'base64';

Perhatikan bahwa 'quoted-printable'mungkin akan bekerja juga dalam kasus-kasus ini (dan bahkan mungkin 'binary'). Untuk lebih jelasnya Anda bisa membaca RFC1341 - Field Header Penyandian-Transfer-Konten .


35
Yah saya tidak tahu apakah ada yang peduli karena ini gila tua tapi, saya harus menambahkan $ mail-> Encoding = "base64" untuk membuat ini bekerja untuk saya
Andrew Revak

5
@AndrewRevak Anda telah menyelamatkan hari! :)
carla

3
@AndrewRevak Bagus sekali! Itu hal yang menyelesaikannya.
BernardA

Penggunaan mb_detect_encoding dan mb_convert_encoding akan menyenangkan.
BluE

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

baris $mail -> CharSet = "UTF-8";harus setelah $mail = new PHPMailer();dan tanpa spasi!

coba ini

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

5
Saya memperbarui posting ini untuk membaca lebih baik, tetapi pertanyaan op sudah dijawab 2 tahun sebelumnya! Dan jawaban yang diterima sudah termasuk yang ini.
Dwza

5

Maaf karena terlambat datang ke pesta. Bergantung pada konfigurasi server Anda, Anda mungkin harus menentukan karakter secara ketat dengan huruf kecil utf-8, jika tidak maka akan diabaikan. Coba ini jika Anda berakhir di sini mencari solusi dan tidak ada jawaban di atas yang membantu:

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

harus diganti dengan:

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


3
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";

3

Saya mendapatkan & oacute; dalam $ mail-> Subjek / w PHPMailer.

Jadi bagi saya solusi lengkapnya adalah:

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

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

Semoga ini bisa membantu.


1

Ketika bukan dari yang di atas berfungsi, dan email masih terlihat seperti ª הודפסה ×•× ×©×œ:

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

0

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

--- baris ini harus di bawah

$mail = new PHPMailer(); line.

pff ..


Ya itu benar. Anda harus meletakkannya setelah objek objek.


Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari seorang penulis, tinggalkan komentar di bawah posting mereka - Anda selalu dapat mengomentari posting Anda sendiri, dan begitu Anda memiliki reputasi yang cukup, Anda akan dapat mengomentari setiap posting .
piet.t

Itu bukan permintaan kritik atau klarifikasi untuk masalah ini. Jawaban yang benar adalah: $ mail = PHPMailer baru (); $ mail-> CharSet = 'UTF-8';
Nikos Kapetanakos

Zo saya sepertinya komentar pada jawaban Holian karena tidak menambahkan apa pun untuk itu.
piet.t

jika Anda menggunakan properti charSet tidak akan berfungsi. Yang benar adalah CharSet. Kasusnya membuat perbedaan.
Nikos Kapetanakos

Nah, lalu mengapa Anda mengutip jawaban yang salah daripada memberikan yang benar? Tapi yang itu sudah ada juga, jadi apa yang harus Anda tambahkan?
piet.t

0

Cara paling sederhana dan akan membantu Anda adalah dengan mengatur CharSet ke UTF-8

$mail->CharSet = "UTF-8"

@NickZuber Baris persis ada karena pengeditan. Itu tidak tepat dalam pertanyaan aslinya ...
Tuan Tsjolder

0

Untuk menghindari masalah pengkodean karakter dalam mengirim email menggunakan kelas PHPMailer kita dapat mengkonfigurasinya untuk mengirimnya dengan pengkodean karakter UTF-8 menggunakan parameter "CharSet", seperti yang dapat kita lihat dalam kode Php berikut:

$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"; --- baris ini harus di bawah $ mail = PHPMailer baru (); baris.

pff ..

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.