HTMLメールとテキストメール を両方同時に送る(Flask-Mail)
こんばんは。そろそろブログを書かないと、またどんどん忘れるだけなのでメモをちゃんと残そうかと思います。
一昔前だとHTMLメールってうざいよねぇwww。みたいに思っていたんですが、TwitterやらFacebookやら軒並み最近のWebサービスはHTMLメールを送ってくるようになったと感じています。でどんな感じで送ってるのか見てみたら、Content-Typeに「multipart/altnative」という見慣れないやつを使ってました。
「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 とかいうのを使ってました。
「Lamson's goal is to put an end to the hell that is "e-mail application development". 」なんて強気な事が書いてあるので、Eメールを送るアプリケーションを開発する時とかには、利用を検討してみても良いかもですね。
以上おわり。