0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事ではEmacsでのメールの送受信方法を紹介します。具体的には、メールの受信にGnusを、送信にsmtpmailを、メールサービスにGmailを、認証にOAuth2を使うことにします。

※記事内で内容を完結させようと努めましたが、個人的な設定から抜き出しているため一部漏れているかもしれません。不明なことがあったら、何らかの連絡手段で質問いただければ回答・更新するかもしれません(が答えられないかもしれません)。

※本記事はEmacsをはじめたての方でもお読みいただけますが、詰まってもけして自分を責めないでください。メールの設定は本来、やっかいなトピックです。

設定の大筋

登場するファイルはEmacsの初期化ファイル (e.g. ~/.emacs.d/init.el)、auth-sourceファイル (e.g. ~/.authinfo) です。詳細はあとで補足します。

パッケージauth-source-xoauth2-pluginをインストールします。

以下のcustom変数を設定します。ここで、<NAME>のところは実際のメールアドレスになるように書き替えてください。

(auth-source-xoauth2-plugin-mode t)
(gnus-secondary-select-methods
 '((nnimap "imap.gmail.com" (nnimap-user "<NAME>@gmail.com")
           (nnimap-server-port "imaps") (nnimap-stream tls)
           (nnir-search-engine imap) (nnimap-authenticator xoauth2))))
(message-send-mail-function 'smtpmail-send-it)
(smtpmail-smtp-server "smtp.gmail.com")
(smtpmail-smtp-service "587")
(smtpmail-stream-type 'starttls)
;; browse-url-browser-functionはewwにしないことをおすすめします。
;; smtpmail-smtp-userは空にすることをおすすめします。

~/.authinfoに以下を追記します。ここで、<NAME>のところは実際のメールアドレスになるように書き替えてください。

machine imap.gmail.com login <NAME>@gmail.com port imaps auth xoauth2 auth-source-xoauth2-predefined-service google
machine smtp.gmail.com login <NAME>@gmail.com port 587 auth xoauth2 auth-source-xoauth2-predefined-service google

ここまでできたら、いったんEmacsを再起動し、M-x gnusでGnusを起動します。すると次のようなプロンプトがミニバッファに表示されるはずです(途中[...]で省きました)。

Follow the instruction on your default browser, or visit:
https://accounts.google.com/o/oauth2/auth?client_id=[...]
Enter the code your browser displayed:

同時にウェブブラウザが自動で開くはずです。その画面で「続行」を押下します。するとエラーのような画面(例:「Unable to connect」)の画面になります。アドレスバーのURLからクエリパラメータのcode=<CODE>を抜き出してきて控えます1

Emacsに戻り、この値をミニバッファに入力して確定します。
以上です!お疲れさまでした。

補足

ここから先は、本記事の背景から上記の手順にいたるまでの補足をします。参考文献も参照してください。

Emacsでメール?
誰にでもgit-am(1)でパッチをさばいたりDebbugsがらみ等で使わざるをえないときがやってくるはずです。それに何事もやってみるとそれなりに面白いものです。

Gnusについて
Emacsに標準でついてくるのと、私がかかわるプロジェクトの文書にあったので本記事ではこれにしています。Emacsには他にもごまんとMail User Agent (MUA) (とその関連ライブラリ)があります。notmuchやisync (mbsync) やmsmtpなどもおすすめです。

smtpmailについて
Emacs LispによるSMTPクライアントの実装です。customで(message-send-mail-function 'smtpmail-send-it)としたのは、messageメジャーモードからこのライブラリを使ってSMTPによりメールを送信するという指定をしているのです。もちろん他の方法も仰山あります。

Gmailについて
他のOAuth2を使うサービス (e.g. Outlook) にも応用できるはずです。

OAuth2について
Gmailは古式ゆかしきユーザー名とパスワードの方式にも対応しています。実は過去にこれが廃止されかけたのですが、いろいろあってまぬがれたようです。こちらはより単純で、やはりauth-sourceに設定すれば充分使えます。以下は設定例で、<NAME>[...]は実際のものに置き換えます。

# machine smtp.gmail.com login <NAME>@gmail.com password [...] port 587
# machine imap.gmail.com login <NAME>@gmail.com password [...] port 993

auth-sourceファイルが平文……
PGPの設定ができていれば、暗号化された~/.authinfo.gpgファイルを使うこともできます。また、ファイルパスはauth-sources custom変数で設定できます。

また、auth-source-xoauth2-pluginの文書ではJSON形式のauth-sourceファイルが使われています。この記事の範囲では従来のnetrc形式のものでも可能のためそうしています。Infoからわかるようにnetrc形式にはエスケープにまつわる制約があるため、JSON形式を併用したり、そちらに寄せたりする考え方もあります。

パッケージのインストール
M-x package-installでできます。Emacsは既定でpackage-archives変数にelpa.gnu.orgのアーカイブが含まれているため、auth-source-xoauth2-pluginパッケージはすんなり入れられるはずです。

M-x……?
まずはC-h t (help-with-tutorial) をどうぞ。

custom変数の設定
Emacsの初期化ファイルで以下のように設定するのが一つの手です。

(setopt auth-source-xoauth2-plugin-mode t)
;; [...]

もしくは、M-x customize-variableとして変数名を入力すれば、設定画面に行きます。

browse-url-browser-functionを空にしておく理由
EWWは便利なのですが、JavaScriptには非対応です。今回の場合、ブラウザ(Firefoxなど)が自動で開かなくなり、ミニバッファから手作業でURLを切り取ってこなければなりません。また、EWWのバッファが開かれることでGnusとの接触事故を誘発する可能性もあります。そのため空をおすすめしました。

smtpmail-smtp-userを空にしておく理由
auth-source-xoauth2-pluginパッケージが内部的に参照して特別な処理をすることがあります。これが期待通りの挙動をする妨げになるかもしれないため、特に理由がないなら空にしておくことをおすすめします。

Emacsを再起動
M-x restart-emacsとします。普通に終了して起動してもいいです。

続行後のエラーのような画面
コールバックURIの指定によりlocalhostに遷移しています。欲しかったものはURLそのものなので、これは計算通りです。

メールを送るには?
C-x m (M-x compose-mail) とするとmessageメジャーモードのバッファが開きます。「To:」「Subject:」そして本文を記入してC-c C-c (M-x message-send-and-exit) するとメールが送信されます。

まとめ

本記事ではEmacsで簡単にGmailの送受信の設定をする方法を見ました。
よき電子メールライフを!

参考文献

  • auth-sourceについてはInfoの「(auth) Top」
  • smtpmailについてはInfoの「(smtpmail) Top」。
    特に「(smtpmail) Authentication」の末尾にちょこっと説明があります。
    あとは実装をあたりましょう。
  • GnusについてはInfoの「(gnus) Top」。
    特に「(gnus) Customizing the IMAP Connection」のnnimap-authenticatorがEmacsの設定で関係してきます。
  • Initial set up using OAuth2 and auth-source-xoauth2-plugin、リンクは参照時点のもの

QiitaにおいてはGNU Emacs + Gnus + Gmail + OAuth2 の環境を作ろうgnus で gmail を使用するの先行記事があります。

使用許諾

Copyright (C) 2026 gemmaro

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without any warranty.

  1. おそらく&scope=[...]の手前まで続いているでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?