通过gnutls和额外参数使用emacs24发送电子邮件

4

我在使用emacs24发送邮件时,使用我的posteo邮箱遇到了一个奇怪的问题,但是使用gmail和gmx却一切正常。以下是我当前.emacs配置文件中相关部分(感觉已经排列了无数次,结果总是一样):

(require 'smtpmail)
(require 'starttls)

(setq message-send-mail-function 'smtpmail-send-it)
(setq tls-program '("gnutls-cli --priority NORMAL:%COMPAT -p %p %h"))
(setq starttls-gnutls-program "gnutls-cli --priority NORMAL:%COMPAT")
(setq starttls-use-gnutls t)
(setq smtpmail-stream-type 'starttls)
(setq smtpmail-smtp-server "posteo.de")
(setq smtpmail-debug-info t)
(setq smtpmail-debug-verb t)
(setq smtpmail-smtp-service 587) ;;587(starttls) or 465(tls/ssl) or ?
(setq starttls-extra-arguments '("--priority NORMAL:%COMPAT"))

我的“消息”缓冲区中的输出是:
Sending via mail...
235 2.7.0 Authentication successful
gnutls.c: [0] (Emacs) fatal error: A TLS fatal alert has been received.
gnutls.c: [0] (Emacs) Received alert:  Bad record MAC
smtpmail-send-command: Process smtpmail not running

在我的追踪到posteo.de的SMTP缓冲区中:

220 mail.posteo.de ESMTP Postfix
250-mail.posteo.de
250-PIPELINING
250-SIZE 76800000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
220 2.0.0 Ready to start TLS
250-mail.posteo.de
250-PIPELINING
250-SIZE 76800000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN <omitted>
235 2.7.0 Authentication successful

Process smtpmail connection broken by remote peer
MAIL FROM:<c.bourjau@posteo.de> SIZE=281
QUIT

问题似乎是证书出现了错误的“填充”(我不太确定这是什么)http://gnutls.org/manual/html_node/On-Record-Padding.html。在命令行上与此服务器产生类似错误的另一种方法是执行以下操作:
$ gnutls-cli --starttls -p 587 posteo.de
Resolving 'posteo.de'...
Connecting to '89.146.220.134:587'...

- Simple Client Mode:

220 mail.posteo.de ESMTP Postfix
*** Starting TLS handshake
*** Fatal error: An unexpected TLS packet was received.
*** Handshake has failed

这个错误可以通过在gnutls参数中添加--priority NORMAL:%COMPAT来修复,但我试过没有效果(见.emacs文件)。
所以问题是:如何在emacs中处理抛出这种错误的证书?
非常感谢!
1个回答

6
这篇文章给了我一个重要的提示:如何要求gnutls在emacs 24中使用客户端证书
如果gnutls-available-p不是nil,则emacs24似乎会忽略starttls-gnutls-program变量,需要通过覆盖后面的函数来强制执行。
现在我的工作配置如下:
(require 'smtpmail)
(require 'starttls)

(setq message-send-mail-function 'smtpmail-send-it)
(defun gnutls-available-p ()
  "Function redefined in order not to use built-in GnuTLS support"
  nil)
(setq starttls-gnutls-program "gnutls-cli")
(setq starttls-use-gnutls t)
(setq smtpmail-stream-type 'starttls)
(setq smtpmail-smtp-server "posteo.de")
(setq smtpmail-smtp-service 587) ;;587(starttls) or 465(tls/ssl)
(setq starttls-extra-arguments '("--priority" "NORMAL:%COMPAT"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接