みなさんお久しぶりです。
また少しずつですが、投稿を始めようと思います。
#今回のお題
###Pythonでgmailにログインして、メールを送る事です。
参考
メールを送る上での流れ
MIMEを作成して送信する
めちゃくちゃ簡単ですね。
上の流れを分解すると必要なのは3段階。
- MIMETextクラスを使ってメッセージを作成
- gmailにログイン、そして送信
1. MIMETextクラスを使ってメッセージを作成
from email.mime.text import MIMEText
def create_msg(from_email, to_email):
# メールの内容
subject = "今日のTodo"
message = '''
<ul>
<li>MINETextについて</li>
<li>SMTPについて</li>
<li>Web技術の本</li>
<li>MVCモデルについて</li>
</ul>
'''
# 解説1
msg = MIMEText(message, "html")
msg["Subject"] = subject
msg["To"] = to_email
msg["From"] = from_email
return msg
解説
解説1
*class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None, , policy=compat32)
これがMINETextのクラスの引数です。
今回は"_text"と"_subtype"を設定しています。
"_text"には今回送りたいmessageに設定してあり、表示はHTML形式にしたいので"html"を"_subtype"に渡しています。
その後、このMIMETextクラスに件名、送り先、送り元を渡しています。
これで送るためのメッセージ作成は完了しました。
参照
email.mine: メールと MIME オブジェクトを一から作成
2. gmailにログイン
# 解説1
gmail = smtplib.SMTP("smtp.gmail.com", 587)
# 認証に失敗した時に確認出来る用
gmail.set_debuglevel(True)
gmail.ehlo()
if gmail.has_extn('STARTTLS'):
# 暗号化通信に切り替える
gmail.starttls()
gmail.ehlo()
# 解説2
gmail.login(from_email, from_password)
# メールを送信
gmail.send_message(msg)
解説
解説1
まず、SMTPは
class smtplib.SMTP(host='', port=0, local_hostname=None, [timeout, ]source_address=None)
で書かれます。
SMTP プロトコルクライアント
今回はgmailを使うので、
host='smtp.gmail.com'
port=587
としました。
これらがどこから出てきたかは、下記のGoogleヘルプを参照してください。
Google ヘルプ
解説2
次にログインをします。
gmail.login(from_email, from_password)でログインできます。
from_emailはあなたのメールアドレスを入れて、
from_passwordはあなたのgmailのパスワードを入力してください。
ここで一つ落とし穴があります。
Gmailは接続元IPアドレスをDNS逆引きしてドメインが見つからない場合は接続を拒否するため、デフォルトではローカルのPythonからメールを送信することができません。このため、予めアカウント設定から**「安全性の低いアプリからのアカウントへのアクセスを許可する」**をONにする必要があります。これはセキュリティ上の危険をはらむため、別途学習用のアカウントを作成することをおすすめします。
設定方法
Google アカウントから「セキュリティ」に入って、安全性の低いアプリのアクセスを有効にします。
またホストやポート番号はプロバイダーによって異なります。
プロバイダー | STMPサーバー名 |
---|---|
Gmail | smtp.gmail.com |
Outlook.com/Hotmail.com | smtp-mail.outllok.com |
Yahoo Mail | smtp.mail.yahoo.com |
AT&T | smtp.mail.att.net(port = 465) |
Comcast | smtp.comcast.net |
Verizon | smtp.verizon.net(port = 465) |
全体のソースコード
from email.mime.text import MIMEText
import smtplib
def send_email(email):
# あなたのアカウント
from_email="あなたのGmailのアドレス"
from_password="Gmailにログインするためのパスワード"
# 送り先
to_email = email
# メッセージを作成
msg = create_msg(from_email, to_email)
gmail = smtplib.SMTP("smtp.gmail.com", 587)
# 認証に失敗した時に確認出来る用
gmail.set_debuglevel(True)
gmail.ehlo()
if gmail.has_extn('STARTTLS'):
# 暗号化通信に切り替える
gmail.starttls()
gmail.ehlo()
# 解説2
gmail.login(from_email, from_password)
# メールを送信
gmail.send_message(msg)
def create_msg(from_email, to_email):
# メールの内容
subject = "今日のTodo"
message = '''
<ul>
<li>MINETextについて</li>
<li>SMTPについて</li>
<li>Web技術の本</li>
<li>MVCモデルについて</li>
</ul>
'''
# 解説1
msg = MIMEText(message, "html")
msg["Subject"] = subject
msg["To"] = to_email
msg["From"] = from_email
return msg
if __name__ == '__main__':
to_addr = '送りたい人のメールアドレス'
send_email(to_addr)
##参考資料一覧
プログラムからGmailでmailを送ろうとした時に陥ったエラー
email.mine: メールと MIME オブジェクトを一から作成
SMTP プロトコルクライアント
Google ヘルプ