2009-01-15 23 views
12

PHP'den HTML kodlu bir e-posta göndermeye çalıştığımda, konu satırı "Here's the information you requested" gibi özel karakterleri içeriyorsa, PHP "Here's the information you requested."PHP Mail Kodları Konu Satırı

değerini okumak için kodlar. Bunu nasıl düzeltirim?


PHP postası kullanılarak kodun nasıl göründüğü aşağıda açıklanmıştır():

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

$headers .= 'To: ' . $mod_params['name'] . '<' . $mod_params['email'] . '>' . "\r\n"; 

$headers .= 'From: <[email protected]>' . "\r\n"; 

$email_to = $mod_params['email']; 

$email_sub = "Here's the Information You Requested"; 

$body = html_entity_decode("<html><body>" . $email_html_body . "</body></html>"); 

mail($email_to,$email_sub,$body,$headers); 

Bu, SugarPHPMailer sınıfı üzerinden çalıştırmayla aynı hatayı verir.

cevap

-1

Sizin için HTML postası oluşturma ve kodlamanın tüm karmaşıklıklarını ele alan SwiftMailer veya başka bir kitaplık kullanmayı deneyin.

+0

Bunu SugarCrm içinde yapıyorum ve bunları göndermek için SugarCRM'in SugarPHPMailer sınıfını kullanmaya çalışıyoruz. Patron SugarCRM'nin işlevlerini kullanmak istiyor. – ericwindham

0

Konu satırını html_entity_decode()'dan çalıştırmayı deneyin, konu satırında bazı öğelerin varmış gibi görünebilir.

+0

Bunu zaten denedim. Yine de teşekkürler. – ericwindham

5

dize gerçekten göndermeden önce kodlanmış değerleri içermiyorsa, this bakmak:

+0

Her ikisi de boşuna çalıştı. Bunu daha önce hiç görmedim. Cevabın için teşekkürler. – ericwindham

+0

Diğer referansları ekle –

-1

Sık sık kod satırını göndermek, daha hızlı bir şekilde daha iyi yanıt vermenizi sağlayacaktır. Bu eylem gerçekleşmeden önce metni bir yere kodlama olasılığınız yüksektir. Önceden önerildiği gibi, bu eylemi bulabilir ve düzeltebilir ya da e-postayı göndermeden önce konu satırının kodunu çözebilirsiniz.

+0

Göndermeden önce kodu çözmeyi denedim. Aynı e-postayı SugarPHPMailer sınıfı yerine php mail() işlevinden göndermeyi de denedim. SugarCrm'e özgü değil. Aynı şey mail() ile gerçekleşir. – ericwindham

+0

Kod göndermeniz gerekiyor, o zaman göründü. – Sampson

6

Üzerinde çalıştığım bir Wordpress eklentisinde de benzer bir sorun yaşadım ve beynimi buraya ve diğer çeşitli Google arama sonuçlarından farklı önerileri denemeye ayırdım. Sonunda durumumda çalışan bir çözüm buldum, böylece paylaşacağım. İlk başta çalıştığım Paul'un çözüm olduğunu ve işe yaramadığını söyleyeceğim, ancak sebebin çözümü “kısaltmaya” çalışmam oldu. Benim durumumda sadece html_entity_decode() çağrısı işe yaramadı. Niye ya? Eğer PHP dokümanı daha yakından okursaydım, açık olurdu. Sorunum tek bir alıntıda kodlama yapmaktı ve html_entity_decode() için varsayılan değer, tek tırnakları tek başına bırakan 'ENT_COMPAT'tır. Çözüm tüm parametreleri ayarladı ve işe yaradı. Gerçekte muhtemelen UTF-8'i kodladığımdan beri karakter kümesini bırakmış olabilirim, ama ben tam olarak düşündüm.

$decoded_str = html_entity_decode ( $value_to_decode, ENT_QUOTES, 'UTF-8'); 

Buradaki ders, "Dokümanları oku" bölümünden iyi bir tanesi. Ben demedim ki (muhtemelen sen yaptın), ama çoğumuz sadece görünüşe bakarsak, orada oturan çözüm üzerinde aceleyle aceleyle ilerleriz.

$newsubject='=?UTF-8?B?'.base64_encode($subject).'?='; 

PHP veya MTA'nın kodlama güvenmeyin Bu şekilde, bir iş yapmak ve posta istemcisi bunu anlamak gerekir:

39

bu deneyin. Yeni konularınızda özel karakterler bulunmayacaktır, bu nedenle e-postayı teslim ederken sorun çıkmamalıdır.

+0

Bu Peter'i kullanıyorum. Konunun uzun olması dışında iyi görünüyor. Nasıl parçalanacağını biliyor musun? Yani, konunun bölümlendirilmesi gereken boyut nedir? ve nasıl? –

+2

Kesinlikle harika bir çözüm. Üç saatlik saç çekme seansı sona erdirmek için @Peter size şükran çokluğu !!! –

+2

+1 OMG! işe yarıyor. –

2

mb_encode_mimeheader kullanmalısınız, daha önce ayarlamayı unutmayın.

mb_internal_encoding("UTF-8"); //has to be set (of course your internal encoding may not be UTF-8). 
$subject = mb_encode_mimeheader($subject,'UTF-8','Q'); 

Bu kodlama ilgilenir (insan okunabilir) boylarına göre değişebilir çizgilerinin dik miktarda içine konuyu kırmak otomatik gerekli ve ne zaman-Kote yazdırılabilir.