これまでメインのメールクライアントとして
FreeBSD 上で
Mew を使ってきました。
Mac mini
では
X11 から
ssh を使って
FreeBSD にログインしてメールの読み書きをしていました。
iBook を手に入れたことを機に、こちらをメインのメール読み書きマシンにしようかと思います。
まずは Emacs ですが、
Carbon Emacs パッケージをインストールしてみました。Mew も標準で含まれていて手間が省けます。
普通の ISP のメールサーバを利用するだけであればこれだけでいいのでしょうが、私の環境は IMAPS でサーバを立ち上げメールを読んでいます。そこで必要になるのが
stunnel です。今後のことも考えて、X11 と
Fink をインストールしておきました。Fink から stunnel4 をインストールして IMAPS でメールを読む準備ができました。
続いて
c-sig による signature の選択挿入を実現しなければなりません。
こちらから c-sig.3.8.tar.gz をダウンロード・解凍して c-sig.el を ~/elisp/ に置きました。
さらに X-Face の表示・挿入のために
こちらから x-face-e21.el.gz をダウンロード・解凍して同じく x-face-e21.el を ~/elisp/ に置きました。x-face-e21.el は compface, uncompface が必要とのことなので
ftp://ftp.xemacs.org/pub/aux/ から compface-1.5.2.tar.gz をダウンロード・解凍して、make, make installすれば /usr/local/bin/ に compface, uncompface がインストールされて準備完了です。
最後に SPAM 対策として
bsfilter を使っています。 bsfilter-1.0.10.tgz をダウンロード・解凍して bsfilter を ~/bin/ に突っ込んでおきました。サーバ側にも仕込んでいますのでメールのヘッダに X-Spam-Flag: がついてきます。
こちらを参考に ~/.emacs.el と ~/.mew.el に設定を追記しました。
これでなんとか移行できそうです。
~/.emacs.el と ~/.mew.el は下記を参照してください。
~/.emacs.el
;;
;; パスの追加
;;
(add-to-list 'load-path "~/elisp")
(setq exec-path (cons "/sw/bin" exec-path))
(setq exec-path (cons "/sw/sbin" exec-path))
(setq exec-path (cons "~/bin" exec-path))
;;
;; グローバルキーの設定
;;
(global-set-key "\C-h" 'backward-delete-char)
(global-set-key "\M-?" 'help-command)
(global-set-key "\C-i" 'tab-to-tab-stop)
;;
;; ウィンドウの設定
;;
(setq default-frame-alist
(append
'(
(width . 80) (height . 42)
)
default-frame-alist))
;;
;; Mew の設定
;;
;; 読み込むコマンドを指定
(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)
;; C-c rで Mew を起動し、Summaryモードに移行
(global-set-key "\C-cr" 'mew)
;; C-x mでMewを起動しDraftモードへ
(autoload 'mew-user-agent-compose "mew" nil t)
(if (boundp 'mail-user-agent)
(setq mail-user-agent 'mew-user-agent))
;; BSFILTER
(setq mew-spam: "X-Spam-Flag:")
;;
;; navi2ch の設定
;;
(require 'navi2ch)
(global-set-key "\C-cn" 'navi2ch)
;;
;; x-face の設定
;;
(autoload 'x-face-decode-message-header "x-face-e21")
(autoload 'x-face-insert "x-face-e21" nil t)
(autoload 'x-face-save "x-face-e21" nil t)
(autoload 'x-face-show "x-face-e21" nil t)
(autoload 'x-face-turn-off "x-face-e21")
(setq x-face-auto-image t)
;;
;; Cモード の staly(9) に従ったスタイル
;;
(add-hook 'c-mode-common-hook 'bsd-c-mode-user-setup t)
(defun bsd-c-mode-user-setup ()
"FreeBSD style(9) setup"
(interactive)
(c-set-style "bsd")
(setq c-basic-offset 4
c-conditional-key c-C++-conditional-key
indent-tabs-mode t
c-tab-always-indent nil)
(setq ck-cleanup-list (append c-cleanup-list (list 'brace-else-brace)))
(c-set-offset 'arglist-close 0)
(c-set-offset 'arglist-cont-nonempty 4)
(c-set-offset 'inline-open 0)
(c-set-offset 'case-label 0)
(c-toggle-auto-state 1))
~/.mew.el
;;;; 表示の調整
(setq mew-summary-form
'(type (5 date)" "(5 time)" "
(-4 size)":"(20 from)" "
(0 subj))
)
;;;; ヘッダ入力に関する設定
(setq mew-config-alist
'(
("post"
("name" . "")
("user" . "postmaster"))
("web"
("name" . "")
("user" . "webmaster"))
("default"
("smtp-server" . "smtp.example.net")
("name" . "*****")
("user" . "????")
("mail-domain" . "example.net")))
)
;;;; IMAP
(setq mew-proto "%")
(setq mew-imap-user "imap") ;; (user-login-name)
(setq mew-imap-server "imap.example.net") ;; if not localhost
(setq mew-imap-delete nil)
(setq mew-imap-size 0)
(setq mew-use-cached-passwd t) ; パスワード保存
(setq mew-imap-ssl t)
(setq mew-imap-auth nil)
(setq mew-imap-ssl-port "993")
(setq mew-ssl-verify-level 0)
(setq mew-imap-trash-folder "%Trash")
;;;; SMTPサーバの指定 (SMTPサーバが localhost ならば不要)
(setq mew-smtp-server "smtp.example.net")
(setq mew-smtp-user "????")
;;;; Message-Id を作成するためのドメイン名
(setq mew-smtp-msgid-domain "example.net")
;;;; その他の設定
;; MIME解析するメッセージの大きさの上限を大きくする
(setq mew-file-max-size 80000000)
;; フレーム全体で Mew を使う設定
(setq mew-use-full-window t)
;; 添付ファイルをセーブする際に、ファイル名を SAMBA 形式に
(setq mew-use-samba-encoding t)
;; スレッドの親子関係を罫線を使って可視化
(setq mew-use-fancy-thread t)
(setq mew-thread-column 40)
;; スレッド間に区切りを表示
;(setq mew-use-thread-separator t)
;; Text/Html を閲覧するためのコマンド (w3mの場合)
(condition-case nil
(require 'mew-w3m)
(file-error nil))
(setq w3m-type 'w3m)
(require 'mew-w3m)
(setq mew-prog-html '(mew-mime-text/html-w3m nil nil))
;; カレントディレクトリを起動したディレクトリにする
(setq mew-summary-trace-directory nil)
;; バックアップをとる
(setq mew-fcc "%backup")
;; Reply-to があれば、Reply-to だけに返信
(setq mew-reply-all-alist
'(
("Reply-To:"
("To:" "Reply-To:"))
(t
("To:" "From:"))))
;; c-sig によるシグネチャの選択
(autoload 'delete-signature "c-sig" "c-sig" t)
(autoload 'insert-signature-eref "c-sig" "c-sig" t)
(autoload 'insert-signature-automatically "c-sig" "c-sig" t)
;; 対話的に選択
(add-hook 'mew-draft-mode-hook
(function (lambda ()
(define-key mew-draft-mode-map "\C-c\C-i" 'insert-signature-eref))))
;; フォルダの推測ルール
(setq mew-refile-guess-alist
'(
( "Sender:"
( "owner-FreeBSD-users-jp@jp.freebsd.org" . "%FreeBSD." )
( "owner-FreeBSD-net-jp@jp.freebsd.org" . "%FreeBSD.net" )
( "owner-ports-jp@jp.freebsd.org" . "%FreeBSD.ports" )
( "owner-announce-jp@jp.freebsd.org" . "%FreeBSD.announce" )
( "owner-bsd-nomads@clave.gr.jp" . "%FreeBSD.nomads" ))
( "X-ML-Name:"
( "netbsd" . "%NetBSD" )
( "vmware-j" . "%vmware" )
( "gentoojp-users" . "%gentoo" )
( "osx-users" . "%Mac.osx-users" )
( "macosx-jp" . "%Mac.macosx-jp" )
( "mew-dist" . "%mew"))
( "From:"
( "Microsoft" . "%comp" ))
( "To:"
( "tech-misc-ja@jp.netbsd.org" . "%NetBSD")
( "announce@jpcert.or.jp" . "%security" )
( "announce@freebsd.org" . "%FreeBSD.announce" ))
))
;; ユーザ名付き引用記号
(setq mew-cite-prefix-function 'mew-cite-prefix-username)
;; x-face の設定
(setq mew-use-highlight-x-face t)
(setq mew-use-highlight-x-face-function 'x-face-decode-message-header)
(add-hook 'mew-draft-mode-hook
(lambda ()
(when (y-or-n-p "X-Face ? ")
(x-face-insert "~/x-face/smoking.xbm")
)))
;; ヘッダを全て表示する
(setq mew-use-header-veil nil)
;; 自分自身にFrom
(setq mew-summary-form-from-me-prefix nil)
;; unread color
(mew-face-spec-set
'mew-face-mark-unread
'(
(
(
(class color) (type tty)) (:foreground "white"))
(
(
(class color) (background light)) (:foregrount "ForestGreen"))
(
(
(class color) (background dark)) (:foreground "ForestGreen"))
(t (:bold t))))
;; bsfilter
;; $Id: mew.el,v 1.2 2004/10/23 19:08:15 nabeken Exp $
; put "D"
(defun mew-spam-bsfilter (val)
(let (
(case-fold-search t))
(if (string-match "yes" val) ?D)))
(setq mew-inbox-action-alist
'(
("X-Spam-Flag:" mew-spam-bsfilter)))
; for "ls" (learn-spam)
(setq mew-spam-prog "bsfilter")
(setq mew-spam-prog-args '("-C" "-s" "-u"))
; for "lh" (learn-ham)
(setq mew-ham-prog "bsfilter")
(setq mew-ham-prog-args '("-c" "-S" "-u"))
; for "bm" (mark-spam)
(define-key mew-summary-mode-map "bm" 'mew-summary-bsfilter-mark-region)
(defun mew-summary-bsfilter-mark-region (&optional arg)
"study/judge the region and put the '*' mark onto spams.
need to re-learn if judgment of bsfilter is wrong"
(interactive "P")
(mew-pickable
(let (
(func 'mew-summary-pick-with-cmd)
(mew-inherit-grep-cmd "bsfilter -a --list-spam"))
(mew-summary-pick-body func t nil 'nopattern))))
; show X-Spam-Flag and X-Spam-Probability in message buffer
(setq mew-field-spec
(reverse (append (list (car (reverse mew-field-spec)))
'(
("^X-Spam-Probability:$" t)
("^X-Spam-Flag:$" t))
(cdr (reverse mew-field-spec)))))
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.