Cara mengirim email dengan kata biner pada subjek email menggunakan PHP

Saya akan mengirim email melalui situs web PHP. Klien dapat menyesuaikan subjek email dan saya akan mendapatkan data postingan dalam UTF-8. Tetapi ketika saya mengirim email HTML menggunakan PHP mail(), saya menemukan bahwa subjeknya tidak ditampilkan dengan benar tetapi isi emailnya ditampilkan dengan benar.

Bagaimana cara mengirim kata berbahasa Mandarin di fungsi email PHP?

Terima kasih.


person Jay    schedule 20.09.2009    source sumber


Jawaban (3)


Anda perlu mengkodekan subjek sesuai dengan cara kata yang dikodekan ditentukan (lihat RFC 2047):

encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

Anda bisa menggunakan

  • pengkodean Base64 (base64_encode):

    'Subject: =?UTF-8?B?'.base64_encode($subject).'?='
    

    or

  • pengkodean quoted-printable (lihat RFC 2045, imap_8bit):

    'Subject: =?UTF-8?Q?'.imap_8bit($subject).'?='
    
person Gumbo    schedule 20.09.2009
comment
Untuk beberapa pemula seperti saya, atur nilai $subject menggunakan: $subject = '=?UTF-8?B?'.base64_encode($subject).'?='; jika Anda menggunakan UTF-8 - person Jay; 21.09.2009

Cukup rumit untuk mengirim non-ASCII di header email. Lihat PHPMailer,

http://sourceforge.net/projects/phpmailer/

Jika tidak berhasil, lihat encoderHeader() untuk mengetahui cara melakukannya.

person ZZ Coder    schedule 20.09.2009

Saya menggunakan PEAR Mail_Mime dan mb_encode_mimeheader untuk menyandikan subjek. Ini dia contoh fungsi yang berfungsi:

<?php
function mail_html($from, $to, $subject, $message_html, $headers = array()) {
  require_once "Mail.php";
  require_once 'Mail/mime.php';
  $smtp = Mail::factory('smtp',
    array (
        'host' => 'smtp.example.com',
        'auth' => true,
        'username' => '[email protected]',
        'password' => 'password'));

  if(function_exists('mb_internal_encoding'))
    mb_internal_encoding('UTF-8');
  if(function_exists('mb_encode_mimeheader'))
    $subject = mb_encode_mimeheader($subject,"UTF-8", "B", "\n");

  $h = array();
  $h['From']         = "$from";
  $h['Bounce']       = "$from";
  $h['Reply-To']     = "$from";
  $h['Return-Path']  = "$from";
  $headers['Subject']      = $subject;
  $headers = array_merge($h, $headers);

  $mime = new Mail_mime();  
  $mime->setHTMLBody($message_html);
  $body = $mime->get(array('html_charset' => 'UTF-8', 'html_encoding' => '8bit', 'head_charset'=> 'UTF-8'));
  $hdrs = $mime->headers($headers);  
  $mail = $smtp->send($to, $hdrs, $body);

  if (PEAR::isError($mail))
    echo 'error', 'Unable to send email';
  else
    echo "Sent email to $to from $from";
}
?>
person brutuscat    schedule 03.01.2011