LinuxサーバからGmailを送信すると添付ファイルになってしまう件
目次
Gmail(Inbox)の設定かとおもってかなり悩んだのでメモ。
とあるRSSに対応していないWebページの更新を取得する必要があったので、スクレイピングして更新があった際にのみメール通知の仕組みを作成した。スクレイピングの良し悪しがあるので、スクレイピング自体については触れない。
前提
- シェルスクリプトの中でUTF-8 の日本語文字列をメール送付する
- echo “Update ○○がアップデートされたよ!” |mail username
みたいなシェルスクリプトをCronで実行する
この時、cronで動かした時のみ本文が空で本文のファイルが添付ファイルとして送信されてくる。メールのソースを見ると”Update ○○がアップデートされたよ!”という文字列がバイナリ化して添付されている模様。
手動での実行時には起きない。本文に日本語がない(”Update!”)状態だと送信がされる。
原因
メールのソースを見ると、
“`
Content-Type: application/octet-streamContent-Transfer-Encoding: 8bit
“`
として送信されてきている。どうやらメールの送信時(受信時?)に文字コードが取得できていない模様。日本語文字列がキーとなっている様子なので、シェルスクリプトの冒頭を以下のようにしてやると良い。
“`
#!/bin/sh export LCCTYPE=jaJP.UTF-8
“`
これでメールの受信時に文字化けがしないことになった。