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     = "[email protected]";
$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("[email protected]");
$mail->AddBCC('[email protected]', '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.

Ion
sumber
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 .

AlexV
sumber
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";
pengguna2354947
sumber
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";
ay
sumber
5

Saya bekerja sendiri dengan cara ini

  $mail->FromName = utf8_decode($_POST['name']);

http://php.net/manual/en/function.utf8-decode.php

yorkfx
sumber
Saya sendiri tidak punya POST, hanya string Prancis biasa yang ditulis dalam file yang dikodekan utf-8, dan ini berfungsi seperti mantra, terima kasih!
toni07
3
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";
ali ebrahimi
sumber
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.

biojazzard
sumber
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) . '?=';;
Ohad Cohen
sumber
0

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

--- baris ini harus di bawah

$mail = new PHPMailer(); line.

pff ..


Ya itu benar. Anda harus meletakkannya setelah objek objek.

Nikos Kapetanakos
sumber
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"
Trung Bui
sumber
@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 = '[email protected]';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('[email protected]');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);


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


// Send mail
$mail->Send();
Mohammed Alhfian
sumber
-5

$ mail -> charSet = "UTF-8"; --- baris ini harus di bawah $ mail = PHPMailer baru (); baris.

pff ..


sumber