こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
【RPA】メール自動送信ツールとは?
メール自動送信ツールとは、
「メール業務を自動化する意義」「メールの自動化が適用できる業務シーン」等を詳しく知りたい方は、まずこちらの記事をご覧ください。
【RPA】メール確認・メルマガ配信業務の自動化・マーケティングオートメーションの実現方法を徹底解説
面倒なメール作業をRPAで自動化したいが方法が分からない。そもそもメール作業の何が自動化できるか分からない。本記事では、このような疑問に答えます。また、メールマーケティング・マーケティングオートメーション(MA)の実現方法も詳しくご紹介しています。
メール自動送信ツールの作成対象
本記事では、上図部分をPythonプログラムでカバーします。メール自動送信ツール作成の第一歩として、単純なメールリストをもとにメール自動送信できるツールの構築を目指してみましょう。
【参考】手軽に利用可能なメール配信システム・おすすめ学習法
Python言語で構築することに障壁がある方向けに、ノーコードかつ手軽にメール配信を実施できるシステムを紹介します。Pythonで実装したメール機能と上記システム機能を比較し、お好みの方法を選択することをおすすめします。
Pythonを活用してメール受信・配信タスクの自動化手法を深く学びたい方向けに、おすすめの教材も併せてご紹介します。
【Python】Gmailを用いたメール送信自動化ツールの作成手順
上図のような手順のもとにプログラムを構築します。まずは全体像を掴みましょう。
【参考】メール送信に伴う通信規定
SMTP
SMTP(Simple Mail Transfer Protocol)とは、メール送信するためのプロトコルです。メール送信時の暗号化やメールサーバー間の中継方法について規定しています。
SMTPで使用されるポートは、「25」「587」「465」「2525」があります。その中でも587番ポートは、SMTPサブミッションに用いる現代のデフォルトポートとして広く利用されています。SMTPを設定する場合、まずは587番ポートを検討しましょう。
IMAP
IMAP(Internet Message Access Protocol)とは、メール受信のためのプロトコルです。IMAPの場合、メールはサーバ上での保管が特徴であるため、メールのステータス(既読・未読・削除)等も全てサーバで管理されます。
POP
POP(Post Office Protocol)とは、メール受信のためのプロトコルです。プロトコルがバージョン3であるため、POP3とも呼ばれます。IMAPとの違いは、メール保管方法にあります。POPの場合、メールはサーバーからスマホ・PC端末にダウンロードされて管理されます。
SSL/TLS
SSL(Secure Sockets Layer)およびTLS(Transport Layer Security)は、インターネット上のデータを暗号化し、送受信するためのプロトコルです。個人情報やクレジットカード、パスワードなどのデータを暗号化し、データの改ざんや盗聴を防止します。
Gmailのアプリパスワードを事前に取得する
Gmailのアプリパスワードを作成していない場合、事前作成が必要です。下記の手順に従い、アプリパスワードを生成しましょう。(※普段Gmailにログインするパスワードとアプリパスワードは別のものです。)
- Googleアカウントを開く(上図参照)
- セキュリティを開く
- 2段階認証プロセスをONにする
- アプリパスワードを生成する
【Python】メール送信自動化ツールを実際に作成
それでは実際にPythonを用いてメール自動送信ツールを作成していきます。
SMTPサーバー接続
「smtplib」モジュールよりサーバーに接続します。以下コードを記載ください。
# SMTP接続用
import smtplib
# SMTPサーバー名とポート番号指定
smtp = smtplib.SMTP("smtp.gmail.com",587)
# サーバーと接続を確立
smtp.ehlo()
以下それぞれコードの意味を説明していきます。smtpオブジェクトは、SMTPサーバー名とポート番号の指定し、接続するために記載します。
# SMTPサーバー名とポート番号指定
smtp = smtplib.SMTP(SMTPサーバー名,ポート番号)
今回はGmailを利用していますが、以下のSMTPサーバー名を記載することで別プロバイダーを指定することも可能です。
プロバイダー | SMTPサーバー名 |
---|---|
Gmail | imap.gmail.com |
Yahoo Mail | imap.mail.yahoo.com |
Outlook.com | imap-mail.outlook.com |
続いて、先ほど定義したsmtpオブジェクトに対して、ehlo()メソッドを用います。これは、サーバーとの接続を確立させる重要なメソッドです。以下を実行した際、戻り値として(250, b’smtp.gmail.com at your service)という整数250が得られた場合は「SMTPサーバー接続成功」を意味します。
# サーバーと接続を確立
smtp.ehlo()
TLS暗号化
SMTPサーバーを587番ポートで接続した場合、TLS暗号化を使用することになります。以下コードを記載してみましょう。
smtp.starttls()
starttls()メソッドで暗号化します。上記実行時に戻り値に220が得られた場合は「サーバー準備完了」を意味します。
SMTPサーバーにログイン
SMTPサーバーとのTLS暗号化が完了できたら、メールアドレスとパスワードを用いてサーバーにログインします。以下コードを記載してみましょう。ここで、メールアドレスはGmailアドレスを用い、パスワードは事前に取得したアプリパスワードを記載しましょう。
# メールコンテンツ作成
my_mail = "メールアドレスを入力"
app_password = "パスワードを入力"
smtp.login(my_mail,app_password)
login()メソッドの第一引数にメールアドレス、第二引数にパスワードを渡して実行するとログインできます。実行の結果、戻り値として(235, b’2.7.0 Accepted’)が得られたらSMTPサーバーログイン成功を意味します。
メール作成
次にメール作成に必要な情報を入力していきます。以下コードを記載してみましょう。
""" メール作成の日本語対応するためのモジュール読込 """
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
charset = "iso-2022-jp"
""" 以下編集が必要な部分 """
From = my_mail
To = "送信先を入力"
Cc = "Cc先を入力" #不要な場合この行を削除
Bcc = "Bcc先を入力" #不要な場合この行を削除
Kenmei = "件名を入力"
Body = "本文をここに入力"
#メール本文を読み込み
msg = MIMEMultipart()
msg.attach(MIMEText(Body))
msg["Cc"] = Cc #不要な場合この行を削除
msg["Bcc"] = Bcc #不要な場合この行を削除
msg["Subject"] = Header(Kenmei.encode(charset),charset)
以下コードを解説していきます。まず、日本語のメールを送信する際、エラーにならないよう対応が必要です。日本語対応するためのモジュールを以下のように記載します。ここはコピペで問題なしです。
""" メール作成の日本語対応するためのモジュール読込 """
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
charset = "iso-2022-jp"
続いて、メール作成に参りましょう!To, Cc, Bccで宛先を指定します。CcやBccが不要な場合は削除してOKです。その際はmsg[“Cc”]およびmsg[“Bcc”]も一緒に削除しましょう。
メール本文を記載する際、改行する場合は、”\n”と記載しましょう。
""" 以下編集が必要な部分 """
From = my_mail
To = "送信先を入力"
Cc = "Cc先を入力" #不要な場合この行を削除
Bcc = "Bcc先を入力" #不要な場合この行を削除
Kenmei = "件名を入力"
Body = "本文をここに入力\n本文をここに入力\n本文をここに入力"
宛先を複数追加したい場合、以下のようにカンマ区切りで記載しましょう。
To = "example1@gmail.com" + "," + "example2@gmail.com"
ファイル添付
メールにファイルを添付したい場合、下記のように入力します。
from email.mime.application import MIMEApplication
import os
# ファイルディレクトリ指定
filename = 'ファイル名.docx'
filepath = os.path.basename(filename)
# ファイル読込
with open(filename, "rb") as f:
AtchFile = MIMEApplication(f.read())
# ファイル添付
AtchFile.add_header("Content-Disposition", "attachment", filename = filepath)
msg.attach(AtchFile)
ファイル添付する際のコードは基本的に上記コピペで問題無しです。唯一考慮すべき点は、添付ファイルのディレクトリ設定です。Python実行スクリプトと同じディレクトリにファイルを格納する場合は、上記ファイル名(filename)部分のみ変更いただければと思います。
メール送信
実際にメールを送信します。以下コードを記載しましょう。
smtp.sendmail(From,To,msg.as_string())
第一引数に自信のメールアドレス、第二引数に宛先、第三引数にメールのテキストメッセージを渡し、sendmail()メソッドを実行すると、メールが送信されます。
SMTPサーバーと接続遮断
メール送信後はSMTPサーバーとの接続遮断を忘れずに行います。quit()メソッドをもとに、以下コードを記載しましょう。
smtp.quit()
【まとめ】Pythonメール送信ツールの全体コード
最後に本日学習したコードを関数の形で全量記載します。
全体コード(1):ファイル添付あり
ファイル添付したメール送信作業の自動化を検討される際は、こちらが有効です。
""" インポート文(編集不要) """
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
import os
charset = "iso-2022-jp"
""" メール本文情報(要編集)"""
To = "宛先を入力"
Subject = "件名を入力"
MailBody = "本文を入力"
FileName = 'ファイル名.docx'
def gmail_send(To,Subject,MailBody,FileName):
""" メール設定(要編集)"""
#SMTPサーバー接続・ログイン情報
my_mail = "自信のメールアドレスを入力"
app_password = "パスワードを入力"
smtp = smtplib.SMTP("smtp.gmail.com",587)
""" メール本文(編集不要)"""
From = my_mail
Atesaki = To
Kenmei = Subject
Body = MailBody
#メール本文を読込
#msg = MIMEText(Body,"plain",charset)
msg = MIMEMultipart()
msg.attach(MIMEText(Body))
msg["Subject"] = Header(Kenmei.encode(charset),charset)
""" 添付ファイル(編集不要)"""
#ファイルディレクトリ指定
filename = FileName
filepath = os.path.basename(filename)
#ファイル読込
with open(filename, "rb") as f:
AtchFile = MIMEApplication(f.read())
#ファイル添付
AtchFile.add_header("Content-Disposition", "attachment", filename = filepath)
msg.attach(AtchFile)
""" メールサーバー接続(編集不要)"""
#サーバー・ポート接続
smtp.ehlo()
#TLS暗号化
smtp.starttls()
#SMTPサーバーログイン
smtp.login(my_mail,app_password)
#メール送信
smtp.sendmail(From,Atesaki,msg.as_string())
#SMTPサーバー遮断
smtp.quit()
print("メールを送信しました。")
第一引数に宛先、第二引数に件名、第三引数にメール本文、第四引数に添付ファイル情報を渡した関数を作成しました。以下を実行し、動作確認してみましょう。
gmail_send(To,Subject,MailBody,FileName)
全体コード(2):ファイル添付なし
ファイル添付の操作が不要な場合はこちらの関数を活用ください。
""" インポート文(編集不要) """
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
import os
charset = "iso-2022-jp"
""" メール本文情報(要編集)"""
To = "宛先を入力"
Subject = "件名を入力"
MailBody = "本文を入力"
def gmail_send(To,Subject,MailBody):
""" メール設定(要編集)"""
#SMTPサーバー接続・ログイン情報
my_mail = "自信のメールアドレスを入力"
app_password = "パスワードを入力"
smtp = smtplib.SMTP("smtp.gmail.com",587)
""" メール本文(編集不要)"""
From = my_mail
Atesaki = To
Kenmei = Subject
Body = MailBody
#メール本文を読込
#msg = MIMEText(Body,"plain",charset)
msg = MIMEMultipart()
msg.attach(MIMEText(Body))
msg["Subject"] = Header(Kenmei.encode(charset),charset)
""" メールサーバー接続(編集不要)"""
#サーバー・ポート接続
smtp.ehlo()
#TLS暗号化
smtp.starttls()
#SMTPサーバーログイン
smtp.login(my_mail,app_password)
#メール送信
smtp.sendmail(From,Atesaki,msg.as_string())
#SMTPサーバー遮断
smtp.quit()
print("メールを送信しました。")
【参考】Pythonで面倒な作業を自動化!手法一挙公開中!
当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。
【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧
【参考】Pythonとは?・実現できること
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら