Python: Eメールの送信
何度も車輪の再発明を繰り返しているが、今のところちょっとしたスクリプトにおいては
以下の内容で落ち着いている。
#!/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 件のコメント:
コメントを投稿