【求助】Emacs中收发Gmail:proxychains 设置代理的问题

目前邮件处理工作增加,想转到emacs中进行。最麻烦的地方就在于设置代理了。目前卡在了proxychain上。

环境说明:我的代理为 socks5://127.0.0.1:1086

我可以成功执行 proxychains4 curl www.google.com,但是在执行 proxychains4 mbsync --all 时会报错 Socket error: secure connect to imap.gmail.com (74.125.203.108:993): Undefined error: 0 没找到原因,希望得到大家的帮助

proxychains配置

strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode
[ProxyList]
socks5  127.0.0.1 1086

mbsync 相关配置

IMAPAccount gmail
Host imap.gmail.com
SSLType IMAPS
SSLVersions SSLv3
CertificateFile /opt/local/share/curl/curl-ca-bundle.crt

另外记录我所了解的方案,希望对有类似需求的朋友有所帮助。

  1. 收邮件:mbsync 或 offlineimap

    1. :-1: offlineimap 因为offlineimap原生支持代理(设置proxy = SOCKS5:127.0.0.1:1086),我先试用的offlineimap,然而,它必须在python2下使用(参见 IMAP4 protocol error: program error: <class ‘TypeError’> - can’t use a bytes pattern on a string-like object · Issue #607 · OfflineIMAP/offlineimap),用pyenv设置好python2环境,又出现了 tuple index out of range 错误 (与这里描述的问题一致)……看来doom default选择mbsync不是没有道理的,因此转战mbsync
    2. :+1: mbsync 使用没有问题,但是原生不支持代理,需要借助外部工具
      1. torsocks 开发者推荐的工具(Isync / Thread: Make mbsync work behind corporate proxy),但是网上资料较少,加上不太熟悉tor的原理,目前没有成功运行
      2. ssh -q socks5://127.0.0.1:1086 openssl s_client -connect imap.gmail.com:143 -quiet 也是开发者提出的方案之一,但是在我的机子上运行不是很稳定,需要进一步验证
      3. 端口转发 @Chris 提出的方案(目前还有办法在Emacs里收Gmail的邮件吗? - Emacs-general - Emacs China),看反馈不少坛友成功实现,但是我平时用的ShadowsocksX-NG, 似乎没有对应的配置文件给 ss-tunnel -c
      4. proxychains 坛友的推荐,感觉是目前最流行的方案。
  2. 发邮件:好像都是用的emacs的smtpmail,按照我的理解,应该要么用proxychains从终端启动emacs,要么在emacs中设置socks代理(http代理应该不行,因为发邮件不走http)。等我把收邮件配好了再来补充发邮件的信息 :joy:

secure connect to imap.gmail.com 是由于mbsync 配置了 SSLType IMAPS,使用代理时,需要设置为None。

但是现在又出现了新问题:

IMAP error: unexpected EOF from imap.gmail.com (64.233.189.108:143)

似乎是mbsync的配置或是openssl的版本问题?

希望有成功同步的朋友贴出相关配置。

楼主解决了吗?刚配好mu4e+mbsync,还没有试代理

并没有,目前还是卡在代理这里。如果你有新发现,欢迎更新。

一直在用 proxychains + mbsync ,Gmail 的 SSLType 一直设置为了 IMAPS ,没发现啥问题。(虽然 proxychains 用的是 HTTP 代理,不过这大概没关系

感觉是安全性的问题……有几点想跟您确认一下:

  1. 您的google账号安全设置是什么样的?是否允许安全性较低的应用? 参见 https://myaccount.google.com/lesssecureapps

  2. 您的mbsync配置中,这几项是怎么配置的?SSLType、AuthMechs、CertificateFile

  3. 您用的是PassCmd还是Pass?如果是前者,用的是什么命令?加密文件是只写一行 machine gmail login [email protected] password xxx

  1. 没有,有启用两步验证,用的应用密码

  2. SSLType IMAPSAuthMechs PLAIN,证书未设置

  3. PassCmd "gpg --quiet --for-your-eyes-only --no-tty --decrypt ~/.password-store/path/to/xx.gpg" 用的 pass 存,里面就只有应用密码

感谢您的帮助!还是报错Socket error: secure connect to imap.gmail.com ,明明pc curl是正常的。按照您的建议修改好,倒是 ssh -q socks5://127.0.0.1:1086 openssl s_client -connect imap.gmail.com:143 -quiet 有时运行正常。我再捣腾捣腾试试。


yuchen@bogon ~ % pc mbsync --all
[proxychains] config file found: /Users/yuchen/.proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.14/lib/libproxychains4.dylib
C: 0/5  B: 0/4  M: +0/0 *0/0 #0/0  S: +0/0 *0/0 #0/0
Socket error: secure connect to imap.gmail.com (64.233.188.109:993): Undefined error: 0
C: 5/5  B: 0/4  M: +0/0 *0/0 #0/0  S: +0/0 *0/0 #0/0
yuchen@bogon ~ % pc curl www.google.com
[proxychains] config file found: /Users/yuchen/.proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.14/lib/libproxychains4.dylib
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="zh-HK"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="iym2lHJepXB59UaqdxiTAg==">(function(){window.google={kEI:'7t8CYO70LrGQr7wP0sGheA',kEXPI:'0,775922,583487,731,223,5104,207,3204,10,1226,364,925,574,817,383,246,5,1128,226,222,4192,3,65,768,7,210,1264,3859,7,2123,2050,1112996,1197777,506,6,328978,51224,16114,28684,9188,8384,4858,1362,283,9007,3027,4741,12841,4998,7933,5295,2974,873,38,4154,6430,7432,7095,4518,2777,919,2277,8,87,4302,1279,2214,528,149,1103,840,517,1522,4258,312,1137,2,2669,2023,1777,520,1947,2229,93,328,1284,2943,2246,3600,2269,1,957,2845,7,4773,7581,5096,7877,4928,108,3407,908,2,3555,2397,7470,3275,3,346,230,970,865,4625,148,5990,7985,4,1528,2304,1238,1143,4082,670,1697,1789,640,17,446,460,1555,4067,1036,4598,1426,2172,3323,1753,2658,4243,518,912,564,464,217,8,431,30,901,402,2551,138,3095,990,52,3285,2214,1397,195,494,219,638,666,828,130,475,2,1482,3178,319,2361,55,744,213,3625,2795,11,731,665,324,13,524,1284,117,3544,2551,479,12,130,371,1962,130,647,363,17,19,950,2152,6,908,3,107,1420,336,1588,90,1,1663,377,1300,733,104,763,112,528,405,522,492,955,4,518,147,29,1025,158,355,255,1008,3257,1187,665,245,38,2035,1435,838,1446,494,146,472,570,164,526,1194,2,60,2131,1777,166,734,293,3072,320,68,1449,2,106,5707070,3870,35,70,5996725,2799893,1323,549,333,444,1,2,80,1,900,896,1,9,2,2551,1,

虽然不知道楼主解决了没,但是也记录一下我的方法:

; 发邮件
(setq url-gateway-method 'socks)
(setq socks-server '("Default server" "1.2.3.4" 1111 5))
; 收邮件 mbsync 支持设置环境变量,就直接设置
(use-package! mu4e
  :config
  (pcase +mu4e-backend
    (`mbsync
     (setq mu4e-get-mail-command "export http_proxy=http://proxy && export https_proxy=http://proxy; mbsync -a"
           mu4e-change-filenames-when-moving t))
    (`offlineimap
     (setq mu4e-get-mail-command "offlineimap -o -q"))))

1 个赞

在终端中

export http_proxy=http://proxy && export https_proxy=http://proxy; mbsync -a

获得输出

Cannot connect to imap.gmail.com (64.233.188.109:993): Connection timed out

还是不行

不知道你mbsync是怎么陪配置的

整个大概流程就是这样

❯ echo $http_proxy

❯ echo $https_proxy

❯ where se
se: aliased to export http_proxy=http://proxy && export https_proxy=http://proxy
❯ se; mbsync -a
C: 1/1  B: 8/8  M: +0/0 *0/0 #0/0  S: +0/0 *0/0 #0/0
❯ cat .mbsyncrc
IMAPAccount gmail
# Address to connect to
Host imap.gmail.com
User [email protected]
Pass ************
# To store the password in an encrypted file use PassCmd instead of Pass
# PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/.mailpass.gpg"
#
#
# Use SSL
SSLType IMAPS
AuthMechs PLAIN
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore gmail-remote
Account gmail

MaildirStore gmail-local
SubFolders Verbatim
# The trailing "/" is important
Path ~/.mail/gmail/
Inbox ~/.mail/gmail/Inbox

Channel gmail
Master :gmail-remote:
Slave :gmail-local:
# Exclude everything under the internal [Gmail] folder, except the interesting folders
# Patterns * ![Gmail]* "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail"
# Or include everything
Patterns *
# Automatically create missing mailboxes, both locally and on the server
Create Both
# Save the synchronization state files in the relevant directory
SyncState *

http://proxy要换成你的梯子软件的本地地址,一般是http://127.0.0.1:端口号或者socks5://127.0.0.1:端口号之类的

对的,这个没问题的

哇哦,我把AuthMechs LOGIN改成 AuthMechs PLAIN 就好了

感谢感谢

啊这,就第一次成功了,之后再mbsync -a下载邮件,还是报错Cannot connect to imap.gmail.com (108.177.97.109:993): Connection timed out , 不知道是不是有访问速率限制

明明ping imap.gmail.com是可以ping通的

这个问题我也遇到了,只有 gmail 会这样,然后换一个服务器就好了,我一直以为是某些服务器被 Google 给 ban 了😂

for i in `seq 0 9`; do mbsync gmail; done

测试没问题。。大概是碰见网络问题了,也可能是我邮件比较少的原因。

间歇性抽风,offlineimap 的gmail 也是时好时不好

需要telnet imap.gmail.com 993 才能验证是否畅通啊

使用 proxychain 测试 telnet [imap.gmail.com](http://imap.gmail.com/) 993 是畅通的

但是export http_proxy/https_proxy 测试就不畅通

这种情况会影响么?