前のは処理がスマートでないのと、値1、値2を複数埋め込む必要があったのとで、改良
mailsend.py
#!/usr/bin/env python
#coding: utf-8
# CSVからメール送信スクリプト
# Ver 1.5 わたり 2013.07.09
# 使い方
# /path/to/mailsend.py csv_filename
# おまじない
import sys
import csv
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
argvs = sys.argv
# 引数の確認
# CSVファイルの指定がない場合には、終了
if (len(argvs) != 2):
print 'Usage: $ %s CSV_filename' % argvs[0]
quit()
# CSVファイルの読み込み
csvline = csv.reader(open(argvs[1], 'rb'), delimiter = ',', quotechar='"')
for row in csvline:
if __name__ == "__main__":
# お約束
## メールサーバ
mailsv = "メールサーバアドレス"
## 送信元メールアドレス
from_address = "送信者メールアドレス"
## 送信先メールアドレス
to_address = unicode(row[0], "utf-8")
## CC メールアドレス
cc_address = "ccするメールアドレス"
## 名前 その1
to_name1 = unicode(row[1], "utf-8")
## 名前 その2
to_name2 = unicode(row[2], "utf-8")
## 値1 と 値2(1つ目)
ataiinfo = row[3] + u"\t" + row[4] + u"\n"
## 値1 と 値2(2つ目以降)
### 個数分ぶんまわし
if (len(row) > 5):
for acount in range(5, len(row) - 1, 2):
ainfo = row[acount] + u"\t" + row[acount + 1] + u"\n"
ataiinfo += ainfo
### ぶんまわし ここまで
## 文字エンコードの指定
charset = "ISO-2022-JP"
## 件名
subject = u"メール件名を入力。"
## 本文(ここから)
text = to_name1 + u''' ''' + to_name2 + u''' 様
ここは好きに、
書いて下さい。本文です。
''' + ataiinfo + u'''
末尾の御挨拶など。'''
## 本文(ここまで)
msg = MIMEText(text.encode(charset),"plain",charset)
msg["Subject"] = Header(subject,charset)
msg["From"] = from_address
msg["To"] = to_address
msg["Cc"] = cc_address
msg["Date"] = formatdate(localtime=True)
## メールサーバの指定
smtp = smtplib.SMTP(mailsv)
## メールの送信
smtp.sendmail(from_address,[to_address,cc_address],msg.as_string())
smtp.close()
# CSV 1行分の処理終わり。以下最終行までぶんまわし
前のはさらにawkなんかでぶん回す必要があったけど、これは、スクリプト内で、csvファイルの読み込み処理までするので、
/path/to/mailsend.py CSV-filename
のみで良い。
作業がスマートになった。
ちなみに、CSVは、
宛先メールアドレス,名前1,名前2,値1,値2,値1,値2,値1,値2,・・・
なんていう行も適切に処理できるようになった。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。