【杯】PythonでOutlookにメール送信する@日本語

プライベートmail,outlook,python,日本語

image

うーーむ、気付かなかった。

(;^ω^)

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だと、空白込みでファイル名だと思い込んでしまう・・という。

image

確認には、Thunderbirdでヘッダー情報を確認。filename=" の後に、変な空白があるのがわかる。

” ”を外しても、全てのメーラーで認識してくれてる。

image

しっかり、OutlookのExcelプレビューでも表示できる。

スマホのGmailアプリでも同様。

開発期間が短く、Pyhonのmailパッケージの全容を把握してのコーディングではないので、もしかしたら、もっとスマートな書き方があるのかもしれません。

常用するソフトは、オープンソース系で固めてるので、突如発生した問題でした。。

(;´Д`)

まったく関係無い話ですが、今回、Firefoxを結構深くまで触ることになったんですが、想像以上にしっかり作られてるしカスタマイズも自由だし、FireFox凄いかも、とChromeからの引っ越しを考えてる。