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段階認証を有効にした上で発行)の利用が推奨されています。環境に応じて適切な認証方法を選択してください。
設定を完了したらスクリプトを実行します。問題がなければ、メッセージが受信者の受信トレイに届きます。
-
WordPressでSMTPメールを送信する設定方法|WP Mail SMTPプラグインの使い方を徹底解説
デザイン性の高いWebサイトを手軽に構築できるWordPressですが、いくつか苦手な分野があります。そのひとつが、SMTPを使ったメール送信です。特にWooCommerceで商品を販売している場合や、顧客・会員・ユーザーと日常的にやり取りが必要な場合には、この問題が大きな障害となり得ます。MailgunやGoogle Appsなど、この課題を解決するサードパーティ製サービスは多数存在しますが、いずれも有料であり、誰もが気軽に導入できるわけではありません。WordPressのメール送信における問題点WordPressはPHPを基盤として動作していますが、多くのホスティング業者はセキュリティ対策
-
Outlookを既定のメールアプリとして設定する2つの方法【Windows 10対応】
Outlookをインストールした直後は、そのままでは既定のメールクライアントとして認識されないことがよくあります。メールの送受信のたびに複数のメールソフトを行き来するのは非効率ですよね。そこで、Outlookを既定のメールアプリとして設定しておきましょう。Windows 10をお使いの方なら、標準のメールアプリとして新しい「メール」アプリが設定されていることにお気づきかもしれません。この新しいメールアプリが好みでない場合、Webページ上のメールリンク(MailTo)をクリックするたびに、意図せず「メール」アプリが起動してしまい、煩わしく感じることがあります。Outlookが既定のメールクライア