Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[Emacs]mew起動時にアカウントの選択を出来るように

久々のemacsネタです。

mewで複数メールアカウントで扱うときにSummary モードにおいて C で切り替えることが出 来るので非常に便利です。ただし、起動時にdefaultアカウントの選択機能が持っていないので、 mew-init-hookで拡張してみました。

;; アカウント1
(setq my-mew-config-1
      (list
       '(proto                          "+")
       '(name                           "******")
       '(user                           "******")   ; メールアドレスの@から左部分
       '(mail-domain                    "******")   ; メールアドレスの@から右部分
       '(smtp-server                    "******")   ; 送信用サーバアドレス
       '(smtp-port                      "1025")     ;
       '(smtp-user                      "******")   ; 送信用ユーザid
       '(pop-server                     "******")   ; 受信用サーバアドレス
       '(pop-port                       "1110")     ;
       '(pop-user                       "******")   ; 受信用ユーザid
       '(pop-delete                     t)          ; メール受信後サーバー側のメッセージを7日を保持する
       '(pop-auth                       pass)       ; pop3 で受信時の認証方式、指定しない場合はapop方式が使用される
       '(pop-size                       0)          ; メールの上限サイズ。0 の場合は上限なし。
       '(pop-header-only                t)          ; [c-u s]でヘッダの みのコピー
       '(dcc                            "******")   ; 返信時に自分のアドレスをdccに入れる、dccは送信したメールのヘッダーに表示されない
       '(fcc                            "+sent")    ; 送信したメールの保存先
       '(smime-signer                   "******")   ; 電子署名で使用する証明書id
       '(protect-privacy-always         nil)
       '(privacy-method                 smime)      ; 電子署名タイプの指定
       '(draft-privacy-method           smime)
       '(protect-privacy-always-type  smime-signature)
       ))

;; アカウント2
(setq my-mew-config-2
      (list
       '(proto                   "%")
       '(name                    "******")
       '(user                    "******")
       '(mail-domain             "gmail.com")
       '(dcc                     "*******@gmail.com")
       '(protect-privacy-always  nil)
       '(ssl-verify-level        0)
       ;; smtpサーバー
       '(smtp-user               "*******@gmail.com")
       '(smtp-auth               t)
       '(smtp-ssl                t)
       '(smtp-server             "smtp.gmail.com")
       '(smtp-ssl-port           "465")
       ;; imapを使用する場合
       '(inbox-folder            "%gmail")
       '(imap-user               "******@gmail.com")
       '(imap-size               5242880) ; 5m以内即時受信する
       '(imap-auth               t)
       '(imap-ssl                t)
       '(imap-ssl-port           "993")
       '(imap-server             "imap.gmail.com")
       ))

;;; アカウント3
(setq my-mew-config-3
      (list
       '(proto                   "+")
       ;; (中略)
))

;;; アカウント4
(setq my-mew-config-4
      (list
       '(proto                   "+")
       ;; (中略)
))

(setq my-mew-account-list
      (list (append (list 'account1) my-mew-config-1)
            (append (list 'account2) my-mew-config-2)
            (append (list 'account3) my-mew-config-3)
            (append (list 'account4) my-mew-config-4)))

(require 'dash)

;; アカウント選択処理
(defun my-mew-select-account ()
  (let* ((account-name-list (mapcar (lambda (x) (pp-to-string (car x))) my-mew-account-list))
         (selected-account (completing-read "mew account: " account-name-list nil t)))
    (message selected-account)
    (setq mew-config-alist
          (append
           (list
            (append (list 'default)
                    (cdr
                     (car (-filter (lambda (mew-config)
                                     (string= selected-account
                                              (pp-to-string (car mew-config))))
                                   my-mew-account-list)))))
           (-filter (lambda (mew-config)
                      (not
                       (string= selected-account
                                (pp-to-string (car mew-config)))))
                    my-mew-account-list)))))

;; 起動時に走らせる
(add-hook 'mew-init-hook 'my-mew-select-account)

デモ

Comments