# Pythonによるメールの自動送信
# Excelで作成した宛先リストに従って各宛先にファイルを添付して自動送信する
# 必要なモジュールを呼び出す
import os
import pandas as pd
import smtplib
import email
import mimetypes
# 宛先リストや添付ファイルがあるディレクトリ「dir」を指定する
dir = r'C:\Users\......\......\......\......\......'
# メール送信サーバーに接続するための情報(サーバー名、ポート番号)を指定する
ssnam = '*****.*****.**.**' # サーバー名
po = 465 # ポート番号
# メール送信サーバーに接続する
ser = smtplib.SMTP_SSL(ssnam,po)
# メール送信サーバーにログインするための情報(送信元アドレス、パスワード)を指定する
fma = '*****@*****.**.**' # 送信元アドレス
pw = '**********' # パスワード
# メール送信サーバーにログインする
ser.login(fma,pw)
# 宛先リストのファイル名「list.xlsx」を指定し、パス「path」を生成する
nam = 'list.xlsx'
path = os.path.join(dir,nam)
# 宛先リストを読み込み「df」に格納する(「list.xlsx」の列名を'社員番号','氏名','宛先アドレス','CCアドレス','添付ファイル'とする)
df = pd.read_excel(path)
# 宛先リストの件数を「n」に格納する
n = len(df)
# 以下の作業をn回繰り返す
for i in range(n):
# 宛先リストを1件ずつ読み込み、宛先アドレスを「tma」に、CCアドレスを「cma」に。添付ファイル名を「tnam」にセットする
tma = df.loc[i,'宛先アドレス']
cma = df.loc[i,'CCアドレス']
tnam = df.loc[i,'添付ファイル']
# 添付ファイルのパス「tpath」を生成する
tpath = os.path.join(dir,tnam)
# 送信メッセージ(差出人、宛先、CC、件名、本文)を作成し「mes」に格納する
mes = email.message.EmailMessage()
mes['From'] = fma # 差出人アドレス
mes['To'] = tma # 宛先アドレス
mes['Cc'] = cma # CCアドレス
mes['Subject'] = '勤務実績のお知らせ' # 件名
mes.set_content('前月の勤務実績をお送りします。\n内容を確認してください。') # 本文(本文中の \n は改行記号です。)
# 添付ファイルのタイプ「mimetype」を取得し、「maintype」と「subtype」に切り分ける
mimetype = mimetypes.guess_type(tpath)[0]
maintype,subtype = mimetype.split('/')
# 添付ファイルを読み込み「f」に格納する
f = open(tpath,'rb').read()
# 送信メッセージに添付ファイルを添付する
mes.add_attachment(
f,
maintype = maintype,
subtype = subtype,
filename = tnam
)
# 添付ファイル付きで送信メッセージを送信する
ser.send_message(mes)
# メール送信サーバーを切断する
ser.quit()