web-dev-qa-db-ja.com

PHPMailer文字エンコードの問題

PHPMailerを使用して登録、アクティベーションを送信しようとしています。ユーザーへのその他のメール:

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "[email protected]";
$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("[email protected]");
$mail->AddBCC('[email protected]', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}

$messageにはラテン文字が含まれています。残念ながら、すべてのウェブメール(gmail、webmail.mydomain.org、emailaddress.domain.xx)は異なるコーディングを使用しています。

UTF-8コーディングを使用して、すべてのメールボックスでまったく同じメールを表示するにはどうすればよいですか?

メールヘッダーの幅mb_convert_encoding()を変換しようとしましたが、運がありません。

159
Holian

$ messageにISO-8859-1が含まれていることを100%確信している場合、Davidが言うように tf8_encode を使用できます。それ以外の場合は、$-messageで mb_detect_encoding および mb_convert_encoding を使用します。

また、それに注意してください

$mail -> charSet = "UTF-8"; 

次のものに置き換える必要があります。

$mail->CharSet = 'UTF-8';

Andが置かれたafterクラスのインスタンス化(newの後)プロパティでは大文字と小文字が区別されます! PHPMailer doc リストと正確なスペルを参照してください。

また、PHPMailerのデフォルトのエンコーディングは8bitであり、UTF-8データに問題がある可能性があります。これを修正するには、次のことができます。

$mail->Encoding = 'base64';

これらの場合、'quoted-printable'もおそらく機能することに注意してください(おそらく'binary'でさえ)。詳細については、 RFC1341-Content-Transfer-Encodingヘッダーフィールド を参照してください。

402
AlexV
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

$mail -> CharSet = "UTF-8";$mail = new PHPMailer();の後にスペースを入れないでください!

これを試して

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
24
user2354947

パーティーに遅れてすみません。サーバーの構成によっては、小文字 utf-8で厳密に文字を指定する必要がある場合があります。そうでない場合は無視されます。ここで解決策を探して、上記の回答が役に立たない場合は、これを試してください:

$mail->CharSet = "UTF-8";

次のものに置き換える必要があります。

$mail->CharSet = "utf-8";
5
vzr

私はこのように働いています

  $mail->FromName = utf8_decode($_POST['name']);

http://php.net/manual/en/function.utf8-decode.php

4
yorkfx
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";
2
ali ebrahimi

$ mail-> Subject/w PHPMailerでóを取得していました。

私にとって完全なソリューションは次のとおりです。

// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';

$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);

それが役に立てば幸い。

1
biojazzard

@ $mail -> charSet = "UTF-8";

---この行は下にあるはずです

$mail = new PHPMailer(); line.

pff ..


はい、正しいです。オブジェクトのインスタンス化後に配置する必要があります。

0

クラスPHPMailerを使用してメールを送信する際の文字エンコードの問題を回避するために、次のPHPコードでわかるように、「CharSet」パラメーターを使用してUTF-8文字エンコードで送信するように設定できます。

$mail = new PHPMailer();
$mail->From = '[email protected]';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('[email protected]');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);


// Active condition utf-8
$mail->CharSet = 'UTF-8';


// Send mail
$mail->Send();
0

メッセージがLatin1を使用している場合は、 tf8_encode Works for meを使用できます。

0
David V.

最も簡単な方法は、CharSetをUTF-8に設定することです。

$mail->CharSet = "UTF-8"
0
Trung Bui