使用我的 posteo 电子邮件帐户从 emacs24 发送电子邮件时,我遇到了一个相当奇怪的问题,但使用 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
并在我的 SMTP 到 posteo.de 缓冲区的跟踪中:
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:<[email protected]> 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
如果将 --priority NORMAL:%COMPAT 添加到我尝试无济于事的 gnutls 参数中,则该错误应该是固定的(请参阅 .emacs)。
所以问题是:如何处理在 emacs 中抛出此类错误的证书?
非常感谢!

最佳答案

这篇文章给了我关键的提示:How to ask gnutls to use client certificate in emacs 24

如果 starttls-gnutls-program 不是 gnutls-available-p ,emacs24 似乎会忽略 nil 变量,这必须通过覆盖后一个函数来强制。

我的工作配置现在如下:

(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"))

关于email - 通过带有 gnutls 和额外参数的 smtp 使用 emacs24 发送电子邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22851076/

10-11 08:58