2013年7月9日火曜日

Pythonで差し込みメール送信 その2

のは処理がスマートでないのと、値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,・・・
なんていう行も適切に処理できるようになった。

Pythonで差し込みメール送信

やってみた。

mailsend.py

#!/usr/bin/env python
#coding: utf-8
import sys
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

argvs = sys.argv

if __name__ == "__main__":
  from_address = "送信元メールアドレス"
  to_address = unicode(argvs[1], "utf-8")
  cc_address = "送信先メールアドレス"
  to_name1 = unicode(argvs[2], "utf-8")
  to_name2 = unicode(argvs[3], "utf-8")
  atai1 = unicode(argvs[4], "utf-8")
  atai2 = unicode(argvs[5], "utf-8")
  charset = "ISO-2022-JP"

  subject = u"メール件名です。"
  text = to_name1 + u''' ''' + to_name2 + u''' 様

文章です。

改行も可能です。

''' + atai1 + u'''\t''' + atai2 + 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("メールサーバアドレス")
  smtp.sendmail(from_address,[to_address,cc_address],msg.as_string())
  smtp.close()
こんな感じ。今回は、宛名を2つに分ける必要があったため、2つ付いているだけ。 途中の差し込みリストもさらに2つほど渡してやりたかった。

送信リスト

メールアドレス,名前1,名前2,値1,値2
メールアドレス,名前1,名前2,値1,値2
メールアドレス,名前1,名前2,値1,値2
・・・

コマンド実行

awk -F"," '{ print "./mailsend.py",$1,$2,$3,$4,$5 }' | /bin/bash
こんな感じ

DNS named.root 更新確認スクリプト

#!/bin/bash # DNSのnamed.rootファイルの更新確認スクリプト # 最新版のnamed.rootファイルを取得し、差分を確認する。 # 更新履歴 # 2014.02.07 watari # お約束 export LANG=C ## 実行ディレクトリ #PR...