pythonでG-mailを送信してみた【メール送信を自動化する方法】

今回はpythonを使ってメールを送信する方法を紹介します。

 

pythonを使ったメール送信機能はシステムトレードではかなり重宝しています。

 

売買条件に合致する銘柄を毎日決まった時間(夜)に送信するようにプログラムを作って、そのメールをみながら、翌日のための注文を出しておく・・・という使い方をしています。LINEのAPIを使ったチャットbotも考えましたが、メールの方が簡単だったのでメールを採用しました。

スポンサーリンク

pythonでG-mailを送るサンプルコード

from email.mime.text import MIMEText
import smtplib

def send_email(sub,mes):
    #送り元
    from_email="~~~~@gmail.com"
    from_password="********"

    #送り先
    to_email=from_email

    #メールの内容
    subject=sub
    message=mes
    msg=MIMEText(message, "html")
    msg["Subject"]=subject
    msg["To"]=to_email
    msg["From"]=from_email

    gmail=smtplib.SMTP("smtp.gmail.com", 587)
    gmail.starttls()
    gmail.login(from_email, from_password)
    gmail.send_message(msg)

importすべきモジュールは2つ。

 

MIMETextは、データ形式をメール送信用に整えてくれるモジュール。私も詳しい内容はよくわかっていません。いわゆる「おまじないコード」だと考えています。

 

smtplibは、SMTPサーバに関するモジュールです。SMTPはメール送信に使われるサーバで、このサーバの操作ができないとメールを送ることはできません。

 

モジュールをインポートしたら、必要な内容を書き込んでいきます。

SMTPサーバに関する内容

・送信元

・送信元のパスワード

 

送信元のパスワードは、gmailだとアカウントのパスワードとなります。

メール本文に関する内容

・送信元

・送信先

・件名

・内容

 

内容が完成したら、次はSMTPサーバを触ります。

 

smtp.gmail.comは、googleのSMTPサーバのこと。587ポートでアクセスします。私も詳しいことはわかりませんが、とにかくSMTPにアクセスします。

 

gmail.starttls()は、送信内容の暗号化をするためのメソッド。このコード以降の処理は全て暗号化されます。

 

暗号化した上で、SMTPに入るためのアドレスとパスワードを入力し、最後に最初に作ったメール(上のコードではmsg)を送るという流れ。

gmail=smtplib.SMTP("smtp.gmail.com", 587)
gmail.starttls()
gmail.login(from_email, from_password)
gmail.send_message(msg)

 

正直、わからない点も多いですが、とにかくこれをコピペすればG-mailを送ることができます。ちなみに、私も以下のサイトをコードをほぼ丸パクリしてます。

私の場合は、自分にメールを送る目的で使っているのでfrom_mailとto_mailが一緒ですが、これを別々にして、関数の引数を増やしてやれば汎用性が増すはず。
スポンサーリンク

G-mail側の設定変更も必要

コードの方は以上で終了ですが、最後にG-mail側の設定を少し変更しておく必要があります。

 

googleアカウントにログインして、「安全性の低いアプリの許可」を「有」に変えてやる必要が有ります。

 

「googleアカウント」→「セキュリティ」→「安全性の低いアプリの許可」

 

初期設定ではオフになっているのでこれをオンにすればOK。これをしないとSMTPサーバにログインすることができません。

 

 

この設定をすることはセキュリティ的には好ましくなので、私の場合はシストレ専用のG-mailを作ってそれのみにしか利用しないようにしてます。

スポンサーリンク

pythonによるメール送信まとめ

コードの詳しい意味まで理解しきれていませんが、メール送信自体はそれほど難しくはありませんでした。というか、他のサイトの内容をコピペしただけです!ww

 

 

このメール送信機能、実はこれだけではあまり使えません。「毎日21時にメールを送る」とかそんな感じで、決まったタイミングで自動送信されるように改良するととても便利なツールへと変わります。

 

 

私の場合は、毎日20時ごろにその日の株価データを取得して、20時半ぐらいに売買条件から抽出された翌日の取引銘柄がメールで自動送信されるよう設定しています。

 

自動化にはpythonのscheduleモジュールを使います。具体的な方法については、別の記事でいずれ整理しておこうと思います。

コメント