[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9 さらなる一歩


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.1 リージョン

Summary モードには、‘C-u’ 付きで呼び出すと、リージョンに作用するコ マンドがあります。これらのコマンドは、ビジブルなリージョンが指定されて いる場合は、‘C-u’ なしでもそのリージョンに作用します。

Emacs では、以下の設定を "~/.emacs" に入れると、ビジブルなリージョンが 利用できるようになります。

(transient-mark-mode 1)

以下に、該当するコマンドを列挙しておきます。

?’, ‘/’, ‘tt’, ‘x’, ‘lx’, ‘ma’, ‘Md’, ‘S’, ‘mlc’, ‘mli’, ‘*’, ‘$’, ‘d’, ‘u

*’, ‘$’, ‘d’, ‘u’ は、直前に数字を入力することで、 繰り返しの回数を指定することもできます。たとえば、‘3*’ は 3 つのメー ルに ‘*’ マークを付けます。数字の前に ‘C-u’ は不要です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.2 移動

Draft モードにおいて、‘C-cC-m’ でメッセージを作成し送信キューに入 れた後、+queue に移動したい場合は、 ‘mew-visit-queue-after-sending’ を ‘t’ に設定して下さい。

Summary モードにおいて、‘C’ でケースを設定した後に、各 inbox に移 動したい場合は、‘mew-visit-inbox-after-setting-case’ を ‘t’ に設定しましょう。

Summary モードから、一番数字の小さい草稿(Draft モード)に移動するには、 ‘C-cC-o’ が利用できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.3 Secure SHell

Mew は SSH として、SSH バージョン 1、2 および OpenSSH をサポートしてい ます。Mew から SSH を利用する前に、必ずコマンド・ラインで "ssh" を実行 し、SSH サーバの公開鍵を取得して下さい。すなわち、ユーザのパスワードか、 ローカルのマシンの秘密鍵を復号化するためのパスワードを入力すれば、サー バにログインできる状態にして下さい。なお、"ssh-agent" を利用すれば、秘 密鍵を復号化するためのパスワードの入力を省略できます。

後は、各プロトコルの SSH に関する変数を設定して下さい。たとえば、POP over SSH を利用する場合は、‘mew-pop-ssh-server’ に SSH サーバの名 前を設定しましょう。

SSH で通信が保護されている場合、モードラインに錠前の絵が表示されます。

Mew の実装では、SSH と TLS を同時には使えません。SSH トンネルの中で TLS を使う必要がある場合、Mew では TLS だけを設定し、SSH トンネ ルはコマンドラインから張るようにして下さい。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.4 Transport Layer Security / Secure Socket Layer

Mew は、通信の秘匿性と完全性を保証するために、TCP 通信路を暗号化する TLS (Transport Layer Security) に対応しています。この機能を使うには、 Emacs に GnuTLS ライブラリが組み込まれているか、外部プログラムとして "stunnel" バージョン 5.15以降が必要です。

TLS プロトコルは、Netscape Communications 社が 1990 年代に開発した SSL (Secure Socket Layer) の後継として規格化されたものです。 2 つのプロトコルには互換性があり、 GnuTLS や “stunnel” プログラムは TLS と SSL の両方に対応しています。 しかし、2020 年の時点で SSL には多数の脆弱性が発見されており、 SSL の使用は避けて TLS のみを使用すべきだと考えられています。

TLS 機能の設定に用いる Mew の設定変数や関数の名前には、 “ssl” が含ま れているものがあります。混乱しやすいですが、このような歴史的な理由によ るものです。

TLS を有効にするには、stunnel もしくは GnuTLS ライブラリのための変数を 設定し、次に各プロトコルについて TLS を有効にするかどうかの設定をしま す。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.5 Stunnel を使った TLS 接続

Mew で利用する前に、TLS サーバに対して "stunnel" で TLS のコネクション が張れるか確かめて下さい。"stunnel" は、"openssl" のライブラリをリンク しているので、"openssl" の知識が必要です。 また、TLS を使うには、認証局方式の信用モデルを理解している必要があります。

信用する証明書を保存しておくディレクトリを "~/.certs" だとしましょう。 ここに "openssl" の "certs" ディレクトリに付いてくる PEM 形式の証明書を "<ハッシュ>.0" という名前でコピーします。

ここでは、PEM 形式の証明書のファイル名を "ca.pem" だとしましょう。「<ハッ シュ>」は以下のように計算できます。

% openssl x509 -hash -noout -in ca.pem

"~/.certs/" へコピーするには、以下のようにします。

% cp ca.pem ~/.certs/`openssl x509 -hash -noout -in ca.pem`.0

"openssl" に付いてくる証明書は、世の中で使われている CA すべてを網羅で きていません。あなたが利用するサーバの証明書が、他の CA から発行された 場合、その CA の証明書を同様にコピーしておく必要があります。インターネッ トにおいて信頼されている CA の証明書は、次の URLで管理・公開されていま す。

https://www.ccadb.org
https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/

Mew で "stunnel" を制御する重要な変数は 2 つです。 ‘mew-ssl-cert-directory’ は、信用する CA の証明書を置いておくディ レクトリであり、初期値は "~/.certs" です。また、 ‘mew-ssl-verify-level’ で、証明書を検証するレベルを指定できます。 レベルの初期値は 1 です。この意味は、以下の通りです。

0

検証しない

1

サーバの証明書があれば検証する。検証結果が失敗なら、TLS コネクショ ンは作られない。証明書がなければ、TLS コネクションを作成する。

2

サーバの証明書を検証する。検証結果が失敗なら、TLS コネクションは作 られない。証明書がなければ、TLS コネクションを作成しない。

3

サーバが送ってきたものではなく、ローカルにインストールされている証明書 で検証する。

変数を設定したら、stunnel を使う準備は完了です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.6 GnuTLS ライブラリを使った TLS 接続

GnuTLS が組み込まれた Emacs を使っている場合、TLS 機能を有効にするため の特別な設定は不要です。次の変数を設定することで、証明書の検証レベルと 信頼するルート CA を変更することができます。

証明書の検証レベルは、Emacs の Network Security Manager(NSM) によって 管理されているポリシーに従います。ポリシーを設定するには、 ‘network-security-level’ という変数を使います。デフォルト値は ‘'medium’ です。‘'low’ の場合、証明書を検証しません。 ‘'medium’ の場合、ルート CA の証明書リストを使って証明書を検証し ます。検証ができなかった場合、もしくは自己署名証明書だった場合、その証 明書を受け入れるかどうかのダイアログが表示されます。また、今まで証明書 を使って暗号路で通信していたサーバに対して、暗号化なしで接続しようとし た場合にも、警告を表示します。‘'high’ とすると、‘'medium’ の チェックに加えて、サーバ証明書の鍵の変更や弱い暗号スイートの使用に関し て警告が表示されます。詳しくは、See (emacs)Network Security を参照 して下さい。

GnuTLS を使う場合は前述のとおり ‘network-security-level’ を設定す ることが推奨されます。一方で Mew は、Stunnel を用いた TLS 接続について、 ‘mew-ssl-verify-level’ という変数を用いて証明書の検証レベルを設定 していました。この変数で設定した場合との後方互換性を保つため、Mew は ‘mew-ssl-verify-level’ が ‘0’ の場合のみ、 ‘network-security-level’ を ‘'low’ に自動設定します。 この自動設定は、 Mew による接続のみに影響します。 ‘mew-ssl-verify-level’ のデフォルト値は ‘1’ となっています。 ‘0’ 以外の値の場合は、‘network-security-level’ の設定に変更 が加えられることはありません。

GnuTLS には、証明書の検証方法を制御するための ‘gnutls-verify-error’ という変数もあります。GnuTLS は TCP 接続の 確立時に証明書を検証します、この変数は、検証に失敗した時に切断するかど うかを制御します。デフォルトでは ‘nil’ に設定されており、検証に失 敗してもすぐには切断しません。前述の Network Security Managerが、TCP 接続の確立後に検証し、切断するかどうかを決定します。すぐに切断しない設 定がデフォルトとなっていることは奇妙に思われるかも知れませんが、Emacs で GnuTLS が標準的な検証よりも多くの項目を検査できるようにするため、 TCP 接続と検証処理を分離しています。

gnutls-verify-error’ を手動で設定した場合、TCP 接続の確立時に証 明書の検証に失敗すると、すぐに接続が切断されます。NSM は検証しません。 この場合、‘network-security-level’ や‘mew-ssl-verify-level’ による設定は無効になりますので注意して下さい。特別な理由がない限り、 ‘gnutls-verify-error’ ではなく‘network-security-level’ を使っ て設定することをお勧めします。

信頼するルート CA は、‘mew-ssl-trustfiles’ の設定に従います。ただし、 GnuTLS には通常、デフォルトのルート CA リストが設定されており、Emacs 26.3 とそれより前のバージョンでは、それが常に先頭に追加されます。リス トを空にしても、デフォルトのリストを無視できないことに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.7 TLS 接続のための変数設定

次に各プロトコルの TLS に関する変数を設定して下さい。たとえば、POP over TLS を利用するには、‘mew-pop-ssl’ を ‘t’ にします。 TLS の実装として stunnel もしくは GnuTLS を明示的に指定したい場合は、 それぞれ ‘'tunnel’, ‘'native’ を指定します。 ‘t’ を設定したプロトコルについては、 ‘mew-ssl-default’ を使って使用する実装を選択することが可能です。 また、 ポート番号が標準と異なる場合には、‘mew-pop-ssl-port’ を設定して下 さい。

(setq mew-pop-ssl t)

SMTP で TLS を利用する場合は、以下のようにします。

(setq mew-smtp-ssl t)

TLS で通信が保護されている場合、モードラインに錠前の絵が表示されます。

Mew では、各プロトコルの STARTTLS 拡張を使い、TCP 接続の確立後に TLS を有効にすることもできます。STARTTLS を利用したい場合、ますは See section Transport Layer Security / Secure Socket Layer の説明に従って設定して下さい。

STARTTLS は、プロトコルの通常のポート番号と TLS 用のポート番号とを 一致するように設定することで有効になります。たとえば、POP では以下のよ うにします。

;; A default value of mew-pop-port is "pop3" (110)
(setq mew-pop-ssl t)
(setq mew-pop-ssl-port mew-pop-port) ;; The default is "pop3s" (995)

以下は、Message Submission で STARTTLS を有効にするための設定例です。

(setq mew-smtp-port "submission") ;; The default is "smtp" (25)
(setq mew-smtp-ssl t)
(setq mew-smtp-ssl-port mew-smtp-port) ;; The default is 465

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.8 スパム

(1) スパムのフィルタが POP サーバや IMAP サーバ側で動いている場合:

POP で +inbox にメッセージを取得したり、$inbox や %inbox でメッセージの 一覧を取ったりする場合に、スパムに自動的に ‘D’ マークを付けること ができます。

Bogofilter を利用している場合は、以下の設定を "~/.mew.el" に入れて下さ い。

(defun mew-spam-bogofilter (val)
  (let ((case-fold-search t))
    (if (string-match "yes" val) ?D)))

(setq mew-inbox-action-alist
      '(("X-Bogosity:" mew-spam-bogofilter)))

D’ マークを付ける代わりに、+spam フォルダへリファイルするように ‘o’ マー クを付けるようにするには、関数を以下のように記述します。

(defun mew-spam-bogofilter (val)
  (let ((case-fold-search t))
    (if (string-match "yes" val) "+spam")))

Spamassassin の場合は、以下の設定を "~/.mew.el" に入れて下さい。

(setq mew-spam: "X-Spam-Flag:")
(defun mew-spam-assassin (val)
  (let ((case-fold-search t))
    (if (string-match "yes" val) ?D)))

(setq mew-inbox-action-alist
      '(("X-Spam-Flag:" mew-spam-assassin)))

bsfilter を使う場合は、bsfilter に含まれているマニュアルを参照して下さ い。

(2) スパムのフィルタが IMAP サーバ側で動いている場合:

%inbox でメッセージの一覧を取る際に、IMAP サーバの中でスパムを消去、ま たは、他のフォルダへ移動させることができます。Bogofilter を利用している 場合は、以下のような設定を "~/.mew.el" に加えて下さい。

(setq mew-imap-spam-field "X-Bogosity")
(setq mew-imap-spam-word "Yes")

mew-imap-spam-folder’ あるいは ‘mew-imap-trash-folder’ が定 義されていれば、そのフォルダへスパムが移動します。そうでなければ、スパ ムは消去されます。

(3) ローカルで bogofilter を動かして、一括して ‘*’ マークを付ける 方法もあります。まず、以下のスクリプトをインストールして下さい。

#!/bin/sh

bogofilter -v -T -B $* | grep S

このスクリプト名を "bogo" だとしましょう。Summary モードで ‘?’ を 実行し、‘RET’ を入力し、コマンド名に "bogo" を指定すれば、スパムに ‘*’ マークが付きます。あとは、‘md’ + ‘x’ などで処理する といいでしょう。

(4) POP サーバを利用しており、サーバ側ではスパムのフィルタを動かせないが、 メッセージの取得時にマークを付けたい場合:

bsfilter は、POP の代理サーバとなる機能があるので、これを実現できます。 詳しくは bsfilter に含まれているマニュアルを参照して下さい。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.9 スパム(2)

Summary モードで読んでいる現在のメッセージを、フィルターにスパムとして 学習させるには ‘ls’ を使います。同様に、ハム(スパムでないメッセー ジ)として学習させるには ‘lh’ を利用して下さい。

両者のコマンドを使用するためには、4 つの変数を設定しておく必要があります。 ここでは bogofilter を例題にとり、3 つの場合について説明します。

(1) ローカルのフィルターに学習させる場合:

(setq mew-spam-prog "bogofilter")
(setq mew-spam-prog-args '("-s" "-N" "-v"))
(setq mew-ham-prog "bogofilter")
(setq mew-ham-prog-args '("-n" "-S" "-v"))

(2) サーバ(<server>)側のフィルターに SSH 経由で学習させる場合:

(setq mew-spam-prog "ssh")
(setq mew-spam-prog-args '("<server>" "bogofilter" "-s" "-N" "-v"))
(setq mew-ham-prog "ssh")
(setq mew-ham-prog-args '("<server>" "bogofilter" "-n" "-S" "-v"))

(3) ファイアウォール(<firewall>)の先のサーバ(<server>)のフィルターに 多段の SSH 経由で学習させる場合:

(setq mew-spam-prog "ssh")
(setq mew-spam-prog-args '("-A" "<firewall>" "ssh" "<server>" "bogofilter" "-s" "-N" "-v"))
(setq mew-ham-prog "ssh")
(setq mew-ham-prog-args '("-A" "<firewall>" "ssh" "<server>" "bogofilter" "-n" "-S" "-v"))

なお SSH を利用する場合、関連するホストには、パスワードなしでログインで きるように設定しておく必要があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.10 アドレスの警告

社内で閉じるべきメッセージの宛先に、うっかり社外の人のアドレスを書いて しまうことがあります。Mew では、たとえば社内のドメイン名を列挙しておく と、社外のアドレスを赤色にして警告してくれます。

どのアドレスを警告するのかを決定する変数は 4 つあり、すべて文字列のリス トになります。Mew は以下のルールに従って、警告するアドレスを決めます。

  1. アドレスが ‘mew-safe-addresses’ で指定されていれば警告しない。
  2. アドレスが ‘mew-warn-addresses’ で指定されていれば警告する。
  3. ドメインが ‘mew-safe-domains’ で指定されていれば警告しない。
  4. ドメインが ‘mew-warn-domains’ で指定されていれば警告する。
  5. mew-warn-addresses’ か ‘mew-safe-domains’ が定義されていれば 警告する。
  6. 警告しない。

以下に "@example.org" 以外のドメインを持つアドレスを警告する例を示します。

(setq mew-safe-domains '("example.org"))

ドメインは "@example.org" ですが、"customers@example.org" は警告したい場合は、 さらに以下のように設定します。

(setq mew-warn-addresses '("customers@example.org"))

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.11 Biff

メッセージが到着したか定期的に調べる機能を biff といいます。Mew では、 以下の設定をすると、5 分ごとに新規メッセージが何個あるか調べるようにな ります。

(setq mew-use-biff t)

新規メッセージがあれば、その数がモードラインに表示されます。

Biff の対象となるサーバとプロトコルは、Mew の起動時に ‘mew-proto’ とケース(‘mew-case’)から決定されます。

以下の設定をすると、新規メッセージがない状態からある状態に変った際に、 ビープ音が鳴ります。

(setq mew-use-biff-bell t)

メッセージの到着を調べる間隔を変えるには、‘mew-biff-interval’ を設 定して下さい。以下は、10 分にする例です。

(setq mew-biff-interval 10)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.12 Edit モード

Edit モードは、既存のメッセージを編集し、新しいメッセージを作成するため のモードです。用途の典型例を以下に示します。

現在のメッセージを Edit モードで編集するには、‘M-e’を押します。す ると、Draft モードに似た形で草稿が用意されます。Edit モードでは、Draft モードと同様の操作で、メッセージを編集できます。

編集したメッセージを新しいメッセージとして保存するには、‘C-cC-c’か ‘C-cC-m’を使います。両者は、まったく同じコマンドです。これらのコマ ンドを実行すると、どのフォルダに保存するかを訊いてきます。

なお、この機能は再編集(See section 送信、返答、転送)と混同しやすいので注意して下さ い。再編集は編集後に送信するのに対し、Edit モードでは編集の後に保存しま す。

以下に Edit モードのまとめを示します。Summary モードから Edit モードに 入るには以下のコマンドを使います。

M-e

現在のメッセージを元に Edit モードに入る。

Edit モードでのコマンドをまとめます。

C-cC-c

編集したメッセージを新しいメッセージに保存。

C-cC-m

C-cC-c’に同じ。

その他

Draft モードと同じ。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.13 XOAUTH2

gmailなどが、認証の仕組みとしてXOAUTH2を要求するようになりました。Mew でも、自分で認証認可の設定をすれば、XOAUTH2が利用できます。クライアント IDとクライアントシークレットを発行できたら、以下の変数に設定してくださ い。

(setq mew-oauth2-client-id "<client id>")
(setq mew-oauth2-client-secret "<client secret>")

うまく設定できれば、使い始めるときに、一回だけローカルのブラウザに認可 画面が表示されます。発行されたアクセストークンは、Mewのパスワードの仕 組みで保存されます。

現在、XOAUTH2で通信が確認できているのはgmailとMS365です。MS365では、以 下の設定も必要です。

(setq mew-oauth2-auth-url "https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize")
(setq mew-oauth2-token-url "https://login.microsoftonline.com/organizations/oauth2/v2.0/token")
(setq mew-oauth2-resource-url "https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access")

[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated on July 8, 2025 using texi2html 5.0.