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

PythonのSMTPクライアント(smtplib)でメールを送信する方法

Pythonの標準ライブラリにはsmtplibモジュールが用意されており、SMTPクライアントセッションオブジェクトが定義されています。このモジュールを利用することで、Pythonプログラムから手軽にメールを送信できます。

メールサーバーの基本的な仕組み

メールサーバーとは、インターネット上で電子メールの処理と配信を行うアプリケーションのことです。送信用メールサーバーはSMTP(Simple Mail Transfer Protocol)を実装しており、これは電子メール送信に関するインターネット標準規格となっています。

一方、受信用メールサーバーには主に次の2種類があります。

  • POP3(Post Office Protocol):メールをサーバーからダウンロードして管理する方式
  • IMAP(Internet Message Access Protocol):サーバー上のメールを直接参照・管理する方式

smtplib.SMTP()関数とは

この関数はSMTPクラスのオブジェクトを生成して返します。SMTPオブジェクトは、SMTPまたはESMTPサーバーへの接続をカプセル化し、管理する役割を担います。主な引数は以下の通りです。

host
接続先のリモートホスト名を表す文字列。
port
接続先のポート番号を指定する数値。省略した場合は smtplib.SMTP_PORT が使用されます。
local_hostname
HELO/EHLOコマンドで使用されるローカルホストのFQDN(完全修飾ドメイン名)。
source_address
ソケットをバインドする接続先を指定する (host, port) 形式の2要素タプル。

SMTPオブジェクトの主なメソッド

SMTPオブジェクトには、SMTP操作を支援するための以下のメソッドが用意されています。

  • connect() − 指定したポートでホストへの接続を確立します。
  • login() − ユーザー名とパスワードを引数に取り、SMTPサーバーにログインします。
  • quit() − SMTPセッションを終了します。
  • data() − 引数に渡されたメッセージ本文をサーバーへ送信します。
  • docmd() − コマンドを送信し、そのレスポンスコードを返します。
  • ehlo() − クライアントがサーバーに対して自身を識別します。
  • starttls() − TLSモードによる暗号化通信を開始します。
  • getreply() − サーバーからの応答をレスポンスコードとして受け取ります。
  • putcmd() − サーバーへコマンドを送信します。
  • send_message() − メッセージをバイト列に変換し、sendmailへ渡して送信します。
  • sendmail() − メール送信の一連のトランザクション全体を実行します。

sendmail()メソッドの引数

from_addr
送信元のメールアドレス。
to_addrs
送信先のメールアドレスのリスト。
msg
送信するメッセージ本体。

GmailのSMTPサーバーでメールを送信するサンプルコード

以下のコードは、GmailのSMTPサーバーを使ってメールを送信する例です。SMTPオブジェクトは smtp.gmail.com の587番ポートに接続し、ehlo()コマンドでサーバーを識別した後、starttls()によって送信メールにTLS(Transport Layer Security)による暗号化を有効にしています。

次に、login()メソッドに認証情報を渡して呼び出します。最後に、所定の形式でヘッダーを付加したメールメッセージを組み立て、sendmail()メソッドで送信します。送信後はSMTPオブジェクトを閉じて終了します。

import smtplib
content="HelloWorld"
mail=smtplib.SMTP('smtp.gmail.com',587)
mail.ehlo()
mail.starttls()
sender='pythonanytime@gmail.com'
recipient='mlathkar@gmail.com'
mail.login('pythonanytime@gmail.com','m15v5l61')
header='To:'+recipient+'\n'+'From:'\
+sender+'\n'+'subject:testmail\n'
content=header+content
mail.sendmail(sender,recipient, content)
mail.close()


スクリプト実行前の注意点

上記のスクリプトを実行する前に、送信側のGmailアカウントで「安全性の低いアプリ」からのアクセスが許可されている必要があります。以下のURLにアクセスし、表示されたトグルボタンをONにしてください。

https://myaccount.google.com/lesssecureapps

なお、現在Googleではこの設定が段階的に廃止されており、代わりにアプリパスワード(2段階認証を有効にした上で発行)の利用が推奨されています。環境に応じて適切な認証方法を選択してください。

設定を完了したらスクリプトを実行します。問題がなければ、メッセージが受信者の受信トレイに届きます。

  1. WordPressでSMTPメールを送信する設定方法|WP Mail SMTPプラグインの使い方を徹底解説

    デザイン性の高いWebサイトを手軽に構築できるWordPressですが、いくつか苦手な分野があります。そのひとつが、SMTPを使ったメール送信です。特にWooCommerceで商品を販売している場合や、顧客・会員・ユーザーと日常的にやり取りが必要な場合には、この問題が大きな障害となり得ます。MailgunやGoogle Appsなど、この課題を解決するサードパーティ製サービスは多数存在しますが、いずれも有料であり、誰もが気軽に導入できるわけではありません。WordPressのメール送信における問題点WordPressはPHPを基盤として動作していますが、多くのホスティング業者はセキュリティ対策

  2. Outlookを既定のメールアプリとして設定する2つの方法【Windows 10対応】

    Outlookをインストールした直後は、そのままでは既定のメールクライアントとして認識されないことがよくあります。メールの送受信のたびに複数のメールソフトを行き来するのは非効率ですよね。そこで、Outlookを既定のメールアプリとして設定しておきましょう。Windows 10をお使いの方なら、標準のメールアプリとして新しい「メール」アプリが設定されていることにお気づきかもしれません。この新しいメールアプリが好みでない場合、Webページ上のメールリンク(MailTo)をクリックするたびに、意図せず「メール」アプリが起動してしまい、煩わしく感じることがあります。Outlookが既定のメールクライア