uitspitss blog

プログラミングと音楽とエッセイ ※記載内容は個人の見解であり、所属する組織とは一切関係がありません。

pythonでEmail自動生成スクリプトを作って得たTips

久しぶりの備忘録的なブログ。
この前、Email処理を楽にするスクリプトを書いたとき、ちょっとした知見が得られたので、備忘。
今回、メールを送信する前に人間の目で最終確認、ちょこっと編集をしたかったので、 任意のディレクトリ下にメールファイル(.eml)を生成していくスクリプトを作っていました。 そこで、気になったことが1つ。 生成したメールファイル(.eml)を開くと、メールソフトが立ち上がるのですが、 編集状態ではなく、受信したメールと同様に編集不可の状態で開かれてしまいました。 これは、Windows Live Mail (WLM) での動作のようで、 私が私的にメインで使っている Thunderbird では、 再送信(再編集)の項目がメニューにあり、ひと手間かかるようですが、再編集状態にできました。 ただ、仕事でWLMを使えと言われたら、使わないといけませんので、どうにかしようと思って検索をしていたら見つけました。

Windows Liveメールの再送方法

上記のページを読むと、Header中の X-Unsent に 1 を入れればよい、とのこと。
そして、肝となる部分を抜粋してきたコードが以下。

環境

  • python 3.5.1
  • email(標準ライブラリ)
import email
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header
from email import generator

from_addr = 'from_addr@mail'
to_addr = 'to_addr@mail'
subject = "メール件名"
body = "メール本文"

encoding = 'utf-8'
sender_name = Header('fromのニックネーム', encoding).encode()

message = MIMEText(body.encode(encoding), 'plain', _charset=encoding)
message['Subject'] = Header(subject, encoding)
message['From'] = formataddr((sender_name, from_addr))
message['To'] = to_addr
message.add_header('X-Unsent', '1')

with open('test.eml', 'w') as eml:
    gen = generator.Generator(eml)
    gen.flatten(message)

print("** end **")