Gmailではてなブログに投稿する
メール送信のPythonコード参考
以下、Jupyter Notebookで作業する。
セルにそのままコピペし実行すると次のようなものが出来上がる。
.(Send_mailフォルダ) ├── Gmailではてなブログに投稿する.md ├── __pycache__ │ ├── get_title_and_text.cpython-37.pyc │ └── my_gmail_config.cpython-37.pyc ├── get_title_and_text.py ├── my_gmail_config.py └── send_mail.py
mdファイルだけ(このファイルipynbをmdに変換させたもの)はSend_mailというフォルダに移動させた。
ここから実装
フォルダ作成と移動
↓を実行するとカレントディレクトリに「Send_mail」フォルダが作成され、そこに移動する。
%mkdir Send_mail %cd Send_mail
/storage/emulated/0/qpython/notebooks/Send_mail
※「notebooks」というカレントディレクトリで作業している。
メルアドとメール投稿用アドレスの設定ファイル作成
メール送信用で自身のメールアカウントとパスワード、はてなブログのメール投稿アドレスの設定用ファイルを作成する。
後で自身のものに書き換えてください。
%%writefile my_gmail_config.py my_gmail_account = "自分のメールアカウント" # "xx@gmail.com" my_gmail_password = "自分のgoogleパスワード" # "xx@gmail.comのパスワード" hatenablog_mail_address = "はてなブログの設定に載っているメール投稿用アドレス" # 下書き用で実験
Writing my_gmail_config.py
markdownファイルからファイル名とファイルの中身を取り出す
ブログをmarkdown記法で投稿する設定にしている。そのためファイルもmarkdown形式。
mdファイルのファイル名=ブログタイトル、本文=mdファイルの中身を取得するファイルを作成する。
%%writefile get_title_and_text.py import glob import os # Send_mailフォルダ内の全mdファイルをリストで取得 lst = glob.glob("*md") for file in lst: # メールのsubject=title(拡張子切り離し) title = os.path.splitext(file)[0] # メール本文 body=text with open(file,"r") as f: text = f.read()
Writing get_title_and_text.py
メール投稿用プログラムファイル作成
メール送信で投稿するファイルの作成。
%%writefile send_mail.py import my_gmail_config import get_title_and_text import smtplib, ssl from email.mime.text import MIMEText # 以下にGmailの設定を書き込む★ --- (*1) gmail_account = my_gmail_account gmail_password = my_gmail_password # メールの送信先★ --- (*2) mail_to = hatenablog_mail_address # メールデータ(MIME)の作成 --- (*3) subject = title body = text msg = MIMEText(body, "html") msg["Subject"] = subject msg["To"] = mail_to msg["From"] = gmail_account # Gmailに接続 --- (*4) server = smtplib.SMTP_SSL("smtp.gmail.com", 465, context=ssl.create_default_context()) server.login(gmail_account, gmail_password) server.send_message(msg) # メールの送信 print("ok.")
Overwriting send_mail.py
ここまでをJupyter Notebookにコピペして実行すれば、Send_mail
なるフォルダと、その中に3つの.pyファイル
が作られる。
あとはターミナルでSend_mail
フォルダに移動し
python send_mail.py
と打つか、Jupyter Notebookからマジックコマンドで%run send_mail.py
を実行すればメール投稿される。
だがしかし、エラーが出ると思う。というか出た。
一番最初に貼り付けたマイナビのクジラ飛行机さんの記事こちらにもあるように、Gmailのセキュリティに引っ掛かる。
オライリー『退屈なことはPythonにやらせよう』に載っている方法を使う。
【Googleアプリパスワード詳細】
Sign in using App Passwords - Google Account Help
Googleアカウントログイン - Google アカウントにログインし、
→セキュリティ
→最近のセキュリティイベント
→アプリパスワードの生成
→Pythonのメール送信など適当な名前を付け
→「生成ボタン」
→パスワードが表示
→コピー
→my_gmail_config.pyのパスワードに貼り付け
これでもう一度ターミナルからpython send_mail.py
を実行すると、たぶんはてなブログに投稿される。というか投稿された。
おわりに
これで、投稿するmarkdownファイルをSend_mailフォルダに入れてpython send_mail.py
を実行すれば、公開か下書きで投稿できるようになった。
本文を投稿フォームにコピペしタイトルを書いて投稿する微々たる手間を省ける。(^q^)
以上、自己満投稿でした。
追記
これでは複数のmdファイルを連続投稿できないな…。mdファイルをfor文で処理する所に送信処理する関数(関数化してないけど)を呼び出す必要があった。