phpで「qmail」「sendmail」「mb_send_mail」を使ってメールを送ってみたところ、メール本文の途中から文字化けが発生してしまった。
原因
「sendmail」「qmail」「Postfix」でメールを送信する場合、改行なしで1行に「1,000バイト」を超えるデータが送付された場合、自動で改行コードが挿入されてしまう。
その際に、マルチバイト文字列など全く考慮されずに改行コードが挿入されてしまうため、メール本文で途中から文字化けが発生してしまう。
対象方法
①システムからメールを送る際に1,000バイトを超えないようにする
システムを使うのが自分だけの場合、メール本文に適度に改行を加え、1行あたり1,000バイトを超えないように気をつければ、特にシステム上のプログラムを修正する必要ない。
また、注意書きで改行を適度に加えるように促すのもいいかもしれない。
②システム上で改行を加える
メール送信のフォームが一般ユーザーに公開されている場合、①のように注意書きだけでは制御できない可能性がある。
そのため、自動で改行コードが加えられる前に、こちらで改行コードを加えておく必要がある。
「mb_strcut」などを用いてバイト数で文字列を切り出し、適度に改行コードを加えるとよい。
コメント