今回の仕様
下のメールをCSVファイルに格納したデータをもとに、
◯◯の部分をPythonで本名に書き換え、それぞれのメールアドレスへ一斉送信します。
お世話になります。
「tetoblog」を運営しております前田と申します。
約束していた物品を、〇〇さま宛に発送いたしましたので、ご連絡いたしました。
今後とも、よろしくお願いいたします。
前田
今回のGmailの一斉送信をPythonで実現するためには、
Googleアカウントが必要となります。
持っていない方はGoogleアカウントの作成をお願いします。
CSVファイルを準備
まず、CSVファイルを準備しましょう。
エクセルやスプレッドシートなど、何でも結構です。
ファイル名を「AddressDate.csv」として、適当な名前とメール受信可能なメールアドレスを記入しておきます。
今回はこのCSVファイルを用いて、Gmailの一括送信を可能にします。
必要なパッケージのインポート
import smtplib
import csv
from email.mime.text import MIMEText
これらはメール送信するために必要なパッケージです。
1行目のsmtplibについて、
smtpはアプリケーション層のプロトコルを指すのですが、
メールを送信する際はこの通信規格をインポートする必要があります。
2行目のcsvについて、
後半でcsvファイルからデータを取得するのでcsvもインポートしておきます。
3行目のMIMETextについて、
MIMEはメールを送る際に「このメールはテキストです」「このメールはHTMLです」とか、ファイルの種類の情報を入れるためにMIMETextをインポートする必要があります。
MIMEについてはこちらの記事が参考になります。
>>MIMEタイプとは
メール送信の際は「smtplib」と「MIME」が必要となることだけをイメージして、
おまじない程度にこの2つをインポートしておきましょう。
メール送信のクラス作成
#メール送信のクラス
class Send:
# 初期化
def __init__(self, AddressTo, subject, text):
self.password = "<自分のGmailパスワードを記入>"
self.AddressFrom = "<自分のGmailアドレスを記入>"
self.AddressTo = AddressTo
self.subject = subject
self.text = text
self.charset = "UTF-8"
def send(self):
#メールの主要設定
msg = MIMEText(self.text.encode(self.charset), 'plain', self.charset)
msg['From'] = self.AddressFrom
msg['To'] = self.AddressTo
msg['Subject'] = self.subject
#メールの詳細設定
smtp = smtplib.SMTP('smtp.gmail.com', 587)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(self.AddressTo, self.password)
smtp.send_message(msg)
smtp.close()
次にSendクラスを作成します。
送信する際にSendクラスを呼び出せばメールが送信される、核のようなクラスです。
4〜10行目について、
初期値を設定しているだけなのであまり深く考えなくていいです。
13〜17行目ではメッセージを組み立て、19〜26行目で送信するための細かい設定を行っています。
20行目がよくわからない方が多いと思いますが、ポート番号を「587」に指定しています。
ただ、ここもちょっとややこしいので、わからない方はおまじない程度の理解で大丈夫です。
もし自力でコードを完成させたいときは、
「Python メール」で検索してもらえればこの辺りの記事がたくさんあると思うので調べてみてくださいね。
メール本文の関数を定義
def MailText(Name):
text = """
{}さま
お世話になります。
「tetoblog」を運営しております前田と申します。
約束していた物品を、{}さま宛に発送いたしましたので、ご連絡いたしました。
今後とも、よろしくお願いいたします。
""".format(Name, Name)
return text
メールの本文部分を作成します。
format関数で引数として受け取った名前を入れ込んでいます。
このformat関数によって、Gmailでの一斉送信を可能にしています。
CSVファイルの読み込み・実行
#データの読み込み
file = 'AddressDate.csv' #パスを相対パスで指定
with open(file, 'r') as f:
date = csv.reader(f)
header = next(date) #ヘッダーの読み込み
for row in date:
# 名前、アドレスをCSVから取得
Name = row[0] #名前
Email = row[1] #メールアドレス
# メール内容
AddressTo = Email
subject = "【Python】Gmail送信"
text = MailText(Name)
mailer = Send(AddressTo, subject, text)
mailer.send()
2行目について、
前半で作ったCSVファイルを相対パスでパスを通しています。
CSVファイルがPythonコードを記述しているファイルと同じファイルに入っていれば、
僕と同じ記述になりますが、そうでない場合は自分の環境に合ったパスを記述しましょう。
7行目のfor文で、
CSVファイルを1行目から順番にメールアドレスと名前に分けて取得しています。
エラーが起こった場合
Pythonを用いたGmailの送信でのエラーの、解決方法を載せておきます。
こちらのGmailのサイトにある「問題を解決する」の項目からもエラーを発見できますので御覧ください。
安全性の低いアプリのアクセスを許可
まず、こちらのサイトにアクセスします。
アクセスして、下へスクロールすると下記の画面が出てきますので、
「安全性の低いアプリがアカウントにアクセスすることを許可します」をクリックします。
次に、「アカウントで[安全性の低いアプリの許可]がオンになっている場合」をクリックして開けます。
次に、下の画像の通り、「[安全性の低いアプリのアクセス]」をクリックしましょう。
最後に、「安全性の低いアプリの許可」が有効になっていることを確認しましょう。
Gmailの設定のデフォルトでは無効となっているので、有効に変える必要があります。
これでも、もしエラーが解決しなければ、
こちらのGmailのサイトにある「問題を解決する」の項目から原因を確認してください。
2段階認証をオンにしている方は、このGmailのサイトから設定が必要なので、ゆっくり確認してみてください。
ということで、Pythonでgmailの一斉送信する方法を紹介しました!
最後まで読んでいただき、ありがとうございました\(^o^)/
あなたにオススメの本
【独習Python】
高評価レビュー多数の、Pythonを完璧にマスターできる参考書です。
この1冊でPythonのほとんどが完結する、間違いのない本ですよ\(^o^)/
【LIFE SHIFT(ライフ・シフト)】
100年ライフを作ることができる名著です。
生き方の大きな転換期と考えられている今だからこそ、読んでおくべきおすすめ本です(^^)