Uda*_*ddy 11 gmail email emacs smtp tls
这是最初于 2010 年 4 月 26 日在https://answers.launchpad.net/vm/+question/108267上提出的问题。
它询问应该如何在 MS Windows 上配置 Emacs 邮件发送包,以便与需要 TLS 和 STARTTLS 的安全 SMTP 服务器(例如 gmail)一起使用。原始问题复制如下。
我安装了 Cygwins gnutls。
在 .emacs 中写道:
(setq send-mail-function 'smtpmail-send-it
message-send-mail-function 'smtpmail-send-it
smtpmail-starttls-credentials
'(("smtp.gmail.com" 587 nil nil))
smtpmail-auth-credentials
(expand-file-name "~/.authinfo")
smtpmail-default-smtp-server "smtp.gmail.com"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587
smtpmail-debug-info t)
(require 'starttls)
(setq starttls-use-gnutls t)
(setq smtpmail-debug-info t)
(setq smtpmail-debug-verb t)
(require 'smtpmail)
Run Code Online (Sandbox Code Playgroud)我使用 gmail 凭据创建了“~/.authinfo”文件。
我删除了 starttls.elc,所以编译后的版本不会被 emacs 加载。
我替换(signal-process (process-id process) 'SIGALRM)为
(call-process "g:\\www\\cygwin\\bin\\kill.exe" nil nil nil
"-ALRM" (format "%d" (process-id process)))
Run Code Online (Sandbox Code Playgroud)我使用的描述来自:http : //obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/
在调试缓冲区中,我收到一个错误:
'Process SMTP exited abnormally with code 53'
Run Code Online (Sandbox Code Playgroud)
这并没有告诉我任何有用的东西。
Uda*_*ddy 13
看起来 Emacs 24(目前处于预发布阶段)已经做了一些改进,事情变得简单多了。首先,该smtpmail库现在可以执行普通 SSL。不需要 STARTTLS。而且,gmail SMTP 支持端口 465 上的 SSL。
因此,这里是所需的设置:
(setq smtpmail-stream-type 'ssl)
(setq smtpmail-smtp-server "smtp.gmail.com")
(setq smtpmail-smtp-service 465)
Run Code Online (Sandbox Code Playgroud)
身份验证凭据(登录名和密码)应进入文件 ~/.authinfo 或 ~/.authinfo.gpg。(它们不能再放入 Emacs 变量中。)在那里,您需要包含一行表单
machine smtp.gmail.com login ..... password ..... port 465
Run Code Online (Sandbox Code Playgroud)
这就是它的全部内容。
以下是引发当前问题的建议。该建议由 Uday Reddy 发现,可以在http://article.gmane.org/gmane.emacs.windows/3250找到。它的日期是 2006 年 8 月 7 日。
Run Code Online (Sandbox Code Playgroud)The problem boils down to the fact that the command (signal-process (process-id process) 'SIGALRM) does not work with Win32 Emacs, even with Cygwin also installed. But one can mimic that with: (call-process "c:\\cygwin\\bin\\kill.exe" nil nil nil "-ALRM" (format "%d" (process-id process)))
根据 gnutsl-cli 的文档(例如http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Initation.html#gnutls_002dcli-Inspiration):
Run Code Online (Sandbox Code Playgroud)starttls option (-s)这就是“连接、建立普通会话并启动 tls”。选项。当收到 EOF 或 SIGALRM 时,将启动 TLS 会话。
Bug #7789,在新闻组 gnu.emacs.bug 中讨论,报告了 MS Windows 中的这种信号缺陷(又名 Woe32)。
我还按照建议进行了此更改(在文件“starttls.el”中的函数“starttls-negotiate-gnutls”中),但我仍然未能成功通过服务器 smtp.gmail.com:587 发送测试电子邮件。
我确定修复方法是更改文件“smtpmail.el”中函数“smtpmail-via-smtp”中的行,内容如下:
(setq process (smtpmail-open-stream process-buffer host port))
Run Code Online (Sandbox Code Playgroud)
到
(let ((coding-system-for-read 'raw-text-unix))
(setq process (smtpmail-open-stream process-buffer host port)))
Run Code Online (Sandbox Code Playgroud)
这确保了当服务器响应插入“进程缓冲区”时不会发生编码转换。特别是,它确保来自服务器的 220 问候语末尾的 CRLF 字符对不会被更改。
通过这一额外的更改,我成功地通过 smtp.gmail.com:587 发送了一封测试电子邮件。
我的Emacs版本信息是“GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) of 2011-03-10 on 3249CTO”。
后来我发现http://comments.gmane.org/gmane.emacs.devel/140976的讨论涵盖了我的修复。该讨论的总标题是“更改‘发送邮件功能’的默认值”(于 2011 年 6 月 26 日开始)。此处讨论的更改(进行修复)已纳入 Emacs 24,但在 Emacs 23.3 或 23.4 中不存在。
| 归档时间: |
|
| 查看次数: |
5088 次 |
| 最近记录: |