2011年12月22日木曜日

さくらインターネットからpythonでメール送信

はじめに

仕事とは別件で、さくらインターネット共用サーバーでメーリスの自動登録システムを組んだのですが、 その時、メールの送信でつまずいたので記録しておく。

pythonで書いてありますが、他の言語でも参考にはなるはず。


まず、基本的には、下記のサイトの
Pythonでメールを送信したい人のためのサンプル集

に書いてある方法を組み合わせれば大丈夫なのですが、いくつか注意点があります。

まず、さくらのSMTPサーバーは、一般的な25番ポートではなく587番ポートを使用します。 25番ポートからでも送信できるようですが、25番ポートは迷惑メールなどでよく使われるらしいので、587にしておくのが無難だと思われます。 そして、TLSという方式で認証を行なってから送信します。 まあ、要するに、上記のリンク中の「gmailを使って送信してみる」の方法で行えば問題無いのですが、 送信用のアカウント(メールアドレス)をどのように準備するかを紹介します、

送信用アドレスの作成

まずは、コントロールパネルにログインし、管理画面の「メールアドレスの管理」を選択します。

そして、メールアドレス名とパスワードを設定し、登録します。このとき設定したパスワードはのちのち使用するので、忘れないようにしてください。これだけで準備は完了です。

コードを書く

さて、いよいよ送信用のプログラムです。先程も述べたように、基本的には上記サイトの方法で問題ないですが、 設定が少し厄介です。まず、SMTPサーバーとの接続は、さくらインターネットのアカウント(なんとか.sakura.ne.jp)で行います。 そして認証は、先ほど作成したメールアドレス名と先ほど設定したパスワードを使用します。

あとは、上記のサイトに従って設定すれば、送信できます・・・と言いたいとこですが、じつは上記のサイトの「日本語を含んだメール」の設定には 不備があります。msg = MIMEText(body, 'plain', encoding)をmsg = MIMEText(body.encode(encoding), 'plain', encoding)に書き換えてやる必要があるみたいです。そうしないと、Unicode.DecodeErrorだったかなんかが発生します。また、この手のPythonで日本語を扱うシステムは、基本的に文字はすべてUnicode文字を使用するようにしたほうがよさげです。

参考

Pythonでメールを送信したい人のためのサンプル集
Pythonで日本語メールを送る。

0 件のコメント:

コメントを投稿