Pythonを使ってコマンドラインからGmail送信できたら面白いかなぁ、という気持ちで作成。
上のカクカクした動画は実際にWindows10のコマンドプロンプト上で実行したときのイメージだ。
送信後、宛先に指定したメールをチェックしたらきちんと送信されていた。
Googleアカウントのセキュリティ設定のこと
ただし、今回の方法はわたしがラズベリーパイからGmail送信などで使っている方法で、Googleアカウントのセキュリティ設定を下げて使う必要がある。
実際には、「安全性の低いアプリへのアクセスの無効化」を許可する必要がある。許可するとメールアドレスとパスワードが相手に知られた場合、勝手にメール送受信がされてしまう。ちゃんとしたGmail送信をしたい方は、Google APIsでGmailへのアクセス許可APIを設定するなどした方がいい、と断っておく。
という訳で、今回のPythonソースコードは、Googleアカウントのセキュリティ設定を下げて使ってください。
Googleアカウントのセキュリティ設定を下げる方法は、以下の記事参考
コマンドラインからGmail送信ソースコード
宛先メールアドレス(To)、件名(Subject)、本文(Body)の順にキーボードから入力するだけ。エンターキーで入力確定なので本文内に改行が出来ないが、とりあえず送信するには問題ない。(というか本文内で改行したかったのだが、全角文字だとうまくいかなかったので割愛)
コードの修正が必要な箇所は、25行目と26行目。お使いのGmailアドレスとGmailパスワードにそれぞれ置き換えてください。
sendGmail.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
コマンドラインからGmailを送信する
【動作確認環境】
コマンドライン環境/Windows10のコマンドプロンプト上
Python/バージョン 3.7.3
"""
# メール送信のためのSMTPセッションクライアントを作成するため
import smtplib
# メールの送信日付をインターネットで送信できるフォーマットで指定するため
from email.utils import formatdate
# メール本文に日本語を送信できるようにするためのMIME規格に変換するため(E-mailも基本は英語圏でできた規格なのです!)
from email.mime.text import MIMEText
if __name__ == "__main__":
# Gmailアカウント設定
gmail_addr = "《あなたのGmailアドレス》"
gmail_pass = "《あなたのGmailパスワード》"
SMTP = "smtp.gmail.com"
PORT = 587
# 送信メール情報
from_addr = gmail_addr # 送信元メールアドレス(Gmailでなくてもよい)
# キーボードから宛先、件名、本文の順に入力
print("\n")
print("To: ", end="")
to_addr = input() # 宛先
print("Subject: ", end="")
subject = input() # 件名
print("Body: ", end="")
body = input() # 本文
# メールメッセージを作成
msg = MIMEText(body) # 日本語で送信するためにISO-2022-JPを指定
msg["From"] = from_addr
msg["To"] = to_addr
msg["Date"] = formatdate() # 日付をインターネットで送信できるフォーマットで指定
msg["Subject"] = subject
# メール送信
try:
print("\nメール送信中...")
send = smtplib.SMTP(SMTP, PORT) # GmailのSMTPを利用してSMTPオブジェクトを生成
send.ehlo()
send.starttls()
send.ehlo()
send.login(gmail_addr, gmail_pass) # Gmailにログイン
send.send_message(msg) # メールを送信
send.close()
except Exception as e:
print(str(e)) # エラー送出時のメッセージ表示
else:
print("{0}へメール送信したよ!".format(to_addr)) # メールが正常に送信されたときのメッセージ
これなら仕事中にブラウザ以外でGmail送信ができるので、Gmailを使っている風には傍目には見えないぞ、という感じ。(失礼!そういう問題ではない)
コメント