Python でメール送信してみる
概要
- Python の標準ライブラリを使ってメール送信する。
- デコレータと組み合わせて、処理終了お知らせメールを送信してみる。
簡単な例 ~メールを送信してみる~
- Python のサンプルをほぼそのまま使用してみる。
- 送信は SMTP サーバに依頼しているらしい。(差出人偽装も簡単なのね。。)
- 以下、サンプル。
# -*- coding: utf-8 -*- # Import smtplib for the actual sending function import smtplib # Import the email modules we'll need from email.mime.text import MIMEText from_address = '(送信元アドレスを設定)' to_address = '(送信先アドレスを設定)' # 本文 msg = MIMEText( "Hello!!" ) # 件名、宛先 msg['Subject'] = 'Mail sending test.' msg['From'] = from_address msg['To'] = to_address # Send the message via our own SMTP server, but don't include the envelope header. s = smtplib.SMTP() s.connect() s.sendmail( me, [you], msg.as_string() ) s.close()
- 結果
- 宛先として設定したアドレスに、件名「Mail sending test.」本文「Hello!」なメールが届けば成功。
処理完了お知らせメール機能
- デコレータと組み合わせて、処理が終わったらお知らせしてくれるようにする。
- メール本文には実行ファイル名とプロセス名を表示。
- 実行時間とか測っても良いかも。
- デコレータの引数として、宛先アドレスを変えられるようにしてみる。
- 処理ごとに担当者が違ったりすることを想定してみる。
- 以下、サンプル。
# -*- coding: utf-8 -*- import smtplib from email.mime.text import MIMEText def sendmail( to_address ) : def receive_func( func ) : import functools @functools.wraps( func ) def wrapper( *args, **kwargs ) : result = func( *args, **kwargs ) from_address = "(送信元アドレスを設定)" # Create mail text = "Process \"{0}\" is finished!!\n".format( func.__name__ ) text += "( Program file : {0} )\n".format( __file__ ) msg = MIMEText( text ) msg['Subject'] = "Process is finished!!" msg['From'] = from_address msg['To'] = to_address # Send mail s = smtplib.SMTP() s.connect() s.sendmail( from_address, [to_address], msg.as_string() ) s.close() # Debug print print "Debug: Send mail to \"{0}\" from \"{1}\".".format( to_address, from_address ) return result return wrapper return receive_func # Test if __name__ == '__main__' : import time @sendmail( "(送信先アドレス その1 を設定)" ) def long_process() : # 何か 長~い 処理 # 処理完了後、decorator により終了報告がされる。 time.sleep( 5 ) @sendmail( "(送信先アドレス その2 を設定)" ) def long_process2() : # 何か 長~い 処理 その2 # 処理完了後、decorator により終了報告がされる。 time.sleep( 10 ) # 処理実行 long_process() long_process2()
- 結果
- 設定した送信先にメールが届けば成功。
- 1つ目のプロセス名は「long_process」、2つ目は「long_process2」のはず。
- 設定した送信先にメールが届けば成功。
まとめ
- メールの送信も簡単に出来る Python 便利!!
- デコレータも改めて便利。あまり使わないけど。。
- この機能、作ってみたけど使うかなぁ??