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.