Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでGmailからメールを送信する方法|smtplibの使い方を徹底解説

はじめに

この記事では、Pythonを使って添付ファイル付きのメールを送信する方法を解説します。メール送信のために外部ライブラリをインストールする必要はありません。Pythonには標準で「smtplib」というモジュールが同梱されており、SMTP(Simple Mail Transfer Protocol)を利用してメールを送ることができます。このモジュールは、メール送信用のSMTPクライアントセッションオブジェクトを生成します。

SMTPを利用するには、有効な送信元・宛先のメールアドレスとポート番号が必要です。ポート番号はサービスによって異なり、たとえばGoogleの場合は587を使用します。

まず、メール送信に必要なモジュールをインポートしましょう。

import smtplib

さらに柔軟なメール構築を実現するために、MIME(Multipurpose Internet Mail Extension)モジュールも併用します。MIMEヘッダーを使えば、送信者・受信者の情報や件名などの詳細データを格納できます。

Gmailで送信するための事前設定

ここではGoogleのGmailサービスを使ってメールを送信します。Googleのセキュリティポリシー上、あらかじめ設定が必要な場合があります。設定を行っていないと、Googleがサードパーティ製アプリからのアクセスを許可しておらず、後述のコードが動作しないことがあります。

アクセスを許可するには、Googleアカウントの「安全性の低いアプリのアクセス」設定を有効にします。ただし、2段階認証を有効にしているアカウントでは、「安全性の低いアプリのアクセス」は利用できません。

設定するには、Googleの管理コンソールにアクセスし、「安全性の低いアプリ」の設定を検索してください。

PythonでGmailからメールを送信する方法|smtplibの使い方を徹底解説

補足: 現在、Googleは「安全性の低いアプリのアクセス」を段階的に廃止しています。2段階認証を有効にしている場合は、代わりに「アプリパスワード」を発行して使用する方法が推奨されます。Googleアカウントのセキュリティ設定画面からアプリパスワードを生成し、コード内のパスワード欄に入力してください。

smtplibでメールを送信する手順

  • MIMEオブジェクトを作成する
  • MIMEに送信者・受信者のアドレスを追加する
  • MIMEにメールの件名を追加する
  • MIMEに本文を追加する
  • 適切なセキュリティ機能を備えた有効なポート番号でSMTPセッションを開始する
  • ログインする
  • メールを送信して終了する

サンプルコード

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

mail_content = '''こんにちは。
これはシンプルなテストメールです。テキストのみで、添付ファイルはありません。
PythonのSMTPライブラリを使って送信しています。
ありがとうございます。'''

# 送信者・受信者のメールアドレスとパスワード
sender_address = 'sender123@gmail.com'
sender_pass = 'xxxxxxxx'
receiver_address = 'receiver567@gmail.com'

# MIMEのセットアップ
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'Pythonから送信されたテストメールです'   # 件名

# 本文をプレーンテキストとしてMIMEに追加
message.attach(MIMEText(mail_content, 'plain'))

# メール送信用のSMTPセッションを作成
session = smtplib.SMTP('smtp.gmail.com', 587) # GmailのSMTPサーバーに接続
session.starttls() # TLSによる暗号化を有効化
session.login(sender_address, sender_pass) # メールアドレスとパスワードでログイン
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()
print('Mail Sent')

実際にファイルを添付する場合

上記のコードはテキストのみの送信例です。PDFや画像などのファイルを添付したい場合は、email.mime.applicationモジュールのMIMEApplicationを使って、次のようにMIMEオブジェクトへ追加します。

from email.mime.application import MIMEApplication

# ファイルをバイナリで読み込んで添付
with open('sample.pdf', 'rb') as f:
    attach = MIMEApplication(f.read(), _subtype='pdf')
attach.add_header('Content-Disposition', 'attachment', filename='sample.pdf')
message.attach(attach)  # sendmailの前に追加する

実行結果

D:\Python TP\Python 450\linux>python 327.Send_Mail.py
Mail Sent

スクリプトを実行すると「Mail Sent」と表示され、指定した宛先にメールが届きます。エラーが出る場合は、アプリパスワードの設定やポート番号(587)、インターネット接続を確認してみてください。

PythonでGmailからメールを送信する方法|smtplibの使い方を徹底解説

  1. 【解決】Gmailで「メッセージが配信されませんでした」と表示される場合の対処法|「Send mail as(別のアドレスから送信)」機能のエラーを修正

    Gmailの「メッセージが配信されませんでした」エラーとは Gmailで「メッセージが配信されませんでした。別のアドレスまたはエイリアスから「Send mail as(別のアドレスから送信)」機能を使用して送信しています」というエラーが表示される場合、メールの送信に使用した追加のメールアカウントの設定が正しく行われていないことが原因です。 Gmailには、自分が所有する別のメールアドレスを使ってメールを送信できる「Send mail as(別のアドレスから送信)」機能が用意されています。この機能を利用するには、使用したいメールアカウントに必要な設定情報(ユーザー名・パスワード・SMTPサーバー

  2. Gmailアカウントを削除する方法をわかりやすく解説

    スパムメールやショッピングサイトからの宣伝メールにうんざりしている、古いGmailアカウントをもう使っていない、あるいはアカウントが不正アクセスされた疑いがある——そんなときは、Gmailアカウントを削除するのがひとつの選択肢です。実は、Gmailアカウントだけを削除しても、YouTubeなどその他のGoogleアカウントはそのまま残しておくことができます。Gmailアカウントを削除する前の準備Gmailアカウントの削除作業自体はとても簡単です。ただし、削除を実行する前に、以下の点を必ず確認しておきましょう。そのメールアドレスで登録していたサービス(サブスクリプションやSNSなど)の登録解除銀