Python

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

この記事では、Pythonを使ってメールを送信する方法を解説します。Pythonにはメールを送信するための標準モジュールが用意されているので簡単に実装することができます。

メールを送信するには?

Pythonを使ってメールを送信するには、MIMEでメールを作成SMTPサーバーに接続・ログイン作成した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を使って自分から自分にメールを送信することができました!

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』