現代的な電子メールクライアントと Emacs
Thunderbird や Evolution のようなオフラインの電子メールクライアントもありますが、これらのプログラムはしばしば大きく、必要なものがすべて揃っているわけではありませんし、他のアプリケーションとうまく組み合わせられないこともあります。
例えば、Evolutionは電子メールとカレンダーは使えますが、文書処理、ニュースグループ、ToDoリストには対応していません。このため、バラバラなユーザー体験が生まれ、将来的にさらなる問題を引き起こす可能性があります。 一方、Emacsは相互運用性という概念で動いています。Emacsでは、すべてが同じデザイン言語でアクセス、操作できます。基本的な操作をするためのキーバインドも同じです。さらに、パッケージは他のパッケージの入力として使用できるテキストを厳密に作成し、出力することもできます。 例えば、ニュースグループを読むのにgnusを使い、メモを管理するのにOrg Modeを使っている場合、ニュースグループの記事をOrgバッファに指示して注釈を付けたり、インスピレーションとして保存したりすることができます。 さらに、EMMSで音楽を管理している場合、現在の曲のタイトルをテキストで出力します。これをブログの記事にリンクさせれば、何を聴きながら書いているのかを強調することができます。電子メールクライアントとしてのEmacs
Emacsでは、メールをOrgバッファに統合して保存し、注釈を付けたり、カレンダーのToDo項目として保存したりすることができます。
また、その逆も可能です。Orgバッファに記事を書き、Emacsの中でそれを誰かにメールとして送ることができます。これは2つのプログラムの助けを借りて可能です。Offlineimapとnotmuchです。
- Offlineimapは、リモートサーバから電子メールを取得し、ディスクに保存するヘルパープログラムです。このサーバーは、自分でホストしているものでも、GmailやProtonmailのようなメールサービスでもかまいません。
- 一方、Notmuchは、メールにタグを付けて表示する、非常にシンプルなアプリケーションです。受信したすべてのメールのデータベースを維持し、設定した内容に従ってタグを付け、そのタグに基づいてEmacsでこれらのメールを表示します。
Offlineimap と notmuch のインストール
この二つのアプリケーションをDebianとUbuntuにインストールするには,以下のようにします.
sudo apt install offlineimap notmuch
Arch Linux では
sudo pacman -Syu offlineimap notmuch
Fedora では
sudo dnf install offlineimap notmuch
その後、Emacsに付属のnotmuchパッケージをインストールします。現在、MELPAリポジトリで公開されています。まず、Emacsの設定でこれを有効にする必要があるかもしれません。
そのためには、init.elファイルに以下のlispの行を追加してください。(require 'パッケージ)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
(package-initialize)
notmuchパッケージをインストールするには、Alt
+ X
を押して package-install
とタイプしてください。Emacsはインストールするパッケージの名前を聞いてきます。notmuch “と入力してください。
Offlineimap のセットアップ
これが終わったら、Offlineimapの設定を行います。これは主に1つのファイルで行う簡単な作業です。".offlineimaprc “です。
デフォルトでは、この設定ファイルはあなたのホームディレクトリから読み込まれます。このファイルを作成するには、以下のコマンドを実行します。touch /home/$USER/.offlineimaprc
作成が完了したら、お気に入りのテキストエディタでこのファイルを開いてください。
Offlineimapの設定は、INI形式で書かれています。例えば、単一のIMAPアカウント用の.offlineimaprcは次のようなものになります。[一般]
アカウント = imapaccount
[アカウント imapaccount]
ローカルレポジトリ = thismachine
リモートレポジトリ = thatimap
[リポジトリthismachine](thismachine)
タイプ = Maildir
ローカルフォルダ = /home/$USER/mail/youremail@domain.com
[リポジトリ thatimap]
タイプ = IMAP
リモートホスト = imap.domain.com
リモートユーザー = youremail@domain.com
remotepass = your_password_goes_here
ssl = yes
sslcacertfile = /your/ca/cert/path/here
- general カテゴリは、このインストールに単一のアカウントを設定することを Offlineimap に通知します。
- Account カテゴリは、そのアカウントがメールを取得するソース、および Offlineimap がメールを取得するときに実行したいスクリプトを指定します。
- レポジトリ**カテゴリは、設定しようとしているアカウントの設定をOfflineimapに伝えます。ここでの設定は、Gmailを使用しているかどうかに大きく依存します。
メールリポジトリ
Offlineimapは、リモートの電子メールディレクトリの構造をローカルコンピュータに保存することで動作します。これにより、プログラムはリモートIMAPサーバーを模倣し、notmuchのようなメールクライアントがオンラインになる必要なくメールを読むことができるようになります。
リポジトリカテゴリは、ローカルまたはリモートのメールボックスをセットアップするかどうかで異なります。ローカルのメールボックスを作成する場合は、そのタイプを “Maildir” に設定するだけです。これにより、このリポジトリがローカルマシンの場所を指していることをOfflineimapに伝えます。[リポジトリ thismachine]
タイプ = Maildir
localfolders = /home/$USER/mail/youremail@domain.com
これに対して、リモートリポジトリのセットアップは少し複雑です。しかし、一度設定ファイルの各値の意味を理解すれば、リモートの設定はとても簡単になるはずです。
Repository ブロックの例をもう一度見てみましょう。[リポジトリ thatimap]
タイプ = IMAP
リモートホスト = 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 “に設定すると、OfflineimapにIMAPサーバーへの暗号化された接続を確立するように指示します。 ssl**を「yes」に設定すると、OfflineimapにIMAPサーバーとの暗号化された接続を確立したいことを伝えます。 * sslacertfileオプションは、ローカルSSL証明書を指定します。OfflineimapはIMAPサーバーとの接続を確認するためにこれを使用します。
Gmailへの接続
上記のように、OfflineimapはGmailアカウントに接続するための特別な型も提供しています。これは、Googleがメールサービスに接続する際に追加情報を要求するためです。
Offlineimapを使用してGmailに接続するには、ローカルとリモートのリポジトリの種類を変更するだけです。ローカルリポジトリを “GmailMaildir” に、リモートリポジトリを “Gmail” に設定する必要があります。 例えば、Gmail サービスに接続する .offlineimaprc ファイルは以下のようなものになります。[一般的な] アカウント
アカウント = gmailaccount
[アカウント gmailaccount]
ローカルレポジトリ = ローカルgmail
リモートレポジトリ = リモートgmail
[リポジトリ localgmail]
タイプ = GmailMaildir
ローカルフォルダ = /home/$USER/mail/youremail@gmail.com
[リポジトリ remotegmail]
タイプ = Gmail
maxconnections=1
リモートホスト = imap.gmail.com
リモートユーザー = youremail@gmail.com
remotepass = your }_password_goes_here
ssl = yes
sslcacertfile = /your/ca/cert/path/here
SSL接続の確立
次に行うことは、OfflineimapがSSLで接続するように設定することです。これを行うには、システム全体のSSL証明書へのパスを指定する必要があります。
SSL証明書の場所は、実行しているシステムに依存します。しかし、DebianとUbuntuでは、以下のパスにあります。ls /etc/ssl/certs/ca-certificates.crt
これでターミナルで offlineimap を実行し、リモート IMAP サーバーからすべての メールを取得できるようになりました。
notmuch のセットアップ
ここから、notmuch のセットアップに進みます。その名の通り、特に設定することはありません。
IMAP ディレクトリを用意したら、コマンドラインで notmuch を実行します。これは、あなたの特定の電子メールセットアップについて尋ねる設定スクリプトを開始します。 これによって、notmuchはあなたのホームディレクトリに設定ファイルを作成します。以下のコマンドを実行することで確認できます。less /home/$USER/.notmuch-config
新しいメールをどこで見つけるか notmuch に伝えるいくつかのオプションを設定します。また、notmuch がデータベースを検索するときにインデックスさせたくないタグを設定することもできます。
例えば、notmuch がジャンクとタグ付けされたメールを検索しないように設定する ことができます。検索
exclude_tags = junk
Notmuch でメールにタグをつける
お気づきかもしれませんが、notmuchはコマンドラインから直接メールにタグ付けするため、notmuchの設定ファイル内ではメールタグを設定しませんでした。
これにより、notmuch をどのように使用したいかを柔軟に設定することができます。例えば、cronjobとして定期的に実行されるスクリプトにnotmuchタグ付けコマンドを含めることができます。 しかし、これを始めるには、まず以下のコマンドを実行して、notmuchのデータベースを初期化する必要があります。notmuch new
このコマンドは設定ファイルを読み込み、適切なデフォルト値に基づいてデータベースを作成します。ここから、notmuchのタグ付けコマンドを使って、受信メールと既存のメールの両方にタグを付けることができます。
Notmuchのタグ付け構文
notmuchのタグ付け構文は非常に直感的で、一般的な形式は以下のような感じです。
notmuch tag [+|-]label header:header-property (tag:current-tag)
- tag コマンドは notmuch に次の引数がメールボックスのタグ付けルールを作成するのに使われることを 伝えます。
- label オプションはラベルを追加する(+)か、現在あるラベルを削除する(-)かを指定します。例えば、すべての受信メールにはデフォルトで “未読” のタグが付けられます。例えば、すべての受信メールには、デフォルトで “unread” というタグが付けられています。
- header オプションは、設定したメールヘッダに基づくラベルのみを適用するよう notmuch に指示します。* header オプションは、設定したメールヘッダに基づいたラベルのみを適用するよう notmuch に指示します。例えば、“From:” ヘッダを使って、誰からのメールであるかによってメールをフィルタリングできます。
- tag オプションは、タグ付けルールの適用を特定のタグに制限するオプション引数です。例えば、notmuch が未読タグを持つメールにのみラベルを適用するように設定することができます。
Emacsでメールを見る
Emacsでメールを見ることができます。そのためには Alt
+ X
を押して notmuch
とタイプしてください。これでEmacsにnotmuchのフロントエンドパッケージがロードされます。
ランディング画面には、デフォルトでいくつかの標準タグが表示されます。しかし、“All Tags” の横にある “[show]” ボタンをクリックすることで、カスタムタグを表示することができます。また、S
を押してコマンドバッファに “is:tag_name” と入力することでも、自分のタグにアクセスすることができます。
例えば、特定のタグを表示しているときに 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 を使用するように user-agent 変数を設定します。これにより、送信するメールがEmacsからのものであることを識別し、 他のメールサーバと通信することができるようになります。
- message-send-mail-function はEmacsに組み込みの
smtpmail
パッケージを使用してメールを適切に送信するように指示します。 - smtpmail-stream-type は、Emacsがリモートメールサーバに接続するときに使用する接続の種類を示します。現在、ほとんどのメールサーバはSSL/TLSかSTARTTLSのどちらかを使用しています。
- smtpmail-smtp-server は、接続するSMTPサーバのアドレスを指定します。
- smtpmail-smtp-service** は、EmacsがSMTPパケットを送信する際に使用するポートを設定します。SSL/TLSを使用する場合は、SMTPポートとして465を記述します。STARTTLSを使用する場合は、587と記述してください。
.authinfoを使ったメール認証の設定
Emacsがあなたのメールアカウントでメールを送信することを許可する必要があります。これを行うには、.authinfoにあなたの電子メール認証情報を追加します。
.authinfo ファイルは、リモート サービスにログインするときのユーザー資格情報を保存する隠しファイルです。ほとんどの場合、Linuxのインストールには、このファイルはデフォルトでは含まれていません。しかし、以下のコマンドを実行することで、このファイルを作成することができます。touch /home/$USER/.authinfo
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に伝えます。
- ドメイン名 は、接続するマシンのアドレスであることを示します。
- ログイン**フィールドには、電子メールアドレスを設定します。
- port オプションは、Emacsに接続するための特定のポートを設定します。これは、init.elファイルで設定したポート番号と同様のものであるべきです。
- password 変数には、あなたの電子メールアカウントのパスワードが入ります。
Emacs をリロードして、新しい設定を適用します。
Emacsで初めてメールを送信する
これで、Emacsからメールを送るのは非常に簡単になりました。送信するには、Ctrl
+ X
, M
を押すか、notmuch バッファの中で M
を押してください。
これらのキーバインドで composemail
コマンドが実行され、空の見出しを持つメッセージバッファが作成され、そこにメールを入力することができます。
完了したら、Ctrl
+ C
, Ctrl
+ C
を押して、Emacsから最初のメールを送信してください。
よくある質問
1. offlineimapを実行した後、自動的に電子メールにタグを付けることは可能ですか?
Offlineimapの中で、それほど多くないポストシンクフックを作成することによって、これを行うことができます。アカウントカテゴリの下に “postsynchook “という変数を挿入してください。
...
[アカウント imapaccount]
ローカルリポジトリ = thismachine
リモートレポジトリ = thatimap
ポストシンチューク = /path/to/your/script.sh
...
この変数には、タグを設定するための notmuch コマンドを含む実行可能なスクリプトのファイルパスが含まれている必要があります。
例えば、これは受信したメーリングリストのメールから未読タグを削除し、適切なタグを付けるシンプルなポストシンクスクリプトです。#!/bin/sh
notmuch new
notmuch tag -inbox -unread +mailing-list from:mailing-list または to:mailing-list@domain.com tag:inbox
notmuch tag -inbox -unread +mailinglist-cmd from:mailing-list-cmd@domain.com tag:inbox
2. メールを書いたのですが、送らないことにしました。Emacsでメールを破棄するにはどうしたらいいですか。
Emacsでメールを破棄するには、メッセージバッファの中で Ctrl
+ C
, Ctrl
+ D
を押してください。この操作により、Emacsはメールを破棄した下書きとしてタグ付けし、一定期間後に削除します。
3. 3. Emacsのnotmuchの中でメールのタグを変更することは可能ですか?
はい! Notmuchバッファの中で、Shift
+ =
を押してください。これは小さなコマンドバッファを開くので、そこで特定の電子メールに追加したり 削除したりしたいタグを指定することができます。