11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-06-05

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サーバを利用してメールを送信することができます。

#3. .emacsの設定
以下の記述を.emacsに追加します。.emacsをUTF-8で保存している場合は、.emacsの先頭に「;; -- coding: utf-8 --」という行を追加しておきます(文字化けしないように)。
"鈴木 太郎"となっている場所にはあなたの氏名を記述し、"taro.suzuki@gmail.com"の部分はあなたのGmailのアドレスを記述します。

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

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

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

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)関数でタイマー起動したり…がんばってねヽ(´ー`)ノ

以上

参考(リンク)

11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?