局部代理试试 with-proxy
。
感谢,测试了一下 use-proxy
和 with-proxy
都能局部作用。我单独写了个函数,代码如下:
(defun smtpmail-send-email-with-proxy ()
(use-proxy-with-specified-proxies
'(("http" . "localhost:8118")
("https" . "localhost:8118"))
(smtpmail-send-it))
;; or
;; (with-proxy-url
;; :http-server "127.0.0.1:8118"
;; :https-server "127.0.0.1:8118"
;; (smtpmail-send-it))
)
(setq send-mail-function 'smtpmail-send-email-with-proxy)
之前想的局部方案是用advice
(defun smtpmail-proxy-wrap (orig-func &rest args)
"Set url.el proxy with `url-proxy-services' in local scope for smtpmail."
(let ((url-proxy-services '(("no_proxy" . "^\\(localhost\\|192.168.*\\|10.*\\)")
("http" . "127.0.0.1:8118")
("https" . "127.0.0.1:8118"))))
(apply orig-func args)))
(advice-add 'smtpmail-send-it :around #'smtpmail-proxy-wrap)
但是不行,奇怪这个按道理应该是可以的。
不可能吧,是不是你看错了?SMTP smtpmail.el
怎么可能会用到 HTTP url.el
呢?url-proxy-services
只能影响用 url.el
发起的 HTTP(S) 请求。
是的,用到的不是url而是 open-network-stream
,但是设置 url-proxy-services
后竟然也能用。不知道为啥。
但是 url-proxy-services
也不太可能会影响 open-network-stream
,你确定不设置 url-proxy-services
就发不了邮件?
我和你的区别只在于proxy_host和proxy_port这两项直接写在了gmail的password的下两行,而不是像你那样写在最后,不知道有没有区别
恩,又确认测试了好几次,真的发不了。那一次估计是动了其他地方,莫名其妙发出去了,以为好了。看代码我也觉得不应该发出去的。白高兴了。