プログラムからメールを自動送信する

Emacs Lisp で書かれたプログラムからメールを送信させるようにして、メール送信処理の自動化を実現することができます。

* 今回は、Googleのメール(Gmail)アカウントを用いてメールの送信をします。
* メーリングリスト、ログ監視、アリバイ工作等様々な応用が考えられます。
* [プログラミングの練習](http://www.bookshelf.jp/texi/emacs-lisp-intro-jp/eintro.html)にもなりますから、是非トライしてみてください。

#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)」というリンクをクリックして最新版をダウンロードします。
[こちらのリンク](http://sourceforge.jp/projects/gnupack/downloads/46675/emacs-24.3-20130503.exe/)から直接ダウンロードすることもできます。
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のアドレスを記述します。

```el:.emacs
;; -*- 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アカウントのパスワードを記述します。

```text:~/.authinfo
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)を入力してメールを送信します。
メールを送信したら、送信先のメールアドレスの受信箱を確認して、テストメールが届いているか確認します。

```text
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" の部分を存在するメールアドレスに変更してください。

```el:my-mail.el
;; -*- 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](http://www.bookshelf.jp/texi/elisp-manual/21-2-8/jp/elisp_40.html#SEC649))関数でタイマー起動したり…がんばってねヽ(´ー｀)ノ

以上

# 参考(リンク)

* [GNU Emacs Lispリファレンスマニュアル](http://qiita.com/akmiyoshi/items/c5a58b2da3eee54b034d)