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’」といったエラーが発生する場合があります。
コメント