【杯】PythonでOutlookにメール送信する@日本語
うーーむ、気付かなかった。
(;^ω^)
Pythonから添付ファイル(日本語)付きSMTPメール送信したのですが。
ネットに転がってるような、よくあるコードで済ませてた訳ですが、Outlookで受信するとダメなのです。
写真でわかる通り、私はOutlookを常用してないw(ライセンス切れの状態で起動)
GMailやThunderbirdではOKだが、OutlookやYahooメールではダメだったんですよね。
色々試行錯誤してたら、やっと成功。
備忘録として。
キレイに書き直す前なので、汚いですが、これでイケました。
with open(_fn, 'rb’) as _fh:
_part = MIMEApplication(
_fh.read(),
Name=os.path.basename(_fn)
)
_hd = Header('attachment;’, header_name=’Content-Disposition’)
_hd.append('filename=’)
_hd.append(os.path.basename(_fn), charset=’iso-2022-jp’)
_part['Content-Disposition’] = _hd
_msg.attach(_part)
色々試してみて分かったんが、コンテントヘッダ(Content-Disposition)内のfilenameに、しっかりiso-2022-jp(JIS)でエンコードして入れてあげないとダメって事。
本来は、”ーー”で囲ってあげないといけないんでしょうけど、Header.append()が、余計な空白を入れてくるので、ファイル名の両端に、空白がくっついてしまう。
Outlookではそれでもファイル名を正確に認識してくれるが、ThunderbirdやGMailだと、空白込みでファイル名だと思い込んでしまう・・という。
確認には、Thunderbirdでヘッダー情報を確認。filename=" の後に、変な空白があるのがわかる。
” ”を外しても、全てのメーラーで認識してくれてる。
しっかり、OutlookのExcelプレビューでも表示できる。
スマホのGmailアプリでも同様。
開発期間が短く、Pyhonのmailパッケージの全容を把握してのコーディングではないので、もしかしたら、もっとスマートな書き方があるのかもしれません。
常用するソフトは、オープンソース系で固めてるので、突如発生した問題でした。。
(;´Д`)
まったく関係無い話ですが、今回、Firefoxを結構深くまで触ることになったんですが、想像以上にしっかり作られてるしカスタマイズも自由だし、FireFox凄いかも、とChromeからの引っ越しを考えてる。