PHPMailer karakter kodlama sorunları


190

Kayıt, aktivasyon göndermek için PHPMailer kullanmaya çalışıyorum. vb kullanıcılara posta:

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

$messageLatin karakterler içeriyor. Ne yazık ki tüm web postaları (gmail, webmail.alanadim.org, emailaddress.domain.xx) farklı bir kodlama kullanıyor.

Postalarımı tüm posta kutularında tamamen aynı göstermek için UTF-8 kodlamasını kullanmaya nasıl zorlayabilirim?

Posta başlığı genişliğini dönüştürmeye çalıştım mb_convert_encoding(), ama şanssızım.


Yukarıdaki CharSet'in büyük harf kullanımı bovender tarafından değiştirildi.
— 16'de Gogowitsch

Yanıtlar:


476

$ Mesajının ISO-8859-1 içerdiğinden% 100 eminseniz David'in dediği gibi utf8_encode'u kullanabilirsiniz . Aksi takdirde $ mesajında mb_detect_encoding ve mb_convert_encoding kullanın .

Ayrıca şunu da unutmayın

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

Şununla değiştirilmelidir:

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

Ve yerleştirilir sonra (sonra sınıfın örnekleme new). Özellikler büyük / küçük harfe duyarlıdır! Liste ve tam yazım için PHPMailer belgesine bakın .

Ayrıca PHPMailer'ın varsayılan kodlaması 8bitUTF-8 verileriyle sorun yaratabilir. Bunu düzeltmek için şunları yapabilirsiniz:

$mail->Encoding = 'base64';

'quoted-printable'Bu durumlarda (ve hatta belki de 'binary') muhtemelen işe yarayacağını unutmayın . Daha fazla ayrıntı için RFC1341 - İçerik Aktarımı Kodlama Başlık Alanı'nı okuyabilirsiniz .


35
Herkes bu deli eski gibi umursamıyor bilmiyorum ama, benim için işe almak için $ mail-> Encoding = "base64" eklemek zorunda
— Andrew Revak

5
@AndrewRevak Günü kurtardın! :)
— carla

3
@AndrewRevak Harika şeyler! Bunu çözen şey bu.
— BernardA

Mb_detect_encoding ve mb_convert_encoding kullanımı hoş olurdu.
— BluE

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

satır $mail -> CharSet = "UTF-8";sonra $mail = new PHPMailer();ve boşluk olmadan olmalıdır !

bunu dene

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

5
Bu yazıyı daha iyi okumak için güncelledim, ancak op'un sorusu 2 yıl önce cevaplandı! Ve bu kabul edilen cevap bunu zaten içeriyordu.
— Dwza

5

Partiye geç kaldığım için üzgünüm. Sunucu yapılandırmanıza bağlı olarak, karakteri utf-8 küçük harfleriyle kesinlikle belirtmeniz gerekebilir , aksi takdirde yok sayılır. Sonuç olarak, çözüm aramaya başlarsanız ve yukarıdaki yanıtların hiçbiri yardımcı olmazsa bunu deneyin:

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

aşağıdakilerle değiştirilmelidir:

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


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

3

& Oacute alıyordum ; $ mail-> Subject / w PHPMailer'da.

Yani benim için tam çözüm:

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

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

Umarım yardımcı olur.


1

Yukarıdakilerin hiçbiri işe yaramadığında ve hala postalar aşağıdaki gibi görünüyorsa ª הודפסה ×•× ×©×œ:

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

0

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

--- bu çizgi altında olmalı

$mail = new PHPMailer(); line.

pff ..


Evet bu doğru. Nesne somutlaştırılmasından sonra yerleştirmeniz gerekir.


Bu soruya bir cevap vermez. Bir yazarın eleştirisini yapmak veya açıklama istemek için yazılarının altına bir yorum bırakın - her zaman kendi yayınlarınıza yorum yapabilirsiniz ve yeterli bir üne sahip olduğunuzda herhangi bir yazı hakkında yorum yapabilirsiniz .
— piet.t

Bu konu için bir eleştiri veya açıklama talebi değil. Doğru cevap: $ mail = new PHPMailer (); $ mail-> CharSet = 'UTF-8';
— Nikos Kapetanakos

Zooo bana Holian'ın cevabına bir yorum gibi görünüyor çünkü ona hiçbir şey eklemiyor.
— piet.t

charSet özelliğini kullanırsanız çalışmaz. Doğru olan CharSet. Durum farklı kılıyor.
— Nikos Kapetanakos

Peki, neden doğru cevabı vermek yerine yanlış cevabı veriyorsunuz? Ama bu zaten orada, o zaman ne eklemelisin?
— piet.t

0

Size yardımcı olacak en basit yol CharSet'i UTF-8 olarak ayarlamaktır

$mail->CharSet = "UTF-8"

@NickZuber Kesin çizgi düzenlemeler nedeniyle orada. Orijinal soruda tam olarak bu değildi ...
— Bay Tsjolder

0

PHPMailer sınıfını kullanarak e-posta göndermede karakter kodlaması sorunlarından kaçınmak için, aşağıdaki Php kodunda da görebileceğimiz gibi, onu "CharSet" parametresini kullanarak UTF-8 karakter kodlaması ile gönderecek şekilde yapılandırabiliriz:

$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"; --- bu satır $ mail = new PHPMailer () altında olmalıdır; hat.

pff ..

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.