pythonのsmtplibを使用しYahoo!メールで他社メールのアドレスにメールを送信する

スポンサーリンク

pythonのsmtplibを使用しYahoo!メールで他社メールのアドレスにメールを送信します。

今回はsmtplibを用います。このライブラリ・モジュールはpythonの標準ライブラリですので、事前にインストールする必要はありません。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■Yahoo!メールでの設定(IMAP/POP/SMTPアクセス)

では、smtplibを使用しYahoo!メールで他社メールのアドレスにメールを送信してみますが、その前にYahoo!メールでの設定が必要になります。設定するために、WebブラウザでYahoo!メールを開き、取得したアカウントでログインを行います。

ログインすると、メール画面が表示されます。この画面の右上に歯車マークがありますので、こちらをクリックします。

クリックすると、「設定」のウインドウが表示されます。ウインドウ内の左メニューから「便利機能」の「IMAP/POP/SMTPアクセス」をクリックします。

クリックすると、「IMAP/POP/SMTPアクセス」の項目が表示され、「Yahoo! JAPAN公式サービスを利用したアクセスのみ有効にする」か、「Yahoo! JAPAN公式サービス以外からのアクセスも有効にする」かのいずれかを選択します。今回は「Yahoo! JAPAN公式サービス以外からのアクセスも有効にする」を選択します。

選択すると、追加の設定項目が表示されますので、今回は「IMAP」を「有効にする」、「POP」を「有効にする」、「「受信箱」のメールのみ受信する」、「SMTP」を「有効にする」に設定します。設定後、「保存」ボタンをクリックすると、設定が保存されます。

保存後、「IMAP/POP/SMTPアクセス」項目の下に表示された「設定情報」をクリックします。

クリックすると、メールソフトなどで送受信する際の設定情報が表示されます。この情報は使用するので、情報を記録しておきます。特に今回はメールを「送信」するため、送信メール(SMTP)の情報は必要です。

■smtplibを使用しYahoo!メールで他社メールのアドレスにメールを送信する

Yahoo!メールでの設定は完了しましたので、smtplibを使用しYahoo!メールで他社メールのアドレスにメールを送信するスクリプトを書いていきます。

■コード

import smtplib
from email.message import EmailMessage

msg = "テストです。(本文)"
from_ ="送信元のメールアドレス"
to_="送信先のメールアドレス"
subject ="テスト送信です。タイトル"

em = EmailMessage()
em.set_content(msg)
em['From'] = from_
em['To'] = to_
em['Subject'] = subject

server = smtplib.SMTP_SSL(host="送信メール(SMTP)サーバー", port=465)

server.login('Yahoo!JAPANのアカウント名/ログイン名(ID)','パスワード')

server.send_message(em)

print('メールの送信が完了しました')

importでsmtplibモジュールを呼び出し、さらに「from import」でpythonの標準ライブラリである電子メールおよびMIME(電子メールのフォーマット規格)処理であるemailのemail.messageのEmailMessageを呼び出します。

その後、msg,from_,to_,subjectという各変数を定義し、本文やメールアドレス、件名を格納します。なお、今回to_変数には送信先のメールアドレスとしてGmailのメールアドレスを指定してみます。

格納後、「em = EmailMessage()」で装飾のないテキストメッセージを作成します。作成後、set_content()を用います。括弧内には引数,パラメータとしてmsg変数を渡します。これで装飾のないテキストメッセージ内にmsg変数がセットされました。セット後、em変数に対して角括弧”[]”を用いて装飾のないテキストメッセージに件名やメールアドレスを当てはめていきます。これで1つのメッセージのテンプレートが作成できました。

作成後、serverという変数を定義し、smtplib.SMTP_SSL()を用います。括弧内には第1の引数,パラメータとして、送信メール(SMTP)サーバーを渡します。次に第2の引数,パラメータとして、ポートを渡します。これでSSLを用いたデータを暗号化して送信する安全なSMTPセッションが作成されました。

作成後、server.login()を用います。括弧内には第1の引数,パラメータとして、Yahoo!JAPANのアカウント名/ログイン名(ID)を渡します。次に第2の引数,パラメータとして、パスワードを渡します。これでログインが完了となります。

完了後、server.send_message()を用います。括弧内には第1の引数,パラメータとして、em変数を渡します。これでフォーマットの規格に沿ったメッセージが送信されます。

最後にprint()を用います。括弧内に引数,パラメータとして送信完了を伝える文字列を渡します。

■実行・検証

変更後、スクリプトを「test_mail.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると「メールの送信が完了しました」と出力されました。

出力後、今回他社のメールとして指定したGmailのメール画面を開いてみます。開いてみると「送信元」が「yahoo.co.jp」となっているメールが届いていることが確認できました。

なお、今回は電子メールおよびMIME(電子メールのフォーマット規格)処理であるemailを用いて送信を行いましたが、フォーマットを整えずに送信すると「UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)」というエラーが発生します。また、送信メール(SMTP)サーバーにメッセージを送信する際にsend_message()を用いましたが、server.sendmail()を用いて送信すると、「TypeError: sendmail() missing 2 required positional arguments: ‘to_addrs’ and ‘msg’」といったエラーが発生する場合があります。

 

コメント

タイトルとURLをコピーしました