Pythonを利用してMicrosoft Outlook(365も)からメール自動送信する方法のご紹介です。
複数の宛先に同一メールを送信するルーチン作業は大量件数だと手動は非効率です。メールを様々な宛先に自動送信するソフトは有料でいくつかありますが、本文を宛先毎に変えることができないなどの問題があります。Pythonを利用すれば無料で簡単にメール送付を行うことができ、応用すれば違う宛先に違う本文を自動送付することも可能です。
自動送信の仕組みを一度作成してしまえば、指示ファイル(テキスト)の内容を買えて実行ボタンを押してしまえば自動送信の仕組みが使いまわせるので時短になります。
本記事では、自動メール送信の概要説明から実際に利用できるPythonコード例をいくつかご紹介いたします。
Pythonによる自動メール送信の概要
PythonからOutlookを操作するイメージ図
①送信したいメール本文と②宛先を指定して、メール自動送信用のPythonコードを実行すれば、違う宛先に自動的にメール送信することができます。応用すれば、宛先毎に①②を変更して違う内容を送付することができます。

email.messageライブラリを利用してOutlookを操作する
PythonからOutlookを操作する方法はいくつかありますが、今回はライブラリのemail.messageを利用します。一番簡単で確実に動くのがemail.messageだからです。必要ライブラリのインストールをまず行います。
pip install emailmessage
pip install secure-smtplib
pipインストールができない場合はProxyや証明書の問題がありますのでPythonでpip installが使えない時のプロキシとSSL無視の対策記事をご覧くださいませ。
Pythonから自動メール送信するコード例
自動メール送信の関数
outlookで添付ファイルなしのメール送信関数を共有致します。
from email.message import EmailMessage
import smtplib
def Mailsend(user,password_1,message_from,message_to,message_cc,message_subject,message_text):
user=user
password=password_1
smtp = smtplib.SMTP("smtp.office365.com",ポート番号を入力)
message = EmailMessage()
message["From"] = message_from
message["To"] = message_to
message["Cc"] = message_cc
message["Subject"] = message_subject
message.set_content(message_text)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(user,password_1)
smtp.send_message(message)
smtp.quit()
return
Mailsend(user,password_1,message_from,message_to,message_cc,message_subject,message_text)の()内の変数をいれて実行するとメールを自動送信できます。
関数に入れる変数例を共有
#メール本文
message_text='''
につのブログへお越しいただきありがとうございます。
Pythonノウハウ共有はお役に立ててますでしょうか?
'''
#題名
message_subject="につブログ"
#メールサーバー
user = "送信元のメールアドレス"
password_1= "パスワード入力" 大抵はwindowsログイン時のpass。違う場合はメール設定を確認
message_from=user
message_to ="toでの送り先記載"
message_cc="ccでの送り先記載"
#送り先を複数入れたい場合は"****","****"のようにカンマで区切る
メール宛先を変えて、同一内容送信はループ文で対応
for i in data:
message_to = "送り先の変数をいれる i[?]"
message_subject = "送り先の変数をいれる i[?]"
EmaiSend(user,password_1,message_from,message_to,message_cc,message_subject,message_text)
上記を応用すれば、件名、メール本文など宛先によって変えることが可能です。
連続自動メール送信時はtime.sleepで時間を空けてエラーを回避する
連続してメール送信する場合に時間を空けて送信設定しないとエラーになる場合があります。エラーで止まってしまえば自動化の効果は薄れてしまいますので、time.sleep()を利用して間隔を空けて送信することをお勧めいたします。
自動メール送信(添付ファイル付き)のご紹介
添付ファイル付きコードは有料での共有となります
複数の異なった拡張子の添付ファイルを付けて、メール送信することが可能です。こちらのコードは有料にてご提供しておりますので、ご希望がございましたらお問合せくださいませ。
メール自動送信手法
エクセルなどのテキストファイルに送信要件(宛先やCC、メール本文、添付ファイル)を指定し、対象pathデータを読み取りながらループ分でメール自動送信する機能です。コード行数は約300行程度になります。
添付ファイル付きのコード概要
- 必用ライブラリのインストール
- 複数添付ファイルの送信用コード(エクセル・csv・PDF・パワーポイント)
- エクセルに指定した条件(宛先やCC、メール本文、添付ファイル)を元にメール送信
- 自動送信時にエラーになりずらいtime.sleepの時間共有
- メール開封確認
サービス料
①スクリプト掲載ページの共有
サービス料:5万円
お支払い方法:PayPay想定
該当コードを利用すれば様々なメール送信に応用が可能です。送るメール数が多ければ費用対効果が高くなります。自身で最初からコード作成すると手間とノウハウがないので、コード修正で結果時間がかかると考えています。該当コードは何度かトライ&エラーして、改善してきたものになりますので、時短に貢献できると確信しています。
メール送信ノウハウが含まれていますので、前払いでお願い致します。プログラムを動作させるには、「宛先・送信元・メール設定環境・添付ファイルのpathなど」のファイル作成が必要です。その後、ファイルのpathやメール設定をプログラムに指定することで動きます。
②フォロー対応(上記①にて対応が困難だった場合の対応)
会社環境によってメール送信できないケースや、プログラムの変数設定など違う場合にメール自動送信できない可能性があります。zoomなどで状況を確認し対応いたします。
サービス料として1時間7,500円の対応になります。フォロー対応で解決できなかった場合は返金いたします。
ご質問やご依頼について
記事やDX化のご質問や依頼はServiceをご覧くださいませ。