HTMLメールとテキストメール を両方同時に送る(Flask-Mail)

こんばんは。そろそろブログを書かないと、またどんどん忘れるだけなのでメモをちゃんと残そうかと思います。

一昔前だとHTMLメールってうざいよねぇwww。みたいに思っていたんですが、TwitterやらFacebookやら軒並み最近のWebサービスはHTMLメールを送ってくるようになったと感じています。でどんな感じで送ってるのか見てみたら、Content-Typeに「multipart/altnative」という見慣れないやつを使ってました。

multipart/alternative形式とは?

「multipart/altnative」とは何ぞやといういうのは上記リンクを見てもらえればなんとなく分かると思うのですが、誤解を恐れずに端的に言うと「HTMLとテキスト、両パターン送っとくから、メーラのお前は表示できる方表示しろや」という事です。

最近 送られてくるHTMLメールのContent-Typeを見ると、大体これになってる事が多いですね。最近とか言いつつ僕が知らなかっただけで常套手段なのかもしれませんが。

1. Flask-Mail

で Flaskでどうやってその multipart/altnative のメールを送るのかについてですが、

flask-mail — Flask-Mail v0.2 documentation

Flask-Mailという extension があるのでそれを入れればできます。

  from flaskext.mail import Message
  msg = Message(subject, sender=sender, recipients=reciepients)
  msg.body = body
  msg.html = html_body
  mail.send(msg)

こんな感じ、body と html というプロパティが分かれていて、両方に値がセットされていると、勝手に 「multipart/altnative 」にして送ってくれます。楽ですね。もちろん片方しか値がセットされない場合には、text/plain or text/html になります。

余談

Flask の extensionは大体、他のPYPIパッケージのラッパー的なものが多いのですが、Flask-Mailも MailResponseを構築する部分は、lamson.mail とかいうのを使ってました。

AGAのタイプと薄毛の原因|育毛剤を個人輸入する方法は?

「Lamson's goal is to put an end to the hell that is "e-mail application development". 」なんて強気な事が書いてあるので、Eメールを送るアプリケーションを開発する時とかには、利用を検討してみても良いかもですね。

以上おわり。

余談2 (20110907)

思い出したので追記、各サービスのHTMLメールのソースを見ると、大体が伝統的なTableレイアウトで構成されていて、CSSをstyle属性で直書きしてるものが多かった。なんでTableレイアウトなのかは良くわからないけど、HTMLメールは各種メーラーの対応状況がマチマチで、CSSが一部利かなかったとしても、Tableレイアウトなら表組でなんとなくそれっぽく見えるようなるからかなと。勝手に思ってる。