ゼロからはじめるWEBプログラミング入門

未経験者でも初心者でも関係なく、とにかくWEBサイトを作るところから始めるブログ!

sendmailでメール本文やタイトルが文字化けする時の対応方法

f:id:sbc-web:20170726222654p:plain

概要

sendmailでメールを送信した時に
メールを受信するメーラーによって
文字化けする場合があるので対応方法を記載

環境


対応方法

文字化けしないようにテキスト(Base64)でデータを送信する

メールヘッダーの指定

文字コード(UTF-8)と送信エンコード(Base64)を指定

項目
Content-Type text/plain; charset=UTF-8
Content-Transfer-Encoding Base64


メール件名のエンコード

Base64エンコード文字コードの指定をくっつける
64文字ごとに分割されるので、分割されるごとにUTF-8のマークを設定

SUBJECT_BASE64=`echo -n "メールの件名" | openssl enc -e -base64`
MAIL_SUBJECT=""
for s in $SUBJECT_BASE64
do
    MAIL_SUBJECT=${MAIL_SUBJECT}" =?UTF-8?B?${s}?="
done


メール本文

本文はBase64エンコードするだけ

MAIL_BODY=`echo -e "メール本文。\n2行目。" | openssl enc -e -base64`


メール送信コマンド

MAIL_ADDRESS=メールアドレス

echo -e "To:${MAIL_ADDRESS}\nSubject:${MAIL_SUBJECT}\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: Base64\n`echo -n ${MAIL_BODY}`\n" | sendmail -t "${MAIL_ADDRESS}"