Python

【簡単】Pythonを使ってemail(メール)を送る方法【smtplib/gmail】

Python メール smtplib gmail
Pythonを使ってメールを送りたい人
Pythonを使ってメールを送りたい人
メールの送信で、毎回「新規作成」するのメンドイな…。

メールの送信をPythonを使って自動化したいな…。

この記事では、上記のような悩みを解決していきます。

 

この記事の想定読者

  • Pythonを使ってメールを送信したい人
  • 有給申請など、テンプレ化できるものは自動で送れるようにしたい人

想定している読者は、上記のとおりです。

 

この記事では、「Pythonを使ってメールを送信する方法」について書いていきます。

今回はGmailを使って紹介していきますが、少し内容を変えるだけでYahoo!やoutlookなんかも使えるようになります。

なので手順としては、この記事を読んでいただければ問題ありません。

 

スクリプトの全貌

from email import message
import smtplib

# gmailで送信する場合の、SMTPのhostとport
smtp_host = 'smtp.gmail.com'
smtp_port = 587
# 自分のメールアドレス, ユーザー名, パスワード
from_email = 'xxxx@gmail.com'
username = 'xxxx@gmail.com'
password = 'xxxx'
# 宛先(gmail以外でもOKです)
to_email = 'xxx@gmail.com'

# インスタンスの生成
msg = message.EmailMessage()

# 件名
msg['Subject'] = "test subject"
# 送信元のメールアドレス
msg['From'] = from_email
# 送信先のメールアドレス
msg['To'] = to_email
# メールの本文
msg.set_content("test content")

# 下記通信用
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.send_message(msg)
server.quit()

 

これでOKですね。メールアドレスとか、テキストの中身を編集してあげればOKです。

 

【簡単】Pythonを使ってemail(メール)を送る方法【smtplib/gmail】

 

Pythonを使ってメールを送信する方法を書いていくのですが、その前に準備しておくべきことがあります。

 

準備 : 安全性の低いアプリを許可する

 

まずは、Pythonのスクリプトを実行する前に、自分のgmailアカウントで設定することがありまして、「安全性の低いアプリを許可する」にしましょう。

デフォルトだと、gmailのセキュリティ保護のために「オン」になっているはず。

これをオフにしないと、スクリプトを実行できません。

参考ページ >> 安全性の低いアプリと Google アカウント

 

Pythonからgmailでメールを送る

 

安全性の低いアプリを許可したら、あとはコードを書いていくだけです。

 

まずは、必要な標準ライブラリをインポートしましょう。

from email import message
import smtplib

 

この2つがあれば、とりあえず簡単なメール送信ができます。

※添付ファイルを載せたり、日本語を取り扱う場合には、もう少し工夫が必要になります。

 

次に、gmailへのアクセスや、送信先のメールアドレスを書いていきます。

smtp_host = 'smtp.gmail.com'
smtp_port = 587
from_email = 'xxxx@gmail.com'
username = 'xxxx@gmail.com'
password = 'xxxx'
to_email = 'xxx@gmail.com'

smtp_hostsmtp_portは、gmailから送信する場合、このままでOKです。

  • from_email : 送信元(From)のメールアドレス
  • username : 送信元のメールアドレスと同じ
  • password : gmailアカウントのパスワード
  • to_email : 送信先(To)のメールアドレス

あとは、上記のとおりです。

 

ここまで書けたら、メールの内容を作成していきましょう。

msg = message.EmailMessage()

msg['Subject'] = "test subject"
msg['From'] = from_email
msg['To'] = to_email
msg.set_content("test content")

message.EmailMessageでインスタンスを生成したあと、それぞれ必要事項を埋めていきます。

set_content()は、本文の中身になります。

 

最後に、SMTPを使って通信することで、メールを送信します。

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.send_message(msg)
server.quit()

ehlo()は、Extended HELLOの略で、要するに「メールサーバーに挨拶する(接続を試みる)」です。

ここら辺の7行は、そのまま流用してあげれば良いかなと思います。

 

すべて足し合わせると、冒頭でも紹介したようなスクリプトが完成します。

from email import message
import smtplib

# gmailで送信する場合の、hostとport
smtp_host = 'smtp.gmail.com'
smtp_port = 587
# 自分のメールアドレス, ユーザー名, パスワード
from_email = 'xxxx@gmail.com'
username = 'xxxx@gmail.com'
password = 'xxxx'
# 宛先
to_email = 'xxx@gmail.com'

# インスタンスの生成
msg = message.EmailMessage()

# 件名
msg['Subject'] = "test subject"
# 送信元のメールアドレス
msg['From'] = from_email
# 送信先のメールアドレス
msg['To'] = to_email
# メールの本文
msg.set_content("test content")

# 下記通信用
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.send_message(msg)
server.quit()

 

gmail以外でも、HOSTとPORTさえ分かれば、使い分けできますので、お試しあれ。

各社SMTPまとめ

  • yahoo! : smtp.mail.yahoo.co.jp , 465
  • outlook : smtp.office365.com, 587

gmail以外で、割と主要なところを上げました。その他は、〇〇 smtpで調べてみてください。

 

おしまいです(`・ω・´)!

 

おすすめの記事