目录

  1. Gnus、Gmail和GPG简介
  2. 配置Gnus收发Gmail邮件
  3. 安装并配置GPG环境
  4. 在Gnus中集成GPG实现加密解密
  5. 生成和管理GPG密钥对
  6. 使用GPG加密、解密和签名邮件
  7. Gmail与Gnus安全最佳实践
  8. 常见问题及故障排查
  9. 进阶:OAuth2认证与多账号管理

1. Gnus、Gmail和GPG简介

  • Gnus:Emacs内置邮件和新闻客户端,支持IMAP、POP3,配置灵活,能与GPG无缝配合。
  • Gmail:Google免费邮件服务,支持IMAP协议,提供可靠的邮件服务。
  • GPG:GNU Privacy Guard,实现OpenPGP标准的加密工具,提供邮件内容加密和数字签名功能,保护隐私和身份验证。

2. 配置Gnus收发Gmail邮件

2.1 开启Gmail IMAP服务

  • 登录 Gmail → 设置 → 转发和POP/IMAP → 启用IMAP → 保存更改。

2.2 申请应用专用密码(推荐)

  • 开启Google两步验证 → 生成应用专用密码,用于Gnus登录。

2.3 Gnus配置示例(写入 ~/.gnus.el

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

;; IMAP接收配置
(setq gnus-select-method
      '(nnimap "gmail"
               (nnimap-address "imap.gmail.com")
               (nnimap-server-port 993)
               (nnimap-stream ssl)))

;; SMTP发送配置
(setq smtpmail-smtp-server "smtp.gmail.com")
(setq smtpmail-smtp-service 587)
(setq smtpmail-stream-type 'starttls)
(setq smtpmail-auth-credentials "~/.authinfo.gpg")  ;; 账号密码加密文件
(setq send-mail-function 'smtpmail-send-it)

;; 允许Gnus同步标记
(setq gnus-use-cache t)
(setq gnus-thread-sort-functions
      '((not gnus-thread-sort-by-number)
        gnus-thread-sort-by-most-recent-date))

;; 关闭Gnus内置缓存,避免同步问题
(setq gnus-keep-backlog nil)

2.4 创建加密的 ~/.authinfo.gpg 保存邮箱密码

在终端用 gpg 加密创建:

echo "machine smtp.gmail.com login your.email@gmail.com password your_app_password port 587" > ~/.authinfo
gpg -e -r your_gpg_key_email ~/.authinfo
rm ~/.authinfo

Gnus会自动解密读取该文件中的密码。


3. 安装并配置GPG环境

3.1 安装GPG工具

  • Linux/macOS:sudo apt install gnupg # Ubuntu/Debian brew install gnupg # macOS
  • Windows: 安装Gpg4win

3.2 验证安装

gpg --version

4. 在Gnus中集成GPG实现加密解密

4.1 安装并启用EasyPG(epa)支持

在 ~/.gnus.el 添加:

(require 'epa)
(setq epa-file-select-keys nil) ;; 自动选择密钥
(epa-file-enable)

4.2 发送加密邮件示例配置

;; 默认加密给特定收件人
(setq epa-file-encrypt-to '("recipient@example.com"))

;; 签名邮件
(setq message-signature "-----\nYour Name")

4.3 接收加密邮件

  • Gnus自动识别并用私钥解密,要求输入GPG私钥密码。

5. 生成和管理GPG密钥对

5.1 生成密钥对

gpg --full-generate-key
  • 选择RSA和RSA
  • 密钥长度建议4096位
  • 设置用户名邮箱和密码

5.2 查看密钥

gpg --list-keys

5.3 导出公钥(给对方用)

gpg --armor --export your.email@gmail.com > publickey.asc

5.4 导入公钥(对方发来)

gpg --import publickey.asc

6. 使用GPG加密、解密和签名邮件

6.1 发送加密邮件

  • 确保你拥有收件人的公钥
  • 在写邮件时,Gnus自动使用公钥加密

6.2 签名邮件

  • 使用私钥为邮件签名
  • 收件人可验证签名,确认身份

6.3 解密邮件

  • 收到加密邮件时,Gnus自动调用GPG解密
  • 需要输入私钥密码

7. Gmail与Gnus安全最佳实践

  • 使用Google两步验证和应用专用密码
  • 备份和安全保存GPG私钥
  • 使用强密码保护GPG密钥
  • 定期更新和撤销密钥
  • 不要在公共场合明文存储密码和密钥
  • 关闭Gmail网页端自动扫描邮件功能(隐私保护)

8. 常见问题及故障排查

问题解决方案
无法连接Gmail IMAP检查IMAP是否开启,确保网络和端口正确
GPG加密失败或未找到公钥确认导入了正确公钥,且在 epa-file-encrypt-to 中配置了接收者
邮件无法发送检查SMTP服务器地址、端口及认证信息
解密邮件时提示密码错误确认GPG私钥密码正确,且私钥存在
Gnus报错读取 ~/.authinfo.gpg确认该文件格式正确且使用正确的GPG密钥加密

9. 进阶:OAuth2认证与多账号管理

9.1 Gmail OAuth2支持

  • 传统密码认证被限制,可用OAuth2方式认证提升安全
  • 需要在Google开发者控制台注册应用,获得客户端ID和密钥
  • 使用 gnus-oauth2 或类似包集成OAuth2到Gnus

9.2 多账号管理

  • Gnus支持多账号配置,通过不同的 nnimap 服务器和 smtpmail 设置切换
  • 使用邮件组管理方便统一查看和回复

附录:完整示例 .gnus.el 配置片段

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

(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")
(setq smtpmail-smtp-service 587)
(setq smtpmail-stream-type 'starttls)
(setq smtpmail-auth-credentials "~/.authinfo.gpg")
(setq send-mail-function 'smtpmail-send-it)

(require 'epa)
(epa-file-enable)
(setq epa-file-encrypt-to '("recipient@example.com"))

(setq gnus-use-cache t)