Emacs 中发邮件 通过 Gmail SMTP 无法发出去的问题

我的Emacs配置如下:


(use-package message
  :custom (;; user agent
           ;; 'message-user-agent, 'mail-user-agent, 'gnus-user-agent, 'mu4e-user-agent,
           (mail-user-agent 'message-user-agent)

           ;; send mail
           ;; send mail from localhost, NOTE: for Gmail will be in Junk Spam folder.
           ;; (message-send-mail-function 'message-send-mail-with-sendmail)
           ;; send email with SMTP
           (message-send-mail-function 'message-smtpmail-send-it))
  )

(use-package sendmail
  :custom
  ;; use `postfix' `sendmail' server instead of `smtpmail'.
  ;; (setq send-mail-function 'sendmail-send-it)
  ;; use SMTP remote mail host instead of local machine.
  ((send-mail-function 'smtpmail-send-it)
   (mail-default-reply-to user-mail-address)))

(use-package smtpmail
  :custom (;; for debug
           ;; (smtpmail-debug-info t)
           ;; (smtpmail-debug-verb t)
           (send-mail-function 'smtpmail-send-it)
	         (message-send-mail-function send-mail-function)
	         ;; configure Gmail SMTP server
           (smtpmail-smtp-server "smtp.gmail.com")
           (smtpmail-default-smtp-server smtpmail-smtp-server)
	         ;; (smtpmail-stream-type 'ssl)
           (smtpmail-smtp-service 587)   ; "smtp": 25, "smtps": 587
           (smtpmail-smtp-user "[email protected]")
           ;; (smtpmail-auth-credentials (expand-file-name (car auth-sources)))
           (smtpmail-local-domain "gmail.com")
           ;; queue sending email
           ;; (smtpmail-queue-mail t)
           ;; (smtpmail-queue-dir "~/Mails/queue/")
           ))

是不是连接Gmail SMTP还需要fF墙啊?发邮件总是 timeout.

1 个赞

Gmail肯定是要的。

我看了下 smtpmail 这个库的代码,只是大概看了几个发送的核心函数,貌似不是通过url之类的库,所以好像没办法设置代理。有没有其他办法通过代理发送邮件的?

我以前用debian的时候,是用proxychains emacs,用代理来登录的

这样的话就是Emacs全局代理了。不过我记得好像以前也试过,应该也是无法过代理的。

Google 了下 “send mail through proxy” 好像也没找到什么方法。

有折腾过,在网络上搜索有成功使用PAC模式的,链接忘记了,下班我去搜索一下,好像用了一个工具。。。

到时候私信给你,这个话题不适合在论坛讨论

Emacs下是无法开启PAC的,PAC模式一般是代理的全局里面开启下,自动根据规则匹配的。我这个v2代理客户端也好像没有PAC模式,可能是我不会设置,我回头找找。

测试了一下, proxychains emacs确实可以过代理。这个临时办法目前将就用。不知道各位有没有什么好办法?非常感谢各位方案。

同在用 proxychains ,感觉其他的话要么折腾透明代理,要么换其他外部工具发,像 mstmp 啥的,给它套代理发。

Proxifier也挺好用的

我是用proxychains加上mstmp发邮件的

试了下msmtp,配置后,但是测试没有成功。 我的配置如下

defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

# account: Gmail
account gmail
host smtp.gmail.com
port 587
protocol smtp
from [email protected]
user [email protected]
password <Gmail application password>

# account: Outlook
account outlook
host smtp.office365.com
port 587
protocol smtp
from [email protected]
user [email protected]
password <PASSWORD>

# specify socks proxy
proxy_host 127.0.0.1
proxy_port 1086

# set default account
account default : gmail

msmtp 自身是支持 socks proxy 的,我就是配置里面添加了这个。如果通过 proxychains 你是怎么配置的?在Emacs里的 sendmail-programproxychains msmtp ?

Arch Linux 下没搜索到这个程序,google了下主页,打不开。还是搞msmtp吧

smtpmail.el 有可能支持的 HTTP 或 SOCKS 代理的吧?像 url.el 那样,如果可能的话,怎么操作?Emacs 自带了一个 SOCKS 客户端。

看了一下我也是在mstmp的配置里直接设置的代理,记错了。。。

不知道为啥,我用msmtp,登陆gmail登不上去。先是incorrect username and password, 修正后,报错 timeout. 配置我贴在上面了,能否请你帮忙看下,有没有什么问题?感谢

我之前看了 smtpmail 的源代码, smtpmail-send-itsmtpmail-via-smtpopen-network-stream 这样的调用。 看了 open-network-stream 的 函数文档,貌似没有指定 proxy 的地方。也许有其他办法可以控制 open-network-stream 的请求代理?

根据这个链接 提示,url.el 库也是用的 open-network-stream 于是我想到 设置url代理应该是可以的。我重新试了一下,果然成功了。

超开心。哈哈哈哈,问题解决。 解决方案:

(setq url-proxy-services
   '(("no_proxy" . "^\\(localhost\\|10\\..*\\|192\\.168\\..*\\)")
     ("http" . "proxy.com:8080")
     ("https" . "proxy.com:8080")))

这是最原始简单的。 我现在用的是 use-proxy 插件。这个插件融合了我很早以前写的 proxy-modeuse-proxy 的一些特点。

想了一下 这样设置后 Emacs 里面所有url的请求还是全局的。我试试能不能局部应用代理到 smtpmail 上。