📧 Gmail Gnus GPG Guide(GGGG)

—— 安全电子邮件的守护者:Emacs 中的邮件加密全攻略


🧩 一、什么是 GGGG?

GGGG(Gmail + Gnus + GPG Guide) 是一套在 GNU Emacs 环境中使用 Gnus 作为邮件客户端,通过 GPG(GNU Privacy Guard) 加密通信,并连接 Gmail SMTP/IMAP 的安全邮件收发解决方案。

它为开发者、隐私爱好者、安全从业者提供一种无需网页依赖的纯文本、安全、高度可定制邮件系统


📬 二、核心组件介绍

组件描述
GmailGoogle 提供的邮件服务,支持 IMAP/SMTP 接入
GnusEmacs 的新闻组 & 邮件客户端,可自定义强
GPG(GnuPG)开源加密工具,用于邮件加密/签名
Emacs可编程文本编辑器,是整个系统的基础平台
Message.el / Auth-Source.elEmacs 的邮件发送/认证配置模块

🛠️ 三、配置指南

✅ 1. 安装必要组件

sudo apt install gnupg emacs gnutls-bin

可选(启用图形密码提示):

sudo apt install pinentry-gtk2

✅ 2. 设置 GPG 密钥(如未生成)

gpg --full-generate-key

建议使用:

  • 密钥类型:RSA and RSA
  • 长度:4096
  • 过期时间:1年或更短
  • 使用真实姓名与邮箱地址

查看密钥:

gpg --list-keys

✅ 3. 配置 .gnus.el

(setq user-mail-address "yourname@gmail.com"
      user-full-name "Your Name")

(setq gnus-select-method
      '(nnimap "gmail"
               (nnimap-address "imap.gmail.com")
               (nnimap-server-port 993)
               (nnimap-stream ssl)))

(setq smtpmail-smtp-server "smtp.gmail.com"
      smtpmail-smtp-service 587
      smtpmail-stream-type 'starttls)

✅ 4. 配置身份认证(推荐使用 auth-source)

(setq auth-sources '("~/.authinfo.gpg"))

在 ~/.authinfo.gpg 中写入(用 M-x epa-encrypt-file 加密):

machine imap.gmail.com login yourname@gmail.com password your-app-password
machine smtp.gmail.com login yourname@gmail.com password your-app-password

注意:建议为 Gmail 启用两步验证,并使用 应用专用密码


✅ 5. 启用邮件加密与签名(可选)

(setq mml-secure-openpgp-sign-with-sender t)
(setq mml-secure-openpgp-encrypt-to-self t)
(setq mml-secure-smime-sign-with-sender t)

在邮件正文中使用:

# 在邮件正文中插入:
--text follows this line--
<<正文内容>>
--text ends here--

# 添加这两行启用签名和加密:
<#secure method=pgp mode=signencrypt>

然后使用 C-c C-c 发送邮件。


🔐 四、实际效果

  • 邮件在发送前经过本地 GPG 加密,收件人需私钥解密
  • 邮件签名确保身份可信
  • 与 Gmail 服务 IMAP/SMTP 接口兼容,收发稳定
  • 本地 Emacs/Gnus 全控制,无需浏览器

🧠 五、使用技巧

功能操作方式
发送加密邮件<#secure method=pgp mode=signencrypt> 后发送
显示邮件头H H
只签名不加密mode=sign
仅加密不签名mode=encrypt
阅读加密邮件自动解密(需配置 GPG agent)
密钥管理使用 gpg --edit-key 管理可信度

❗ 常见问题排查

问题原因与解决
密码输入失败检查是否启用 pinentry,或启用 GUI 界面
无法发送邮件检查 smtp.gmail.com 是否允许外部应用
加密失败确保收件人 GPG 公钥存在
GPG 不弹出窗口尝试 export GPG_TTY=$(tty) 加入 shell profile

📚 参考链接


✅ 总结

优点说明
🛡️ 安全性高本地加密、无需第三方插件
🧠 可高度自定义纯 Emacs 内实现全部功能
💡 极客式体验适合程序员、安全从业者