UTF-8 e-postası nasıl gönderilir?


83

E-postayı gönderdiğimde, e-posta İngilizce dışında karakterler göstermiyor. Aşağıdaki gibi görünüyor:

ä½ ™ ç ”Ÿä» ä »

Buna neyin sebep olduğunu gerçekten bilebilir mi? Komut dosyasına Content-type ve karakter seti eklemeye çalışsam bile, yine de aynı görünüyor.

kullandım Mail::Factory("mail");


2
Ne kullaniyorsun? yerli mi mail()yoksa Zend_Mailveya PHPMailermı? Fabrika yönteminin bazı kodlarına ihtiyacınız var!
Wesley van Opdorp 01

2
Ayrıca hedef e-posta istemcileriyle de ilgilenmelisiniz. E-posta istemcinizde e-postayı doğru bir şekilde görüntülemeyi başarsanız bile, müşterinizin postayı doğru göreceği anlamına gelmez. Sonunda her zaman utf-8 karakter kümesi başlığıyla html e-postaları oluşturuyorum. Bu şekilde çoğu e-posta istemcisi içeriği doğru bir şekilde görüntüler.
Marco

@FlyBy: evet, tam olarak yapmak istediğim şey, içeriği utf-8 karakter kümesiyle göster, ancak yine de e-postayı doğru göremiyorum.
deepWebMie

Bunun işe yaraması için İçerik Türü ve karakter grubu tam olarak ihtiyacınız olan şeydir, ancak bize daha fazla bilgi vermeniz gerekir. Bize kodu gösterebilir misin? ve / veya ortaya çıkan mesajın kaynağı? Verilerinizin doğru utf8 kodlu olduğundan emin misiniz?
üçlü

3
İşte örnek kodum: $mail = Mail::factory("mail"); $to = "me@abc.com"; $body = "好信"; $headers = array("Content-type =>"text/plain: charset=\"UTF-8","From" => "abc@abc.com","To" => "me@abc.com","Subject" => "Test Send Chinese mail-好信"); $mail->send($to, $headers, $body); Bu doğru mu? Beklediğim şeyi göstermiyor. Çince kelimeyi gövde, başlık ve hatta konu olarak göstermelidir.
deepWebMie

Yanıtlar:


116

İletinizin gövdesine "Content-Type: text / html; charset = UTF-8" üstbilgisi ekleyebilirsiniz.

$headers = "Content-Type: text/html; charset=UTF-8";

Yerel mail()işlevi kullanırsanız $ başlıklar dizisi 4. parametre olur mail($to, $subject, $message, $headers)

PEAR Mail :: factory () kullanıcısıysanız, kodu:

$smtp = Mail::factory('smtp', $params);

$mail = $smtp->send($to, $headers, $body);

İşte benim kodum $ mail = Mail :: fabrika ("mail"); $ to = "me@abc.com"; $ gövde = "好 信"; $ headers = array ("Content-type =>" text / plain: charset = \ "UTF-8", "Kimden" => "abc@abc.com", "Kime" => "me@abc.com" , "Konu" => "Çince postayı test et- 好 信"); $ mail-> send ($ to, $ headers, $ body) Bu doğru mu? Beklediğim şeyi göstermiyor. Çince kelimeyi gövde, başlık ve hatta konu olarak göstermelidir.
deepWebMie

1
Hangi e-posta araçları hala 7 bit aktarım kodlamasını kullanıyor?
Grodriguez

3
Php'nin 4. parametresi mail()bir dizedir, bir dizi değil !!
Vladimir Panteleev

2
charset=UTF-8Alıntı yapmadan yazdığınızdan emin olun UTF-8!
Mel_T

4
Yalnızca text/htmlHTML biçiminde bir e-posta gönderiyorsanız kullanın . Düz metin e-postalar için istersiniz text/plain.
Stewart

34

Oldukça belirtilmiş karakter kümesi (ISO-8859-2) kullanıyorum çünkü her posta sistemi (örneğin: http://10minutemail.com ) UTF-8 postalarını okuyamaz. Buna ihtiyacınız varsa:

function utf8_to_latin2($str)
{
    return iconv ( 'utf-8', 'ISO-8859-2' , $str );
}
function my_mail($to,$s,$text,$form, $reply)
    {
        mail($to,utf8_to_latin2($s),utf8_to_latin2($text),
        "From: $form\r\n".
        "Reply-To: $reply\r\n".
        "X-Mailer: PHP/" . phpversion());
    }

Apple cihazı önceki sürümü iyi okuyamadığı için başka bir mailler işlevi yaptım.

function utf8mail($to,$s,$body,$from_name="x",$from_a = "info@x.com", $reply="info@x.com")
{
    $s= "=?utf-8?b?".base64_encode($s)."?=";
    $headers = "MIME-Version: 1.0\r\n";
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n";
    $headers.= "Reply-To: $reply\r\n";  
    $headers.= "X-Mailer: PHP/" . phpversion();
    mail($to, $s, $body, $headers);
}

2
Peki ya ISO-8859-2'de temsil edilemeyen bir içerik göndermeye çalışıyorsanız ?!
deceze

4
$headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";bu satır sorunumu çözdü, teşekkürler!
Julia

2
Düz metin postalarında okunabilirlik için alıntılanmış yazdırılabilir kodlamayı düşünün, bu kadar basit:'=?utf-8?Q?' . quoted_printable_encode($string) . '?='
Eddie'den alıntı

@ Julia teşekkürler, benim de.
fdrv

cc ve bcc ne olacak?
Toskan

1

Değilse HTML, o zaman UTF-8tavsiye edilmez. koi8-rve windows-1251sadece sorunsuz. Bu yüzden html posta kullanın.

$headers['Content-Type']='text/html; charset=UTF-8';
$body='<html><head><meta charset="UTF-8"><title>ESP Notufy - ESP Сообщения</title></head><body>'.$text.'</body></html>';


$mail_object=& Mail::factory('smtp',
    array ('host' => $host,
        'auth' => true,
        'username' => $username,
        'password' => $password));
$mail_object->send($recipents, $headers, $body);
}
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.