nasıl

2011-10-06 3 views
11

Nasıl için "Name <[email protected]>" biçimindeki bir e-posta gönderebilir alıcıların adı özel karakterler kullanmak: Açıkçasınasıl

ŠŒŽœžŸ¥µÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ <[email protected]> 

, bu karakterlerin çoğu bir isim görünür asla ama yaptıklarında, bir e-postanın başarıyla gönderilmesini engellemelerini tercih ederim. '¥ μÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ ' İşlem iptal alıcı adresine:

'Kime': geçersiz yok sayılması ile Apache error.log belirtildiği gibi

Şu anda, bu başarısız hiçbir alıcıları Mümkünse

belirtilen Özel karakterleri oldukları gibi tutmak istiyorum. Aksi takdirde, adı temizlemek için bir çeşit transliterasyon işlevi kullanabilir miyim? kullanım

Örnek: başlığını Mime-Version: 1.0 belirlesin daha iyi uyumluluk için

mb_internal_encoding('UTF-8'); 

$name = '山本'; 
$email = '[email protected]'; 
$addr = mb_encode_mimeheader($name, 'UTF-8', 'Q') . " <$email>"; 

nedenle tüm posta istemcileri anlamak':

<?php 
$to = "ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ <[email protected]>"; 
$subject = "Test Subject"; 
$body = "Test Body"; 
if (mail($to, $subject, $body)) { 
    echo("<p>Message successfully sent!</p>"); 
    } else { 
    echo("<p>Message delivery failed...</p>"); 
    } 
?> 

cevap

16

mb_encode_mimeheader örnekte gösterildiği gibi, bunu yapmak gerekir MIME kodlamasını kullanıyor.

nihai eposta başlıkları şöyle olmalıdır:

To: 山本 <[email protected]> 
Subject: こんにちは 

Related:

To: =?UTF-8?Q?=E5=B0=81=E3=83=90=E3=83=BC?= <[email protected]> 
Subject: =?UTF-8?Q?=E3=81=93=E3=82=93=E3=81=AB=E3=81=A1=E3=81=AF?= 
Mime-Version: 1.0 

olarak oluşturur, https://stackoverflow.com/a/13569317/476

+0

Ayrıca bu davranışı tanımlayan RFC2048'e bir işaretçi de ekleyebilirsiniz. E-postayı işlemek istiyorsanız MIME gereklidir. – tripleee

+0

Teşekkür ederim, bu mükemmel çalışıyor. @tripleee RFC referansı için teşekkür ederiz. Bunun bir e-postanın tüm bölümlerine uygulandığını fark etmedim. – Citricguy

+0

Özel charaters ** ve ** alanlarını da kodlamak mümkün mü? (http://stackoverflow.com/questions/11963712/how-to-correctly-encode-strings-for-usage-in-mail-headers-in-php) Maalesef bu durumda mb_encode_mimeheader' yardımcı olmaz. –

1

RFC 821 (2821) bize anlattığı bütün ve üstbilgiler alanındaki herhangi bir 8bit veri kodlanmalıdır. Base64 veya QuotedPrintable, istediğiniz ve yapabilirsiniz. Çoğu e-posta okuyucusu kodlanmış dizgileri otomatik olarak çözer