2017-11-06 3 views
0

phpmailerを使用して月間レポートを送信しています。phpmailerに添付ファイルのエンコーディングを設定する

ユーロ記号が含まれています。したがって、私はutf-8にエンコーディングを設定する必要があります。 ここで問題が発生しました。

$mail->addStringAttachment($csvstring, $fileName); 

メールが送信されますが、私はエンコーディングを追加しようとすると、添付ファイルに€記号が

まで表示されません:

$mail->addStringAttachment($csvstring, $fileName, "utf-8", "text/csv"); 

このようなエンコードせずに

メールは送信されますが、本文と添付ファイルは存在しません。 私はそれを見つけようとしましたが、ほとんどドキュメントがないようです。

明白なことはありませんか?

+0

ちょうどソースを閲覧し、私は言う必要があります。PHPmailerは本当に扱いにくいと思われ、スイッチを検討するかもしれません。しかし、 'https:// github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php#L62'の3番目のパラメータが期待されるので、" utf-8 "は期待されません。 4番目のパラメータとして '' text/html; charset = utf-8 "'を試してみてください。ちょうど実験中のビット。私は、PHPMailerが他に何も役立たない場合、どのように動作するかをリバースエンジニアリングすると思います。 –

+0

「ドキュメンテーション」見出しの下に隠されている、プロジェクトのホームページからリンクされた膨大な文書があります。 [addStringAttachmentのドキュメント](http://phpmailer.github。io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#method_addStringAttachment)は、添付ファイルを追加するときにcontent-tansfer-encodingを指定する方法を明確にしています。これは他のライブラリとほぼ同じです。同じもの。 – Synchro

+0

誰もが毎日PHPMailerを使っているわけではありません...だから、私の鼻が噛まれないようにしたいと思います。それでも助けてくれてありがとうございます。 –

答えて

0

あなたは混乱しています。 EncodingCharSetは2つの異なるものです。一般に、charsetは通常base-64でエンコードされているため、添付ファイルには影響しません。したがって、7ビットのみです。

メッセージ全体にCharSetEncodingを設定できますが、添付ファイルごとに全体のエンコードを上書きできます。

the docsごとに、あなたのコンテンツを添付するための正しい方法:

$mail->addStringAttachment($csvstring, $fileName, 'base64', 'text/csv'); 

をそのパターンでは、添付ファイルは、あなたがそれに渡す正確なバイナリコンテンツを保持します - あなたはまだ文字とのトラブルを持っている場合、それはです送信元データの問題ではなく、送信元データの原因となっています。

+0

質問と文字セットに関する以前の混乱に私は同意しません。しかし、私はコンテンツタイプに文字セットを追加することがこれを処理する適切な方法だと考えています。現在、あなたのソリューションにはエンコーディングをUTF-8に明示的に設定するものはありませんが、 'text/csv; charset = utf-8'は仕様に従って行います。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type – jaswrks

0

参照してください:this line in PHPMailer's source code

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

をあなたはCSVがそれを開くプログラムでUTF-8として読むことにしたい場合は、BOM(Byte Order Marker;すなわち、"\\xef\\xbb\\xbf")を追加し、文字列ファイルの内容に。

"\\xef\\xbb\\xbf".$csvstring 

UPDATE:

はまた、このようにそれを行うことができます。それはエンコーディングを設定する適切な方法を指摘するよう

$mail->addStringAttachment($csvstring, $fileName, "base64", "text/csv; charset=utf-8"); 

は、MIME Content-Typeに、また仕様を参照します。すなわちtext/csv; charset=utf-8である。

+0

添付ファイルのエンコーディングを設定する必要がある電子メール本文のエンコーディングを設定します。私はすでにコードの残りの部分でこの行を使用しています。 –

+0

@MathiasKiekens Understood。私はあなたのために私のソリューションを更新しました。 – jaswrks

+0

更新後:まだ動作していないようです。私は恐れます –

関連する問題