『退屈なことはPythonにやらせよう』その14(16章:電子メール、SMS)

Python初心者です。『退屈なことはPythonにやらせよう』を走っています。

14回目の今回は、16章をやっていきます~。

前回の記事はこちら↓

今回の章ではメールなどを扱うのですが、全然やる気が起きません。前回の更新からちょっと時間が空いちゃったのは、リアルのほうが忙しかったという言い訳もできますが、モチベがダダ下がりしてたせいです。なので今回は、さら~っと写経をして終わってしまおうかなと思います。次の画像の章はとてもやりたいのでね。


用語の確認

出てきた用語をざっと並べるとこんな感じ。

  • SMTP
  • IMAP
  • Twilio

ではざっと見ていきましょう。

SMTP

SMTPは”Simple Mail Transfer Protocol”の略です。HTTPがWebページを転送するためのプロトコルであるように、SMTPはメールを送信するためのプロトコルです。Pythonでは「smtplibモジュール」を用いて扱うことが出来ます。

SMTPはメールの送信専用です。後述するIMAPがメールの受信処理を扱います。

smtplibモジュールの使い方について、以下に簡単にまとめておきます。

  1. SMTPサーバーに接続する(smtplib.SMTP(“メールのSMTPサーバー名”, 587(TLS) or 456(SSL)))
  2. ehlo()というメソッドを使って、SMTPに”Hello”というメッセージを送る
  3. TLS暗号化の開始(smtp_obj.starttls()メソッド)
  4. SMTPサーバーに、login()メソッドでログイン
  5. メールを送信する(sendmail()メソッド)
  6. SMTPサーバーから切断(smtp_obj.quit()メソッド)

IMAP

IMAPは”Internet Messeage Access Protocol”の略です。メールの受信を行うためのプロトコルです。Pythonにはimaplibモジュールがあります。ただ、筆者のおすすめはサードパーティ製のimapclientというモジュールのようです。以下に、簡単に流れを示します。

  1. IMAPサーバーに接続する(imapclient.IMAPClient()関数)
  2. IMAPサーバーにログインする(imap_obj.login()メソッド)
  3. search()メソッドでメールを探す
  4. メールを取得して既読マークを付ける
  5. pyzmailモジュールを使って、アドレスを取得、その後で本文を取り出す
  6. メールを削除する。delete_messeages()メソッド
  7. IMAPサーバーからの接続を切断する。logout()メソッド

Twilio

SMSゲートウェイサービスの一つです。SMSって最近使う機会がほとんどないし、迷惑メールが来たりするので、けっこう放置してるんですよね。SNSのダイレクトメッセージやらLINEやらのチャットアプリが便利すぎて、SMSの受信ボックスなんて全然チェックしてないよっていう方も多いんじゃないかな?

それはそうと、Twilioは無料で使えるSMSゲートウェイサービスのようです。トライアルアカウントでは一定量まで無料で使えるんだとか。


練習プロジェクトの課題

会費リマインダーメールを送る

Excelスプレッドシートの内容をもとに、ある条件を満たしている人に自動でメールを送っちゃうぜというプログラムを作る課題です。Excelシートの中から条件を満たしている人を見つけ出すところまでは多少役に立つような気もします。

私にSMSを送ってモジュール

コンピューターからリマインダーをSMSに送っちゃおうというプロジェクトです。リマインダーアプリとかカレンダーアプリが発達した昨今ではちょっともうあのそのって感じではありますね。プロジェクトでやるのはTwilioにサインアップする作業を関数にまとめるファイルを作りことです。これに引数として本文を渡せるようにしておけば、このファイルをimportして、関数に本文を打つ(つまりは2行のコードを書くだけで)SMSが送れるようになります。TwitterのAPIで似たような実装をしてみるのはありかなと思いました。


課題のプロジェクト(今回は解答なし)

やってないですが今回は4つ課題プロジェクトがありました。

  • 雑用ランダム割り当てメーラー
  • 傘のリマインダー
  • 自動退会機
  • メールを使ってコンピューターを制御する

ひとつずつ簡単に内容を紹介します。

雑用ランダム割り当てメーラーは作業員のアドレス一覧と雑用一覧を受け取って雑用をランダムに作業員に割り当て、作業員にメールで伝えるプログラムです。radom.choiceを使って選び、その選んだやつをlist.remove()に渡して抜いていく感じですね。

傘のリマインダーは前にやった(うまくいかなかった)天気予報を受け取るプログラムの応用です。雨になりそうな時には「今日は傘がいるで!」みたいなSMSを自分自身に送信するようにするプログラムです。

自動退会機はメールを調べて退会リンクを探し、自動的にブラウザで開くプログラムです。”unsubscribe”タグを探すと良いようです。

メールを使ってコンピューターを制御するには、subprocess.Popen()を使うようです。メールが自分から送られたものであることを確認、さらにパスワードのチェックも行う必要があります。けっこう工数がかかりそうな重めの課題ですね。やらないですけど。


感想

モチベが湧かん時はさっさと流す。これが鉄則ですね。もっとスピード感を持って取り組んでいけるよう、心を入れ替えます。きっとモチベーションが湧くような状況に陥った時にバババッと復習することになると思いますが、全体でみたらそっちの方が早いですよね。

次回の17章は「画像の操作」です!Pillowを使ってPythonで画像をいじる勉強をします。これは良いですね!

いつぞや始めた画像処理100本ノックも中断してしまっている状態なので、ここでモジュールの使い方やら画像のいじり方やらをきっちり学んで、次につなげていきたいと思います。

次の記事はこちら↓

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です