Pythonからメールを送る

 職場でのこと、社内で使うシステムのユーザ名とパスワードをメールで送りたいのだが、対象が二百人くらいいる。いちいちメールを作成していては手間が大変なので、なんとかうまく処理できないだろうかという相談を受けまして、即答はできませんがおそらくスクリプトでできると思いますよと返事。だって、さすがにメールの送信をスクリプトからしたことはないわけで、即答するのは無理という話であります。

 私が最初にいけるかもと思ったのはなでしこでした。確かなでしこにはメールを送る機能があったはずで、調べてみれば確かにありました。これさえわかればできたも同然、CSVにて提供されるデータを読み込み、ループでまわしながら生成した本文を各アドレスに送ればいい。けどここでひとつ問題があって、というのは私はなでしこに慣れていないのです。それに今、自分の職場で使っているPCにはなでしこが入っていない。だから、自分の使い慣れている言語がメール送信に対応しているかどうか、再度調べてみたのでした。

 使い慣れている言語、それはPython。ブロックをインデントで表現する言語であるのですが、これが秀逸。必要になりそうな機能は大抵用意されているから、メール送信機能あたりもあるんじゃないかと推測したのです。そうしたらドンピシャ。その名もsmtplib。メールのヘッダまわりを自分で作ってやる必要がありますが、それくらいならなんとかなりそう。というわけで、チャレンジしてみましたよ、しましたね。

最初はiso2022_jpから

 メールといえばJISだろうということで、はじめはiso2022_jpで送信。Subjectも本文もベタのテキストで表現して、自分から自分に送信してやりました。とりあえず、これは成功。ヘッダはSubjectとFrom、Toくらいしかないシンプルなものでしたが、遅れることがわかった時点で返事を入れて、いけますよ、Pythonで送れることを確認しました。そしてこのメール送信プロジェクトはPythonで進めることに決まったのです。

 さて、実際にメールを送るとなると結構いろいろなモジュールが必要で、例えば送信日時。これはdatetimeでまかなって、Subjectをべたテキストではなくエンコードして送ろうという場合にはbase64を使うなど、けれどこのへんのものは全部標準でインストールされるんだから恐れ入ります。さらにありがたいことに、CSVを読み書きできるcsvなんてのもあって、実に楽勝。もう勝ったも同然じゃないかという充実ぶりであります。

本番はutf_8で

 csvモジュールでもって読み込んだデータをforでループさせて、各行の内容でもって宛先、題名、本文を生成していくのですが、与えられたCSVに半角カナだとかが含まれることを怖れて、こうした作業はUTF-8でおこないました。この辺の文字コードを解釈するモジュールももちろん同根されていて、codecsなんですが、日本語扱うにはこれは必須だといえるもの。すごく頼りになります。

 で、メール送信時にもUTF-8を使って、職場で使われているメールクライアントはUTF-8メールを読めるからこのあたりは大丈夫。一応ヘッダにも文字コードがUTF-8であることを書いて、実際届いたメールが読めることも確認して、そしてゴーサインが出たのでした。

 送りましたね、約二百通のメール。一通一通本文内容を生成して、コピーで貼り付けて送るなんてことをしてたら相当の時間がかかっただろうこの作業が、小一時間で書かれたスクリプトで完了するのですから、作業効率を考えるとなんらかの言語が使えたほうが絶対に有利だという話であります。

 さて、このスクリプト。あたかもSPAM送るみたいだからspamcook.pyと名付けたのですが、思えばこれをPythonで書いているというのは実に気の利いている、しゃれていると気に入っています。


わたしの愛した機械へ トップページに戻る

公開日:2007.05.23
最終更新日:2007.05.23
webmaster@kototone.jp
Creative Commons License
こととねは、クリエイティブ・コモンズ・ライセンス(表示 - 継承 2.1 日本)の下でライセンスされています。