Python: Eメールの送信
何度も車輪の再発明を繰り返しているが、今のところちょっとしたスクリプトにおいては
以下の内容で落ち着いている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #!/usr/bin/env python # -*- coding: utf-8 -*- import os import ConfigParser import codecs import smtplib from email.MIMEText import MIMEText from email.Header import Header from email.Utils import formatdate # load config CONF_PATH = os.path.join(os.path.dirname(__file__), 'mail_sender.conf' ) config = ConfigParser.SafeConfigParser() config.readfp(codecs. open (CONF_PATH, 'r' , 'utf-8' )) SMTP_SERVER = config.get( 'system' , 'smtp-server' ) SMTP_PORT = config.getint( 'system' , 'smtp-port' ) class MailSender( object ): """General mail sending class""" def __init__( self , project_id): self .from_addr = config.get(project_id, 'from-address' ) self .to_addr_list = [a.strip() for a in config.get(project_id, 'to-address-list' ).split( ',' )] def send( self , subject, body, from_addr = None , to_addr_list = None ): """send a message using SMTP""" if from_addr is None : from_addr = self .from_addr if to_addr_list is None : to_addr_list = self .to_addr_list msg = MailSender.__create_message(from_addr, to_addr_list, subject, body) s = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) s.sendmail(from_addr, to_addr_list, msg.as_string()) s.close() @staticmethod def __create_message(from_addr, to_addr_list, subject, body, encoding = 'iso-2022-jp' ): """create MIMEText object""" msg = MIMEText(body.encode(encoding), 'plain' , encoding) msg[ 'Subject' ] = Header(subject, charset = encoding, header_name = 'Subject' ) msg[ 'From' ] = from_addr msg[ 'To' ] = ',' .join(to_addr_list) msg[ 'Date' ] = formatdate(localtime = True ) return msg if __name__ = = '__main__' : # test code #MailSender('awesome-project').send(u'TITLE', u'THIS IS A TEST MAIL!') pass |
同じ階層に conf ファイルを置く。
[system] smtp-server: {{ smtp_server }} smtp-port: {{ smtp_port }} [awesome-project] from-address: {{ from_address }} to-address-list: {{ to_address_list }} |
{{ }} の部分は適宜書き換え。to_address_list はカンマ区切りで複数指定可能。
0 件のコメント:
コメントを投稿