【发布时间】:2021-01-29 15:24:40
【问题描述】:
我正在运行 Selenium/Cucumber 测试,其中我使用 JavaMail API 访问/读取来自 Gmail 帐户的电子邮件。这一切都在本地运行良好,但是在 TeamCity 服务器上运行 Selenium 时与 imap 的连接失败。似乎运行 TeamCity 的计算机无法连接到端口 993。
这些是我尝试过的测试/步骤:
- 在本地运行
telnet imap.gmail.com 993会进入一个空白窗口 = 成功,连接已建立 - Selenium 中的 imap 代码每次都在本地工作(Windows 10)
- 在 TeamCity 上运行相同的 Selenium 脚本会导致以下错误:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: imap.gmail.com, 993; timeout -1
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: imap.gmail.com, 993; timeout -1
Caused by: java.net.ConnectException: Connection refused: connect
- 我登录到运行 TeamCity 的框 (Windows 10),并在传出连接上启用了 Windows 防火墙上的端口 993,但这没有帮助
- 在 TeamCity 计算机上运行
telnet imap.gmail.com 993会导致Connecting To imap.gmail.com...Could not open connection to the host, on port 993: Connect failed - 在 TeamCity 计算机上运行
openssl s_client -connect imap.gmail.com:993会导致
7592:error:0200274D:system library:connect:reason(1869):../openssl-1.1.1a/crypto/bio/b_sock2.c:110:
7592:error:2008A067:BIO routines:BIO_connect:connect error:../openssl-1.1.1a/crypto/bio/b_sock2.c:111:
7592:error:0200274D:system library:connect:reason(1869):../openssl-1.1.1a/crypto/bio/b_sock2.c:110:
7592:error:2008A067:BIO routines:BIO_connect:connect error:../openssl-1.1.1a/crypto/bio/b_sock2.c:111:
connect:errno=0
- 我已允许访问 Gmail 帐户上不太安全的应用程序并尝试了 https://accounts.google.com/b/0/DisplayUnlockCaptcha ,但简单的测试
telnet imap.gmail.com 993无论如何都不会受到影响
这是在本地工作的 Selenium 中使用的代码:
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", email, password);
总结一下:code/imap 连接在本地工作,但在服务器计算机上不起作用。在 Windows 防火墙中启用端口 993 上的传出连接没有帮助。
任何想法都将不胜感激,因为我非常坚持这个想法。
【问题讨论】:
-
我不确定 TeamCity 是什么,但有可能端口 993 是全局防火墙,或者是另一个级别的防火墙。你能到达 443 端口吗?
-
嗨 Max,连接到 443 也失败了。
-
哦,对了,如果您尝试使用 Web 端口,则必须连接到 mail.gmail.com 或类似网站,而不是 imap.gmail.com。
-
我可能将 teamcity 与另一个 CI 事物混淆了......但 IIRC 它完全不允许传出连接。您应该将其用于构建/测试软件,而不是做任何其他事情。你的测试永远不会通过或失败,这取决于某个随机的互联网站点是否关闭,明白吗?
-
经典的响应是存根服务器。我已经在 java 中使用 mockito 和在 ruby 中使用 factorygirl(自重命名)做到了这一点。您会发现,当您存根远程资源时,您的测试运行得更快、更可靠。
标签: windows email jakarta-mail imap firewall