【Python】メールを送信する【Outlook】

CODE,Python

Pythonでメールの作成と送信をします。

メール作成と送信

  • 作成したメールを表示して手動で送信する場合は mail.display(True) をコメントインします
  • 確認せずそのまま送信する場合 mail.send() をコメントインします
  • 宛先は ; 区切りで複数指定できます
# ----------------------------------------
# モジュールのインポート
# ----------------------------------------
import win32com.client


# ----------------------------------------
# Outlookオブジェクトの設定
# ----------------------------------------
outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)


# ----------------------------------------
# メール内容の設定
# ----------------------------------------
# 署名
sign = '''
'''
mail.bodyformat = 1  # 1:テキスト 2:HTML 3:リッチテキスト
mail.to = ''
mail.cc = ''
mail.bcc = ''
mail.subject = '件名'
mail.body = '''
メール本文
''' + '\n' + sign


# ----------------------------------------
# 添付ファイルの設定
# ----------------------------------------
# 添付ファイルの絶対パス
add_file1 = 'C:\\...\\...\\file.txt'
mail.attachments.Add(add_file1)

# 必要に応じて増やす
# add_file2 = ''
# mail.attachments.Add(add_file2)


# ----------------------------------------
# メールを送信する
# ----------------------------------------
# mail.display(True)
mail.send()

日時報告メールの送信

複数の報告ファイルをメール送信する作業を想定したコードです。

処理内容 ①複数のファイルが特定フォルダに格納されている前提とする
 ここでは以下の3ファイル
 ・売上報告(東京本社)_yyyymmdd.xlsx
 ・売上報告(名古屋支社)_yyyymmdd.xlsx
 ・売上報告(大阪支社)_yyyymmdd.xlsx
 ※yyyymmddは処理年月日
②フォルダ内をワイルドカードで検索する
③検索条件に合致したファイルを添付ファイルに追加する
④添付ファイルがない場合は送信しない
⑤添付ファイル数が正しくない場合はメール本文で注意を促す
# ----------------------------------------
# モジュールのインポート
# ----------------------------------------
import win32com.client
import datetime
import glob


# ----------------------------------------
# 変数の設定
# ----------------------------------------
file_ymd = datetime.datetime.today().strftime('%Y%m%d')
folder_path = 'C:\\temp\\'
file_name = '売上報告*_' + file_ymd + '.xlsx'


# ----------------------------------------
# Outlookオブジェクトの設定
# ----------------------------------------
outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)


# ----------------------------------------
# メール内容の設定
# ----------------------------------------
mail.bodyformat = 1  # 1:テキスト 2:HTML 3:リッチテキスト
mail.to = 'tokyo@test.com ; nagoya@test.com ; osaka@test.com'
mail.subject = '日時売上報告' + file_ymd
mail.body = '''\
売上報告書を送信します。
'''


# ----------------------------------------
# 添付ファイルの設定
# ----------------------------------------
# ワイルドカードで添付ファイルを指定する
files = glob.glob(folder_path + file_name)
print('---添付ファイルを表示---')
for add_file in files:
    print(glob.glob(add_file))
    mail.attachments.Add(add_file)


# ----------------------------------------
# メールを送信する
# ----------------------------------------
if len(files) == 0:
    print('---添付ファイルがありません---')

elif len(files) != 3:
    mail.body = mail.body + '\n※添付ファイルに過不足があります'
    mail.display(True)
    # mail.send()
    print('---メール送信完了---')

else:
    mail.display(True)
    # mail.send()
    print('---メール送信完了---')

参考書

もっと多彩な処理を目指しませんか。

CODE,Python

Posted by junichi