Mew で新規作成や返信時に case を自動的に切り替える方法

※ この記事は = MewでiCloudのメールを読み書き - ぺっくブログミラー @peccul への mention です。 @peccul さんの記事のとおり、Mew で case を設定すると複数アカウント を切り替えることが出来ます。さらに、自動的に切り替えることも出来ます。 pooh@example.com から来たメールへの返信で、case に example を使いた い時は、このように設定します(mew-case-guess-when-replied-alist の書 式は mew-refile-guess-alist と同じです)。 ;; 返信時(a,A)にケースを自動的に設定する。 (setq mew-case-guess-when-replied-alist '(("\\(To\\|Cc\\):" ("pooh@example\\.com" "example")))) 新規作成や転送の時は mew-case-guess-alist に設定します。でも普通は To: や Cc: は空なので、推測に必要な情報がありません。 そこで登場するのが mew-ask-to と mew-ask-cc です。以下のように設定 すれば、返信の時と同じように case が自動的に切り替わります。 ;; 草稿を作る時(w,f,F)、最初に To: と Cc: を聞かれる。 (setq mew-ask-to t mew-ask-cc t) ;; 草稿を作る時(w,f,F)や、再編集時(E)にケースを自動的に設定する。 (setq mew-case-guess-alist '(("\\(To\\|Cc\\):" ("pooh@example\\.com" "example")))) mew-case-guess-alist と mew-case-guess-when-replied-alist について...

2011-12-06 (Tue) · masutaka

「Gmail の連絡先」を Mew のアドレス帳にコピーする

Gmailのアドレス帳をbbdbにインポート を見て触発されたので、Mew でも出 来るようにしてみました。 ~/Mail/Addrbook が「Gmail の連絡先」で完全に上書きされるので、十分 注意して使ってくださいね。 「Gmail の連絡先」と「iPhone の連絡先」も同期できました。 Google SyncがiPhoneに対応 – カレンダーやアドレス帳の同期が可能に | iPhone 研究室(iPadもね) P.S. au 携帯のアドレス帳が悩ましい。。。

2011-06-18 (Sat) · masutaka

Mew の g=>C-s のフォルダ名検索に migemo を使う

iPhone4 を買ったので、メール環境を mbox から Gmail の IMAP に移行し ました。 いつでもどこでもメールを見られるのは便利ですねえ。これでネットから 隔離された実家に帰っても大丈夫そうです。 頻度が減ったとはいえ、Mew からも Gmail を読むことがあります。ただ、 Gmail ではデフォルトのメールフォルダ名が日本語です。 %[Gmail]/ %[Gmail]/すべてのメール %[Gmail]/ゴミ箱 %[Gmail]/スター付き %[Gmail]/下書き %[Gmail]/迷惑メール %[Gmail]/送信済みメール g' => C-s’ での移動が面倒です。正直やってられません。 `g’ => [TAB] なんてもってのほかです。 以下の設定をして、g' => C-s’ から migemo を使えるようにしました。 (defadvice mew-input-folder-search-forward-1 (around mew-input-folder-search-forward-1-with-migemo activate) "migemo を使ってフォルダ名を検索する。" (let ((migemo-do-isearch t)) ad-do-it))

2010-08-04 (Wed) · masutaka

Mew の Draft-mode で次や前の草稿にジャンプする

Summary-mode での C-c C-o (今開いている任意の草稿にジャンプする) は 便利なのでよく使いますが、Draft-mode でも同じことをやりたかったので、 適当な関数を作りました。 (defun mew-draft-jump-to-next-buffer (&optional previous) "Jump to next draft buffer if exists." (interactive "P") (let* ((draft-dir (file-name-as-directory mew-draft-folder)) (regex (mew-folder-regex draft-dir)) (bufs (sort (mew-buffer-list regex) 'string<)) next-list next-buf) (if previous (setq bufs (reverse bufs))) (setq next-list (cdr (member (buffer-name) bufs))) (setq next-buf (if next-list (nth 0 next-list) (nth 0 bufs))) (if (and (get-buffer next-buf) (not (equal next-buf (buffer-name)))) (switch-to-buffer next-buf) (message "No such other draft buffer!...

2010-07-04 (Sun) · masutaka

電子メールでの一行の制限

2つの制限 SMTP プロトコルが定義された RFC 5321 によると、“4.5.3.1.6. Text Line” に一行は(英文字で) 1000 文字までと制限されている。 原文 The maximum total length of a text line including the is 1000 octets (not counting the leading dot duplicated for transparency). This number may be increased by the use of SMTP Service Extensions. 日本語訳 <CRLF> を含むテキスト行の最大長は 1000 オクテットです(透過性のために付けられた複製した先頭のドットはカウントしません)。この数値は SMTP サービス拡張の使用によって増加するかもしれません。 URL: http://www.hde.co.jp/rfc/rfc5321.php 実際はユーザが意識する必要はなくて、MUA(メーラ) が適切に処理してくれる。例えば Mew は長い行があるとエンコード方法を訊いてくる。 Lines are too long. Input encoding (base64): ではメーラが適切に処理しなければどうなるのか? MTA(転送プログラム) が適切に処理してくれる。例えば sendmail の標準的な設定では、990 文字目に !...

2009-03-14 (Sat) · masutaka

Mew で "utf-8 is used. OK?" に相当する文字に色付け

(setq mew-ask-charset '("us-ascii" "iso-2022-jp")) などと設定して、これ以外の文字を含むメールを送信しようとすると、 “utf-8 is used. OK?” と聞かれるが、本文のどこに該当の文字が含まれて いるのか経験と勘(笑)で調べるしかなかった。そこで、“n” でキャンセル した後、該当の文字の背景を紫色にするようにしてみた。 ;; 「UNICODE 文字」の face を定義 (defvar mew-unicode-char-face-list '((((class color) (type tty)) (:bold t)) (((class color) (background light)) (:background "purple")) (((class color) (background dark)) (:background "purple")) (t (:bold t)))) (defface mew-unicode-char-face mew-unicode-char-face-list "UNICODE 文字" :group 'mew-highlight) (defvar mew-unicode-char-face 'mew-unicode-char-face) (face-spec-set 'mew-unicode-char-face mew-unicode-char-face-list) (defadvice mew-encode-undo (after mew-encode-undo-after-advice activate) "「UNICODE 文字」を強調表示" (if mew-ask-charset (let* ((beg (progn (mew-header-goto-body) (point))) (end (or (mew-attach-begin) (point-max))) (unicode-char-regexp (mew-cur-unicode-char-regexp beg end))) (if (stringp unicode-char-regexp) (save-excursion (mew-elet (goto-char beg) (while (and (<= (point) end) (re-search-forward unicode-char-regexp end t)) (put-text-property (match-beginning 0) (match-end 0) 'face 'mew-unicode-char-face)))))))) (defun mew-cur-unicode-char-regexp (beg end) (let (pos unicode-char unicode-char-list) (save-excursion (goto-char beg) (while (< (setq pos (point)) end) (if (and (mew-unicode-char-p pos) (setq unicode-char (char-to-string (char-after pos))) (not (member unicode-char unicode-char-list))) (setq unicode-char-list (cons unicode-char unicode-char-list))) (forward-char 1))) (if (consp unicode-char-list) (concat "[" (mapconcat 'identity unicode-char-list "") "]+")))) (defun mew-unicode-char-p (pos) (let* ((char (char-after pos)) (eight-bit-p (and (not enable-multibyte-characters) (>= char 128))) (charset (if eight-bit-p 'eight-bit (char-charset char)))) (and (not (eq charset 'ascii)) (not (eq charset 'japanese-jisx0208))))) さらに draft-mode で C-c C-l した時も色付けさせる設定。...

2009-03-01 (Sun) · masutaka

Mew でメーリングリストに返信する時に宛先を構築し直す。

某掲示板で話題になっていたので、昔作った関数を見直してみた。 ○機能 返信先のアドレスに、自分が加入している ML が含まれていると、 そのアドレス以外のアドレスを全て宛先から除外する。 削除されたアドレスは、メール本文の先頭に以下のように挿入される。 |!!! Deleted Value !!! |To: who@example.com |Cc: |Dcc: masutaka@example.com 自分が加入している ML は mew-subscribed-mailing-list に設定すること。 ○ソース (defvar mew-subscribed-mailing-list '("mew-dist@mew.org" "mew-win32@mew.org") "加入している ML をリストで記述。正規表現指定不可。 nil ならどの ML にも加入していないものとする。") (defun mew-draft-restructure-header () "返信先のアドレスに、自分が加入している ML が含まれていると、 そのアドレス以外のアドレスを全て宛先から除外する。 自分が加入している ML は mew-subscribed-mailing-list に設定すること。 削除されたアドレスは、メール本文の先頭に挿入される。" (save-excursion (let ((deleted-alist)) (setq deleted-alist (mew-draft-restructure-header-internal)) (when deleted-alist (let (str deleted-list address) (setq str "### Deleted Value ###\n") (dolist (field (list mew-to: mew-cc: mew-dcc: mew-bcc:)) (setq deleted-list (assoc field deleted-alist)) (when deleted-list (setq str (concat str field " " (mapconcat 'format (cdr deleted-list) ", ") "\n")))) (setq str (concat str "\n")) (mew-header-goto-body) (insert str)))))) (defun mew-draft-restructure-header-internal () "To:, Cc:, Bcc:, Dcc: から不要なアドレスを削除し、 削除したフィールドの名前と値をリストで返す。 To: が空になった場合は、Cc: のアドレスを To: に置き換える。" (let (subscribed-ml-exist deleted-alist) (catch 'loop (dolist (field (list mew-to: mew-cc:)) (dolist (address (mew-header-parse-address-list (list field))) ;; 加入している ML があった場合は即座にループから抜ける。 (if (mew-member-case-equal address mew-subscribed-mailing-list) (throw 'loop (setq subscribed-ml-exist t)))))) (when subscribed-ml-exist ;; To と Cc から mew-subscribed-mailing-list 以外のアドレスを削除し、 ;; Bcc と Dcc は自分のアドレスを削除する。 (setq deleted-alist `(,@(mew-draft-restructure-to-cc) ,@(mew-draft-restructure-bcc-dcc))) ;; To が空になっていたら、Cc を To にしてしまおう。 (unless (mew-header-parse-address-list (list mew-to:)) (let ((cc (mew-header-parse-address-list (list mew-cc:)))) (mew-header-delete-lines (list mew-to: mew-cc:)) (mew-header-insert mew-to: (mapconcat 'format cc ", ")) ))) deleted-alist)) (defun mew-draft-restructure-to-cc () "To: と Cc: から不要なアドレスを削除し、 削除したフィールドの名前と値をリストで返す。" (let (deleted-alist) (dolist (field (list mew-to: mew-cc:) deleted-alist) (let (enable-address-list delete-address-list) (dolist (addr (mew-header-parse-address-list (list field))) (if (mew-member-case-equal addr mew-subscribed-mailing-list) (setq enable-address-list `(,@enable-address-list ,addr)) (setq delete-address-list `(,@delete-address-list ,addr)))) (setq deleted-alist (cons (cons field delete-address-list) deleted-alist)) (if enable-address-list (mew-header-replace-value field (mapconcat 'format enable-address-list ", ")) (mew-header-delete-lines (list field))))))) (defun mew-draft-restructure-bcc-dcc () "Bcc: および Dcc: フィールドを削除し、 削除したフィールドの名前と値をリストで返す。" (let (deleted-alist) (dolist (field (list mew-dcc: mew-bcc:) deleted-alist) (let ((deleted-address-list)) (setq deleted-address-list (mew-header-parse-address-list (list field))) (when deleted-address-list (setq deleted-alist (cons (cons field deleted-address-list) deleted-alist)) (mew-header-delete-lines (list field))))))) (add-hook 'mew-draft-mode-newdraft-hook 'mew-draft-restructure-header)

2009-02-14 (Sat) · masutaka

Mew + Namazu (mew-nmz.el)

「To: に masutaka.net@gmail.com を含む」または「ほげほげ」が含まれたメールを検索。 |to=masutaka.net@gmail.com or ほげほげ 「To: に masutaka.net@gmail.com を含む」かつ「ほげほげ」が含まれたメールを検索。 |to=masutaka.net@gmail.com and ほげほげ cc=masutaka.net@gmail.com を使う場合は ~/Namazu/mknmz-inc.pl の $SEARCH_FIELD を修正 して、インデックスを作り直す必要がある。他にもパラメータを追加したほうが良いかもしれない。 mew-dist 28132 参照のこと。 インデックス作り直しに関連した話題をもう一つ。 Namazu-2.0.17 以降であれば `–decode-base64’ が使える。メリットは以下の とおり。こちらも mew-dist 28132 参照のこと。 |・日本語のメールなんだけど、UTF-8 + Base64(Q も可) なものも検索できる。 |・添付された MS-Word などの中身も検索できる。

2008-02-28 (Thu) · masutaka

formailを使った重複メールの削除

[2007-07-31-1] で話題にした重複メールの件。 To: masutaka.net@gmail.com Cc: 加入しているメーリングリスト という宛先でメールが来ると、同じメールが 2 通来てしまう。 procmail 付属の formail をうまくを使えば、スマートに削除できることが分かった。 以下は ~/.procmailrc の該当の設定。 PATH=$PATH:/usr/local/bin MAILDIR=$HOME/Mail.local DELETEDIR=$HOME/.trash/Mail/delete :0 * ? formail -D 8192 msgid.cache * ? touch $DELETEDIR/.mew-mtime $DELETEDIR/. formail が Message-ID を msgid.cache というファイルに 8192byte 蓄え、重複メールかの判断をしている。 そう判断されたメールは $DELETEDIR に振り分けられる。msgid.cache は $MAILDIR に作られる。どちらのディレクトリともメールサーバから見える場所を指定すること。$HOME が無難。ディレクトリはあらかじめ掘っておき、適切なパーミッション(2700等)をかけておくこと。 .mew-mtime を touch しているのは、Mew から $DELETEDIR を見たときにスキャンが走るようにするため。

2007-10-19 (Fri) · masutaka

Emacs のメーラからの LDAP 検索

Mew(mew-ldap.el) (★) [2003-05-13-1] に「使ってみたい」と言ってずいぶん経ったが、自宅で立ち上げたテストサーバから使えるようになった。 mew-ldap.el は以下の Web サイトに置いてある。 URL: http://www.meadowy.org/~gotoh/mew.html ~/.mew.el の設定内容は以下のとおり。 (require 'mew-ldap) (setq mew-ldap-server "ldap") (setq mew-ldap-search-base "dc=masutaka,dc=com") (setq mew-ldap-use t) (define-key mew-draft-header-map (kbd "C-i") 'mew-ldap-header-comp) (define-key mew-header-mode-map (kbd "C-i") 'mew-ldap-header-comp) 意外にサクサクと動いてビックリ。説明には mew-ldap-use は default の nil で良いと書いてあったが、ソースを見た限りでは non-nil じゃないと検索してくれないようだ。 追記(2007-10-27): 上の情報は間違い。nil でも検索してくれる。ただし、なぜか検索してくれない時もある。その場合 C-u TAB すれば、強制的に検索してくれる。 ただ、実際に使えるレベルには達してないと思う。理由は以下のとおり。修正してパッチ送ろうかな…。 ~/Mail/Addrbook と名前が被ると LDAP 側の検索結果が補完候補にならないことがある。 メールアドレスが複数あっても、最初にヒットしたアドレスしか補完されない。 検索(Tab)や展開(M-Tab)には、日本語の名前が使えないみたい。 認証には対応していないみたい。 Summary-mode への名前の展開にも対応していない。

2007-10-15 (Mon) · masutaka