Python PR

【Python】メールを送信する方法を解説

記事内に商品プロモーションを含む場合があります

この記事では、Pythonを使ってメールを送信する方法を解説します。

Pythonにはメールを送信するための標準モジュールが用意されているので簡単に実装することができます。また、複数の宛先に同じ内容のメールを自動で送信することもできます。

それでは、メールを送信する方法を見ていきましょう!

メールを送信するには?

Pythonを使ってメールを送信するには以下のような手順で行います。

  1. MIMEでメールを作成
  2. SMTPサーバーに接続・ログイン
  3. 作成したMIMEを送信

SMTPとは、Simple Mail Transfer Protocol(シンプル・メール・トランスファー・プロトコル)の略で、メールを送信するための通信プロトコルの1つです。

MIME(マイム)とは、電子メールを扱うための規格です。

どちらも標準モジュールを使うことで簡単に扱えるのでそこまで気にする必要はありません。

メールを送信する方法

それでは、実際にPythonでメールを送信する方法を見ていきましょう!

必要な情報を定義

接続先のSTMPサーバーのドメイン名やポート番号、ログインするためのユーザーネームとパスワード、送受信先のアドレスなどを変数として定義しておきましょう!

# 接続先の情報
smtp_host = 'ホスト'
smtp_port = 465
# アカウント情報
username = 'ユーザーネーム'
password = 'パスワード'
# 送受信先のアドレス
from_address = '送信元のアドレス'
to_address = '送信先のアドレス'

メール作成

メールを作成するには、email.mime.text.MIMEText()クラスを使います。作成したインスタンスから辞書のように件名やアドレスなどを指定します。

from email.mime.text import MIMEText

# MIMETextインスタンスの作成
msg = MIMEText('メール本文')
msg["Subject"] = "件名"
msg["To"] = "送信先のアドレス"
msg["From"] = "送信元のアドレス"

SMTPサーバーにログイン

SMTPサーバーにログインするには、smtplib.SMTP()クラスを使ってSMTPインスタンスを作成し、login()メソッドからログインします。

import smtplib

# SMTPインスタンスの生成
smtp = smtplib.SMTP('ホスト'、 ポート番号)

# ログイン
smtp.login('アカウント名', 'パスワード')

ただし、このままだと通信が傍受された際にアカウント名やパスワードが筒抜けなのでSSL接続で暗号化する必要があります。

# sslをインポート
import smtplib, ssl

# SSL接続するSMTPインスタンスの生成
smtp = smtplib.SMTP_SSL('ホスト'、 ポート番号, context=ssl.create_default_context())

# ログイン
smtp.login('アカウント名', 'パスワード')
SSL接続を行う際には、ポートの変更が必要な場合があります。サービス提供元のサイトを確認してみましょう!

メール送信

作成した SMTPインスタンスのsend_message()メソッドでメールを送信します。

# メール送信
smtp.send_message(作成したMIMEを指定)

gmailにメールを送信してみる

まずは、サービス提供元のサイトからSMTPサーバーのドメイン名とポート番号を入手します。

Linkプリンタ、スキャナ、アプリからのメール送信 - Google Workspace 管理者 ヘルプ

上記サイトを開き、下の方にスクロールすると「Gmail SMTP サーバーを使用する」という項目があります。その中の要件でドメイン名とポート番号を確認します。

また、Pythonからの接続は安全性が低いとみなされログインしようとするとはじかれてしまいます。なので、「Googleアカウントの管理」の「セキュリティ」で「安全性の低いアプリのアクセス」を「オン」に変更します。

さて、これで下準備が完了したのでようやくコードを書いていきます。アドレスやパスワードは自分のに書き換えて使ってください。

import smtplib, ssl
from email.mime.text import MIMEText

# 接続先の情報
smtp_host = 'smtp.gmail.com'
smtp_port = 465
# ログイン情報
username = 'あなたのアドレス@gmail.com'
password = 'パスワード'
# 送受信先のアドレス
from_address = '送信元のアドレス@gmail.com'
to_address = '送信先のアドレス@gmail.com'

# MIMETextインスタンスの作成
msg = MIMEText('テストメール')
msg["Subject"] = "Pythonから送信"
msg["To"] = to_address
msg["From"] = from_address

# SSL接続するSMTPインスタンスの生成
smtp = smtplib.SMTP_SSL(smtp_host, smtp_port, context=ssl.create_default_context())
# ログイン
smtp.login(username, password)
# メール送信
smtp.send_message(msg)

このコードを実行すると、以下のようなメールが「Gmail」に届きます。

これでPythonを使って自分から自分にメールを送信することができました。これらを応用することで同じ内容のメールを複数の宛先に送ることもできます。