Emacs Lisp で書かれたプログラムからメールを送信させるようにして、メール送信処理の自動化を実現することができます。
- 今回は、Googleのメール(Gmail)アカウントを用いてメールの送信をします。
- メーリングリスト、ログ監視、アリバイ工作等様々な応用が考えられます。
- プログラミングの練習にもなりますから、是非トライしてみてください。
#1. GNU Emacsのインストール
Windowsの場合は「gnupack (cygwn + emacs package)」をインストールします。 (Transport Layer Security(トランスポート・レイヤー・セキュリティー、TLS)プロトコルをサポートする Emacs バイナリです)
⇒ http://sourceforge.jp/projects/gnupack/
「emacs-24.3-20130503.exe (日付: 2013-05-03, サイズ: 42.5 MB)」というリンクをクリックして最新版をダウンロードします。
こちらのリンクから直接ダウンロードすることもできます。
emacs-24.3-20130503.exe という自己解凍実行ファイルがダウンロードされたら、実行して適当な場所に解凍(展開)します。
- 「C:\Users\root\Desktop」に解凍した場合は「C:\Users\root\Desktop\emacs-24.3-20130503\bin」に「runemacs.exe」という実行ファイルがありますので、これを実行します。
- runemacs.exeへのショートカットを作っておくとEmacsの起動が楽になるでしょう。
#2. GmailアカウントとSMTPサーバーの準備
メールの送信にはSMTPサーバ(メール送信サーバ) が必要です。
Gmail(Googleのメールサービス)でアカウントを取得し(取得は無償です)、POP(またはIMAP)利用の設定を行うことで、EmacsからGmailのSMTPサーバを利用してメールを送信することができます。
- Gmailヘルプ「IMAP と POP3 の開始方法」⇒ https://support.google.com/mail/troubleshooter/1668960?hl=ja
#3. .emacsの設定
以下の記述を.emacsに追加します。.emacsをUTF-8で保存している場合は、.emacsの先頭に「;; -- coding: utf-8 --」という行を追加しておきます(文字化けしないように)。
"鈴木 太郎"となっている場所にはあなたの氏名を記述し、"taro.suzuki@gmail.com"の部分はあなたのGmailのアドレスを記述します。
;; -*- coding: utf-8 -*-
;; Username and mail address.
(setq user-full-name "鈴木 太郎"
user-mail-address "taro.suzuki@gmail.com")
;; For sending mail.
(setq send-mail-function 'smtpmail-send-it)
(setq smtpmail-smtp-server "smtp.gmail.com")
(setq smtpmail-stream-type 'starttls)
(setq smtpmail-smtp-service 587)
#4. .authinfoの準備
"~/.authinfo"というファイルを作成して以下ように記述します。ただし、"LOGIN@gmail.com"の部分はGmailのメールアドレス(例: "taro.suzuki@gmail.com")を記述し、SECRETの部分にはGmailアカウントのパスワードを記述します。
machine smtp.gmail.com login LOGIN@gmail.com password SECRET port 587
#5. メール送信の設定確認
メール送信の設定がちゃんとできているかどうかテストメールを送信して確認します。
C-x m (または、M-x compose-mail)と入力すると、メール作成画面が開きますので、To: の後に送信先のメールアドレスを記述し、Subject: の後にタイトルを記述し、「--text follows this line--」の下の行にメールの本文を記述します。
記述が終わったら、「C-c C-c」(または、M-x mail-send-and-exit)を入力してメールを送信します。
メールを送信したら、送信先のメールアドレスの受信箱を確認して、テストメールが届いているか確認します。
To:
Subject:
From: taro.suzuki@gmail.com (鈴木 太郎)
--text follows this line--
#6. メール送信プログラムの作成
以下のようなプログラムをmy-mail.elというファイルに記述して、M-x load-fileでロードします。
M-x my-send-mail-test で起動すると、メールを3通約2秒間隔をおいて my.friend@gmail.com という宛先に送信します。実験する場合には、"my.friend@gmail.com" の部分を存在するメールアドレスに変更してください。
;; -*- coding: utf-8 -*-
(require 'cl)
(defun my-send-mail-test ()
(interactive)
(loop for $i from 1 to 3 do
(let (($time-str (current-time-string)))
(mail)
(mail-to) (insert "my.friend@gmail.com")
(mail-subject) (insert "the subject @ ") (insert $time-str)
(mail-text) (insert "body of mail")
(sit-for 0)
(mail-send-and-exit)
(sit-for 2)
)
)
(message "(my-send-mail-test)...done")
)
#7. プログラムのカスタマイズ
6で使ったプログラム(my-send-mail-test)を修正(改造、ハック)して、自分にとって意味のある用途(メーリングリスト、ログ監視、アリバイ工作、etc)に使えるようにします。多人数に送ったり、定期的に実行したり、(run-at-time)関数でタイマー起動したり…がんばってねヽ(´ー`)ノ
以上