[Emacs] Wanderlustでヘッダー情報に基づき送信元情報を自動選択する方法。(SMTPサーバー、メールアドレス等)

[Emacs] Wanderlustでヘッダー情報に基づき送信元情報を自動選択する方法。(SMTPサーバー、メールアドレス等)

Emacsの高機能メーラーWanderlustのちょっと便利な機能を紹介します。

メールをビジネス用途、私用と諸々のケースで使う時に、例えばビジネス用のメールアドレスとプライベートのアドレスが違うケースがあるという事はよくあると思います。仕事で使う場合でもプロジェクトによりアドレスなどが変えるケースもあるかと思います。

色々と使い分けが必要なケースはありますが、これを手動でやっていると間違いが発生したりします。プライベートアドレスで仕事先に送ってしまったとか。

できればこういう事は自動で行ったほうがベターですが、Wanderlustではメールのヘッダー情報に基づいて、送信元情報を自動で変更する機能があるのでそれが使えます。

概要

具体的には届いたメールに返信をする際に、差出人(From)のメールアドレスや、もしくは宛先(ToやCc)を条件に、差出人情報を自動で選択させます。差出人情報には以下のようなものを含みます。

  • 各種メールアドレス (From, Bcc, Fccなど)
  • SMTPサーバー

サーバーも変えられるので、条件によって時にGmailから送ったり、Yahoo!から送ったり、その他プロバイダや自社メールサーバーから送ると行った事も可能です。アドレスだけでなくこの辺を完全に分けたい方もいるかと思います。

設定の概要

Wanderlustはパラメーターが多いですが、今回利用するのは主に "wl-template-alist" , "wl-draft-config-alist" です。その他細かいパラメーターも必要に応じてとなります。

まず先に概略を説明すると

パラメーター名 用途
wl-template-alist テンプレートの登録
wl-draft-config-alist テンプレートの選択条件を設定

といった感じになります。

上記2つのパラメーターを設定しておいて、後はフックで必要なタイミングで設定を反映させる形です。

スポンサーリンク
スポンサーリンク

wl-template-alist の設定例

まずデフォルトの送信者情報やSMTPサーバーを登録しています。その後、"wl-template-alist" で "default", "biz", "private" の3つのテンプレートを登録した例です。登録内容は全て仮のものです。

<span style="color: #546D7A;">;; </span><span style="color: #546D7A;">&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#36865;&#20449;&#32773;&#24773;&#22577;
</span><span style="color: #FF516D;">(</span><span style="color: #C792EA;">setq</span> wl-from <span style="color: #C2E982;">"&#12411;&#12370;&#12387;&#12392; <a href="mailto:hogehogeeeee%40gmail.com">&lt;hogehogeeeee@gmail.com&gt;</a>"</span>
      wl-bcc <span style="color: #C2E982;">"hogehogeeeee@gmail.com"</span>
      wl-fcc <span style="color: #C2E982;">"%Sent:\"hogehogeeeee@gmail.com\"/clear@imap.gmail.com:993!"</span>
      <span style="color: #FF516D;">)</span>

<span style="color: #FF516D;">(</span><span style="color: #C792EA;">setq</span> wl-template-alist
      '<span style="color: #C792EA;">(</span><span style="color: #D9F5DD;">(</span><span style="color: #C2E982;">"default"</span>                      <span style="color: #546D7A;">; </span><span style="color: #546D7A;">&#12486;&#12531;&#12503;&#12524;&#12540;&#12488;&#21517;(&#20219;&#24847;)
</span>         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"From"</span> . wl-from<span style="color: #74CBC4;">)</span>             <span style="color: #546D7A;">; </span><span style="color: #546D7A;">&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#36865;&#20449;&#32773;&#12434;&#21033;&#29992;
</span>         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"Bcc"</span>  . wl-bcc<span style="color: #74CBC4;">)</span>              <span style="color: #546D7A;">; </span><span style="color: #546D7A;">&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;bcc&#12434;&#21033;&#29992;
</span>         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"Fcc"</span>  . wl-fcc<span style="color: #74CBC4;">)</span>              <span style="color: #546D7A;">; </span><span style="color: #546D7A;">&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;fcc&#12434;&#21033;&#29992;
</span>         <span style="color: #74CBC4;">(</span>wl-smtp-posting-server . <span style="color: #C2E982;">"smtp.gmail.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-user . <span style="color: #C2E982;">"Gmail&#12450;&#12459;&#12454;&#12531;&#12488;(&#12513;&#12540;&#12523;&#12450;&#12489;&#12524;&#12473;)"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-local-domain . <span style="color: #C2E982;">"gmail.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-authenticate-type .<span style="color: #C2E982;">"login"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-port . 465<span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-connection-type . 'ssl<span style="color: #74CBC4;">)</span>
         <span style="color: #D9F5DD;">)</span>
        <span style="color: #D9F5DD;">(</span><span style="color: #C2E982;">"biz"</span>
         <span style="color: #546D7A;">;; </span><span style="color: #546D7A;">biz&#12486;&#12531;&#12503;&#12524;&#12540;&#12488;&#12399;&#36865;&#20449;&#32773;&#12450;&#12489;&#12524;&#12473;&#12398;&#12415;&#22793;&#26356;
</span>         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"From"</span> . <span style="color: #C2E982;">"&#12499;&#12472;&#12493;&#12473;&#29992;&#12450;&#12489;&#12524;&#12473; <a href="mailto:hogebizhoegbiz%40gmail.com">&lt;hogebizhoegbiz@gmail.com&gt;</a>"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"Bcc"</span>  . <span style="color: #C2E982;">"hogebizzzz@gmail.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"Fcc"</span>  . wl-fcc<span style="color: #74CBC4;">)</span>              <span style="color: #546D7A;">; </span><span style="color: #546D7A;">&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;fcc&#12434;&#21033;&#29992;
</span>         <span style="color: #74CBC4;">(</span>wl-smtp-posting-server . <span style="color: #C2E982;">"smtp.gmail.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-user . <span style="color: #C2E982;">"Gmail&#12450;&#12459;&#12454;&#12531;&#12488;(&#12513;&#12540;&#12523;&#12450;&#12489;&#12524;&#12473;)"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-local-domain . <span style="color: #C2E982;">"gmail.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-authenticate-type .<span style="color: #C2E982;">"login"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-port . 465<span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-connection-type . 'ssl<span style="color: #74CBC4;">)</span>
         <span style="color: #D9F5DD;">)</span>
        <span style="color: #D9F5DD;">(</span><span style="color: #C2E982;">"private"</span>
         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"From"</span> . <span style="color: #C2E982;">"&#12503;&#12521;&#12452;&#12505;&#12540;&#12488;&#29992; <a href="mailto:privattto%40example.com">&lt;privattto@example.com&gt;</a>"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"Bcc"</span>  . <span style="color: #C2E982;">"privattto@gmail.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span><span style="color: #C2E982;">"Fcc"</span>  . <span style="color: #C2E982;">""</span>%Sent:\"priprivattto@example.com\"/clear@example.com:993!<span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-server . <span style="color: #C2E982;">"example.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-user . <span style="color: #C2E982;">"privattto@example.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-local-domain . <span style="color: #C2E982;">"example.com"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-authenticate-type .<span style="color: #C2E982;">"plain"</span><span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-posting-port . 587<span style="color: #74CBC4;">)</span>
         <span style="color: #74CBC4;">(</span>wl-smtp-connection-type . 'starttls<span style="color: #74CBC4;">)</span>
         <span style="color: #D9F5DD;">)</span>
        <span style="color: #C792EA;">)</span><span style="color: #FF516D;">)</span>

wl-draft-config-alist の設定例

"wl-draft-config-alist" では自動でテンプレートを切り替える条件を記載します。最初のキーワードに "reply" と記載して、その後は条件を正規表現で記載し、最後に切り替えるテンプレートを指定します。リストは必要に応じて複数記載可能です。

<span style="color: #FF516D;">(</span><span style="color: #C792EA;">setq</span> wl-draft-config-alist
      '<span style="color: #C792EA;">(</span><span style="color: #D9F5DD;">(</span>reply
         <span style="color: #C2E982;">"^</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">(</span><span style="color: #C2E982;">To</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">|</span><span style="color: #C2E982;">Cc</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">)</span><span style="color: #C2E982;">:.*@hogehogeeeee@gmail\\.com.*"</span>
         <span style="color: #74CBC4;">(</span>template . <span style="color: #C2E982;">"default"</span><span style="color: #74CBC4;">)</span><span style="color: #D9F5DD;">)</span>
        <span style="color: #D9F5DD;">(</span>reply
         <span style="color: #C2E982;">"^</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">(</span><span style="color: #C2E982;">To</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">|</span><span style="color: #C2E982;">Cc</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">)</span><span style="color: #C2E982;">:.*hogebizzzz@gmail\\.com.*"</span>
         <span style="color: #74CBC4;">(</span>template . <span style="color: #C2E982;">"biz"</span><span style="color: #74CBC4;">)</span><span style="color: #D9F5DD;">)</span>
        <span style="color: #D9F5DD;">(</span>reply
         <span style="color: #C2E982;">"^</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">(</span><span style="color: #C2E982;">From</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">)</span><span style="color: #C2E982;">:.+@foobar\\.com.*"</span>
         <span style="color: #74CBC4;">(</span>template . <span style="color: #C2E982;">"biz"</span><span style="color: #74CBC4;">)</span><span style="color: #D9F5DD;">)</span>
        <span style="color: #D9F5DD;">(</span>reply
         <span style="color: #C2E982;">"^</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">(</span><span style="color: #C2E982;">To</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">|</span><span style="color: #C2E982;">Cc</span><span style="color: #546D7A; font-weight: bold;">\\</span><span style="color: #FFC400; font-weight: bold;">)</span><span style="color: #C2E982;">:.*privattto@example\\.com*"</span>
         <span style="color: #74CBC4;">(</span>template . <span style="color: #C2E982;">"private"</span><span style="color: #74CBC4;">)</span><span style="color: #D9F5DD;">)</span>
        <span style="color: #C792EA;">)</span><span style="color: #FF516D;">)</span>

テンプレートを自動で切り替えるフックを設定

フックに登録することでテンプレートの動的変更が有効になります。

<span style="color: #546D7A;">;; </span><span style="color: #546D7A;">&#12469;&#12510;&#12522;&#12514;&#12540;&#12489;&#12363;&#12425; "A" (wl-summary-reply-with-citation) &#31561;&#12391;
</span><span style="color: #546D7A;">;; </span><span style="color: #546D7A;">&#12489;&#12521;&#12501;&#12488;&#12496;&#12483;&#12501;&#12449;&#20316;&#25104;&#26178;&#12395;&#21205;&#30340;&#22793;&#26356;&#12434;&#33258;&#21205;&#36969;&#29992;
</span><span style="color: #FF516D;">(</span>add-hook 'wl-mail-setup-hook 'wl-draft-config-exec<span style="color: #FF516D;">)</span>

<span style="color: #546D7A;">;; </span><span style="color: #546D7A;">&#12469;&#12510;&#12522;&#12514;&#12540;&#12489;&#12363;&#12425; "E" (wl-summary-reedit) &#12391;&#12513;&#12540;&#12523;&#12434;&#32232;&#38598;&#12377;&#12427;&#26178;
</span><span style="color: #546D7A;">;; </span><span style="color: #546D7A;">&#12395;&#12418;&#33258;&#21205;&#30340;&#12395;&#21205;&#30340;&#22793;&#26356;&#12434;&#36969;&#29992;
</span><span style="color: #FF516D;">(</span>add-hook 'wl-draft-reedit-hook 'wl-draft-config-exec<span style="color: #FF516D;">)</span>

また wl-interactive-send を non-nil にすることで、送信前に変更内容を確認できるので有効にしておいた方が良いです。

<span style="color: #546D7A;">;; </span><span style="color: #546D7A;">&#12513;&#12540;&#12523;&#36865;&#20449;&#26178;&#12395;&#21205;&#30340;&#22793;&#26356;&#12434;&#30906;&#35469;&#12377;&#12427;
</span><span style="color: #FF516D;">(</span><span style="color: #C792EA;">setq</span> wl-interactive-send t<span style="color: #FF516D;">)</span>

設定は以上です。