Emacsをメールクライアントにする方法!Offlineimapとnotmustによる完全設定ガイド
GmailなどのWebメールインターフェースは、効率やセキュリティの面で不満が残ることが多いものです。常時インターネット接続が必要なうえ、一括タグ付けやフィルタリングといった機能も十分にサポートされていません。しかし、すでにテキスト編集にEmacsを使っているなら、そのままメール管理にも活用できるのです。
モダンなメールクライアントとEmacs
ThunderbirdやEvolutionなどオフライン対応のメールクライアントも存在しますが、こうしたアプリケーションはサイズが大きかったり、必要な機能が揃っていなかったり、他のアプリとの連携がうまくいかなかったりしがちです。
たとえばEvolutionはメールとカレンダーを扱えますが、ドキュメント処理、ニュースグループ、ToDoリストには対応していません。このような分断されたユーザー体験は、将来的にさらなる問題を引き起こす可能性があります。
一方、Emacsは「相互運用性」という思想のもとで設計されています。Emacsの中では、すべての機能が共通のデザイン言語を通じてアクセス・操作できます。基本的な操作のキーバインドはどこでも同じ。さらに、各パッケージはテキスト形式の出力を生成するため、それを別のパッケージの入力として利用できます。
たとえば、gnusでニュースグループを読み、Org Modeでメモを管理している場合、ニュースグループの記事をOrgバッファへ送り、注釈を付けたりアイデアとして保存したりできます。
また、EMMSで音楽を管理しているなら、現在再生中の曲名がテキストとして出力されます。これをブログ記事にリンクすれば、「執筆中に聴いている曲」を紹介することも可能です。
Emacsをメールクライアントとして使う
Emacsでは、受信したメールをOrgバッファに統合・保存し、注釈を付けたりカレンダーのToDo項目として登録したりできます。
逆のことも可能です。Orgバッファで記事を書き、そのままEmacsから誰かへメールとして送信できます。
これを実現するのが、Offlineimapとnotmuchという2つのプログラムです。
- Offlineimapは、リモートサーバーからメールを取得してローカルディスクに保存するヘルパープログラムです。サーバーは自前のものでも、GmailやProtonMailのようなメールサービスでも構いません。
- notmuchは、非常にシンプルな設計のアプリケーションで、メールにタグを付けて表示します。受信したすべてのメールのデータベースを維持し、設定に従ってタグを付け、Emacs内でそのタグに基づいてメールを表示します。
Offlineimapとnotmuchのインストール
DebianおよびUbuntuでこれら2つのアプリをインストールするには:
sudo apt install offlineimap notmuch
Arch Linuxの場合:
sudo pacman -Syu offlineimap notmuch
Fedoraの場合:
sudo dnf install offlineimap notmuch
続いて、Emacs用のnotmuchパッケージをインストールします。現在はMELPAリポジトリで提供されているため、事前にEmacs設定でMELPAを有効化しておく必要があるかもしれません。
そのためには、init.elファイルに次のLispコードを追加します:
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
(package-initialize)
notmuchパッケージをインストールするには、Alt + Xを押してpackage-installと入力します。Emacsがインストールしたいパッケージ名を尋ねてくるので、「notmuch」と入力してください。
インストールが完了すると、このパッケージがnotmuchタグ付けプログラムのフロントエンドとして機能します。
Offlineimapの設定
ここまで済んだら、次はOfflineimapの設定です。作業はシンプルで、主に「.offlineimaprc」という単一のファイルに関わるだけです。
デフォルトでは、この設定ファイルはホームディレクトリから読み込まれます。以下のコマンドで作成しましょう:
touch /home/$USER/.offlineimaprc
作成できたら、お好みのテキストエディタでこのファイルを開きます。
Offlineimapの設定はINI形式で記述します。たとえば、単一のIMAPアカウント向けの.offlineimaprcは次のようになります:
[general] accounts = imapaccount [Account imapaccount] localrepository = thismachine remoterepository = thatimap [Repository thismachine] type = Maildir localfolders = /home/$USER/mail/youremail@domain.com [Repository thatimap] type = IMAP remotehost = imap.domain.com remoteuser = youremail@domain.com remotepass = your_password_goes_here ssl = yes sslcacertfile = /your/ca/cert/path/here
- generalセクションは、この環境で単一のアカウントを設定することをOfflineimapに伝えます。
- Accountセクションは、そのアカウントがメールを取得するソースと、メール取得時に実行したいスクリプトを指定します。
- Repositoryセクションは、セットアップしようとしているアカウントの設定をOfflineimapに伝えます。ここの設定内容は、Gmailを使用しているかどうかに大きく依存します。
メールリポジトリの設定
Offlineimapは、リモートのメールディレクトリ構造をローカルコンピュータに保存することで動作します。これにより、プログラムはリモートIMAPサーバーを模倣し、notmuchのようなメールクライアントがオンラインにならずにメールを読めるようになります。
Repositoryセクションの内容は、ローカルメールボックスかリモートメールボックスかによって異なります。ローカルメールボックスを作成するには、typeを「Maildir」に設定するだけです。これにより、このリポジトリがローカルマシン上の場所を指すことがOfflineimapに伝わります。
[Repository thismachine] type = Maildir localfolders = /home/$USER/mail/youremail@domain.com
一方、リモートリポジトリの設定はやや手間がかかります。ただし、設定ファイル内の各値の意味さえ理解していれば、リモートのセットアップは非常に簡単です。
もう一度、Repositoryブロックの例を見てみましょう:
[Repository thatimap] type = IMAP remotehost = imap.domain.com remoteuser = youremail@domain.com remotepass = your_password_goes_here ssl = yes sslcacertfile = /your/ca/cert/path/here
- type設定は、Offlineimapが接続するサーバーの種類を示します。選択肢は2つだけで、「Gmail」(Googleメール用)と「IMAP」(Google以外のアカウント用)です。
- remotehost設定は、Offlineimapが接続するIMAPサーバーのアドレスを指定します。
- remoteuserとremotepassには、あなたの認証情報を入力します。
- sslを「yes」に設定すると、IMAPサーバーへの暗号化接続を確立するようOfflineimapに指示します。
- sslcacertfileオプションは、ローカルのSSL証明書を指定します。Offlineimapはこれを使ってIMAPサーバーとの接続を検証します。
Gmailへの接続
前述のとおり、OfflineimapにはGmailアカウント接続用の特別なタイプも用意されています。Googleのメールサービスへの接続には追加情報が必要だからです。
OfflineimapでGmailに接続するには、ローカルとリモート両方のリポジトリタイプを変更するだけです。ローカルリポジトリを「GmailMaildir」に、リモートを「Gmail」に設定します。
たとえば、Gmailサービスに接続する.offlineimaprcファイルは次のようになります:
[general] accounts = gmailaccount [Account gmailaccount] localrepository = localgmail remoterepository = remotegmail [Repository localgmail] type = GmailMaildir localfolders = /home/$USER/mail/youremail@gmail.com [Repository remotegmail] type = Gmail maxconnections=1 remotehost = imap.gmail.com remoteuser = youremail@gmail.com remotepass = your_password_goes_here ssl = yes sslcacertfile = /your/ca/cert/path/here
SSL接続の確立
次に行うのは、SSL経由で接続するためのOfflineimap設定です。そのためには、システム全体のSSL証明書へのパスを指定する必要があります。
SSL証明書の場所は使用しているシステムによって異なりますが、DebianとUbuntuでは次のパスにあります:
ls /etc/ssl/certs/ca-certificates.crt
これで、ターミナルでofflineimapを実行すれば、リモートIMAPサーバーからすべてのメールを取得できます。
notmuchの設定
続いてnotmuchのセットアップに進みます。名前のとおり、設定すべき項目は多くありません(not much)。
IMAPディレクトリが用意できたら、コマンドラインでnotmuchを実行します。そうすると設定スクリプトが起動し、あなたのメール環境についていくつか質問されます。
これにより、notmuchはホームディレクトリに設定ファイルを作成します。次のコマンドで確認できます:
less /home/$USER/.notmuch-config
新しいメールをどこで探すかをnotmuchに伝えるオプションをいくつか設定します。また、notmuchがデータベースを検索する際にインデックス化したくないタグも設定できます。
たとえば、「junk」タグが付いたメールをnotmuchに検索させないようにするには:
[search] exclude_tags = junk
notmuchでのメールタグ付け
お気づきかもしれませんが、notmuchの設定ファイル内ではメールタグを一切設定しませんでした。notmuchはコマンドラインから直接メールにタグを付けるためです。
この仕組みにより、notmuchの使い方を柔軟に設計できます。たとえば、定期的にcronジョブとして実行されるスクリプトにnotmuchのタグ付けコマンドを組み込むことも可能です。
まずは、次のコマンドを実行してnotmuchのデータベースを初期化しましょう:
notmuch new
これにより設定ファイルが読み込まれ、合理的なデフォルト値に基づいてデータベースが作成されます。以降は、notmuchのタグ付けコマンドを使って、新着メールにも既存メールにもタグを付けられるようになります。
notmuchのタグ付け構文
notmuchのタグ付け構文は非常に直感的で、一般的な形式は次のとおりです:
notmuch tag [+|-]label header:header-property (tag:current-tag)
- tagコマンドは、続く引数を使ってメールボックスにタグ付けルールを作成することをnotmuchに伝えます。
- labelオプションは、ラベルを追加する(+)のか、既存のラベルを削除する(-)のかを指定します。たとえば、すべての新着メールにはデフォルトで「unread」タグが付きます。そこで、-unreadを指定すれば未読タグを削除できます。
- headerオプションは、指定したメールヘッダーに基づいてのみラベルを適用するようnotmuchに指示します。たとえば「From:」ヘッダーを使えば、差出人ごとにメールをフィルタリングできます。
- tagオプションは任意の引数で、タグ付けルールの適用対象を特定のタグを持つメールに限定します。たとえば、未読タグを持つメールにのみラベルを適用する、といった設定が可能です。
Emacsでメールを閲覧する
Emacs内でメールを閲覧できます。Alt + Xを押してnotmuchと入力してください。これによりEmacs用のnotmuchフロントエンドパッケージが読み込まれます。
起動画面にはデフォルトでいくつかの標準タグが表示されます。独自のタグを表示するには、「All Tags」の横にある「[show]」ボタンをクリックします。また、Sキーを押してコマンドバッファに「is:tag_name」と入力してもタグにアクセスできます。
標準のEmacs移動キーや編集キーもnotmuch内でそのまま使えます。さらに、メールをより効率的にフィルタリングするための追加機能も多数備えています。
たとえば、特定のタグを表示中にShift + Zを押すと「ツリー形式」のビューが表示されます。メーリングリストを購読している場合、メールが追いやすいスレッド形式で表示されるため便利です。
Emacsでメールを送信するための設定
これで、Emacs内で読めるメールディレクトリが完成しました。しかし、まだメールを送信する仕組みが必要です。幸い、Emacsでは驚くほど簡単に設定できます。
メール送信機能を有効にするには、init.elファイルに次のLispコードを追加します:
(setq mail-user-agent 'message-user-agent)
(setq message-send-mail-function 'smtpmail-send-it
smtpmail-stream-type 'starttls
smtpmail-smtp-server "mail.domain.com"
smtpmail-smtp-service 587)
- mail-user-agentは、ユーザーエージェント変数をEmacsのmessage-user-agentに設定します。これにより、送信メールがEmacsから来ていることを示せるため、他のメールサーバーと通信できるようになります。
- message-send-mail-functionは、ビルトインの
smtpmailパッケージを使ってメールを正しく送信するようEmacsに指示します。 - smtpmail-stream-typeは、リモートメールサーバーへの接続時にEmacsが使用する接続方式を指定します。現在、ほとんどのメールサーバーはSSL/TLSまたはSTARTTLSを使用しています。
- smtpmail-smtp-serverは、接続先SMTPサーバーのアドレスを設定します。
- smtpmail-smtp-serviceは、EmacsがSMTPパケットの送信に使用するポートを設定します。SSL/TLSを使用する場合は465を、STARTTLSを使用する場合は587を指定します。
.authinfoによるメール認証の設定
Emacsがあなたのメールアカウント経由でメールを送信できるようにする必要があります。これは、.authinfoにメールの認証情報を追記することで実現します。
.authinfoは、リモートサービスへのログイン時にユーザー認証情報を保存する隠しファイルです。多くの場合、Linuxインストール時にはデフォルトで存在しないため、次のコマンドで作成します:
touch /home/$USER/.authinfo
重要な点として、このファイルにはユーザー名やパスワードといった機密情報が含まれます。そのため、自分以外が読み書きできないようアクセス権限を保護しましょう。次のコマンドで実行できます:
chmod 600 /home/$USER/.authinfo
続いて、.authinfoファイルを編集してメールアカウントの認証情報を記載します。.authinfoファイルの一般的な構文は次のとおりです:
machine mail.domain.com login username@domain.com port 587 password mypasswordis123
- machine変数は、別のマシンまたはサーバーに接続することをEmacsに伝えます。
- ドメイン名は、接続先マシンのアドレスであることを示します。
- loginフィールドには、メールアドレスを設定します。
- portオプションは、Emacsが接続する具体的なポートを指定します。init.elファイルで設定したポート番号と一致させてください。
- password変数には、メールアカウントのパスワードを記載します。
新しい設定を反映させるために、Emacsを再起動してください。
Emacsから最初のメールを送る
ここまでの設定が済めば、Emacsからのメール送信は extremely 簡単です。Ctrl + X、Mを押すか、notmuchバッファ内でMを押してください。
これらのキーバインドはcomposemailコマンドを実行し、空のヘッダー付きメッセージバッファを作成します。そこにメール本文を入力しましょう。
入力が終わったら、Ctrl + C、Ctrl + Cを押せば、Emacsから最初のメールが送信されます。
おめでとうございます!Emacsをメールクライアントとしてセットアップすることに成功しました。さらに、IMAPサーバーとSMTPサーバーの仕組みや、メールタグシステムの基本についても理解できたはずです。
この記事を読んで、Emacsで他に何ができるのか興味が湧いた方は、この拡張性の高いテキストエディタで使える便利な5つのパッケージもぜひチェックしてみてください。
よくある質問
1. offlineimapの実行後にメールへ自動的にタグを付けることはできますか?
可能です。Offlineimapにnotmuchのpost-syncフックを作成しましょう。Accountセクションの下に「postsynchook」という変数を挿入します:
... [Account imapaccount] localrepository = thismachine remoterepository = thatimap postsynchook = /path/to/your/script.sh ...
この変数には、タグを設定するためのnotmuchコマンドを含む実行可能スクリプトへのファイルパスを指定します。
たとえば、これは新着メーリングリストのメールから未読タグを削除し、適切なタグを付けるシンプルなpost-syncスクリプトの例です:
#!/bin/sh notmuch new notmuch tag -inbox -unread +mailing-list from:mailing-list or to:mailing-list@domain.com tag:inbox notmuch tag -inbox -unread +mailinglist-cmd from:mailing-list-cmd@domain.com tag:inbox
2. メールを書いたけれど送りたくなくなりました。Emacsでメールを破棄するにはどうすればいいですか?
メッセージバッファ内でCtrl + C、Ctrl + Dを押すことで、Emacsでメールを破棄できます。メールは破棄済み下書きとしてタグ付けされ、一定期間後にEmacsによって削除されます。
3. Emacs内のnotmuchでメールのタグを変更することはできますか?
はい!notmuchバッファ内でShift + =を押してください。小さなコマンドバッファが開き、特定のメールに対して追加または削除したいタグを指定できます。
-
Gmailの「機密モード」とは?自動消滅メールの設定方法を徹底解説
Gmailは、新機能と刷新されたインターフェースを備えて大幅にリニューアルされました。Googleでは、新しいデザインのGmailを使用するかどうかを選択でき、新バージョンに切り替えることで、進化した「機密モード(Confidential Mode)」を利用できるようになります。この記事では、Gmailの機密モードの仕組みと、その便利な活用方法について詳しく解説します。 Gmailの機密モードとは? 機密モードを有効にすると、「一定期間が経過すると自動的に閲覧できなくなるメール」を、Gmailユーザーだけでなく、他社のメールサービス利用者にも送信できます。つまり、機密モードをオンにして送信した
-
【Gmail】メールテンプレートの有効化と使い方を徹底解説!作成・上書き・削除まで
職場では、メールがコミュニケーションや業務報告の共有に欠かせない手段となっています。同僚に送るメールの多くは、本文の内容はほぼ同じで、添付ファイルだけが異なるというケースが少なくありません。 たとえば、お祝いのメール、日常の挨拶メール、あるいは「ファイルを添付いたしますので、ご確認ください」といった定型文で報告書や資料を送るメールなどが該当します。 同じ文章を新規メールのたびに書いたり、コピー&ペーストしたりするのは、続けていくうちに次第に煩わしく感じてしまうものです。 そんな手間を一気に解消してくれるのが「メールテンプレート」機能です。一度作成したテンプレートを保存しておけば、同じ内容のメー