我有一个相当奇怪的问题,使用我的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"))
Run Code Online (Sandbox Code Playgroud)
我的消息缓冲区中的输出是:
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
Run Code Online (Sandbox Code Playgroud)
在我的跟踪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:<c.bourjau@posteo.de> SIZE=281
QUIT
Run Code Online (Sandbox Code Playgroud)
问题似乎是一个似乎有错误"填充"的证书(我不确定这是什么)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
Run Code Online (Sandbox Code Playgroud)
如果将--priority NORMAL:%COMPATgnutls参数添加到我试图无效的gnutls参数(参见.emacs),则可以修复此错误.
所以问题是:如何处理在emacs中抛出这些错误的证书?
非常感谢提前!
这篇文章给了我关键的提示:如何让gnutls在emacs 24中使用客户端证书
starttls-gnutls-program如果gnutls-available-p不是nil,emacs24似乎忽略了变量,必须通过覆盖后一个函数来强制执行.
我的工作配置现在如下:
(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"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |