Like Silk: Script: sendmailjp

python関連のメモ

sendmailで日本語メールを送信する

日本語をISO-2022-JPにエンコードする.ISO-2022-JPに存在していないいくつかのコードを置換するのが重要である.

code

sendmailjp.py←右クリックで保存できます.
#!/usr/bin/env python
#coding: utf-8

import os

from email.MIMEText import MIMEText
from email.Message import Message
from email.Header import Header

################################################################
def uniuni(str):
	list = [\
[u'\uFF5E', u'\u301C'], # '~'→'〜' \
[u'\u2225', u'\u2016'], # '∥'→'‖' \
[u'\uFF0d', u'\u2212'], # '-'→'−'  \
[u'\uFFE0', u'\u00A2'], # '¢'→'¢'  \
[u'\uFFE1', u'\u00A3'], # '£'→'£'  \
[u'\uFFE2', u'\u00Ac'], # '¬'→'¬'  \
]
	for lt in list:
		str = str.replace( lt[0], lt[1] )
	return str

################################################################
def sendmailjp(mailto = '', mailcc = '', mailbcc = '', mailfrom = '', mailsubject = '', mailbody = '', sendmailpath = '/usr/sbin/sendmail' ):
	mailsubject = uniuni(mailsubject)
	mailbody = uniuni(mailbody)
	msg = MIMEText(mailbody.encode('ISO-2022-JP'), 'plain', 'ISO-2022-JP')
	status = 'NG'
	if( mailfrom != '' and mailto != '' ):
		msg['From'] = mailfrom
		msg['To'] = mailto
		if( mailcc != '' ):
			msg['Cc'] = mailcc
		if( mailbcc != '' ):
			msg['Bcc'] = mailbcc
		msg['Subject'] = Header(mailsubject.encode('ISO-2022-JP'), 'ISO-2022-JP')

		try:
			p = os.popen("%s -t -i -f %s" % ( sendmailpath, mailfrom ), "w")
			p.write( msg.as_string() )
			status = p.close()
		except:
			pass
	return status

########################################################################
if __name__ == '__main__':
	mailto  = 'hoge@hoge.com'
	mailcc  = 'hage@hage.com'
	mailbcc = 'hage@hage.com'
	mailfrom= 'hage@from.com'
	mailsubject = u'メールテスト' # unicode
	mailbody = u''' \
sendmailjpを使って送りました.
'''# unicode
	print sendmailjp(mailto, mailcc, mailbcc, mailfrom, mailsubject, mailbody )

Like Silk