PythonでYahooのメールサーバからメールを送信するサンプル

python コンピュータ

Yahooのメールサーバーからメールを送信するサンプルになります。
Yahooアカウントは私を含め多くの方がお持ちだと思います。

スクリプトからメールが送信出来ると何かと重宝しますが、いざ送信するとなるとSMTPサーバーのアドレスやポート、アカウント認証等などメールクライアントの設定に相当する作業をスクリプト化する必要があるので意外と面倒です。とくに年々セキュリティがきつくなり設定項目が増える傾向があります。その点Yahooのメールサーバーは古くから存在しているおかげか、セキュリティについても保守的でgmailよりは面倒が少ないです。今のところは。

とりあえず以下のスクリプトでgmail宛にメールが届きました。文字コードの確認はしていませんがGmailで受ける分には文字化けもしていませんでした。

Yahooのアカウントが必要となります。
実際利用する際には「送信元のメールアドレス(Yahooアカウントユーザー名)」「送信先のメールアドレス」「Yahooアカウントのパスワード」任意に設定してください。

# coding: utf8

# Yahooからメールを送信するサンプル

import smtplib

from email.mime.text import MIMEText

# メールを送信
def send_mail(subject, message):
    from_addr = "送信元のメールアドレス(Yahooアカウントユーザー名)"
    to_addr = "送信先のメールアドレス"
    user_name = from_addr
    passwd = "Yahooアカウントのパスワード"
    
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = from_addr
    msg['To'] = to_addr
    
    smtp = smtplib.SMTP("smtp.mail.yahoo.co.jp", 587)
    smtp.login(user_name, passwd)
    smtp.sendmail(from_addr, to_addr, msg.as_string())
    smtp.quit()


send_mail("件名", "本文UTF8")

ハードコーディングしまくりでサンプルとしていかがなものかと思いますが、メールの件名と本文を引数にした関数にしてみました。

使い道としてはスクリプトから自分宛てにメッセージを送ることを想定しています。

Pythonで関数を初めて書いたかもしれません。defで宣言して()内に引数を、そのあとはブロックなので:とインデントなります。

そう言えば昔この手のスクリプトで、24時間稼働のサーバーにトラブルが発生すると自分の携帯にメールを飛ばす設定をしたことがあります。24時間いつメールが飛んでくるか不明で、深夜に鳴る警備会社からの電話並みに迷惑な代物となりました。そのくせ飛んでくるメールは重要な案件が少なく、だんだん無視するようになりました。最終的にはサーバーがダウンするとメール自体が飛ばない事実に気が付きやめてしまいました。今となっては懐かしい思い出です。現実問題、サーバーの監視と遠隔操作はサーバーとは別の装置が必須で、できればその装置までの通信系もサーバーとは別系統にしたいところです。とはいえ今時サーバーを自前で管理すること自体苦行でしかなく、少々費用がかかってもクラウド系のサービスを借りるのが現実的かもしれません。

でわでわ。

追記:
2021年12月14日現在こちらのスクリプトは正常に機能しません。
SSLに対応する必要があります。
以下変更
smtplib.SMTP(→smtplib.SMTP_SSL(
ポート番号を465に変更

コメント