如何解决建立连接后 SMTP GMAIL 服务器不响应 (java)
我尝试创建自己的电子邮件客户端。在我开始创建 GUI 等之前,我尝试让基础工作。通过 Gmail 服务器发送电子邮件不起作用。
我通过 SSL 套接字在端口 465 上建立到主机 smtp.gmail.com 的连接。在我发送 EHLO 命令后,服务器回复一条消息。但所有其他消息都被忽略,我对套接字的读取超时。
为什么服务器回复了 EHLO,然后不再响应?
这是我的控制台输出:
Successfully connected to smtp.gmail.com:465.
EHLO gmail.com
220 smtp.gmail.com ESMTP p15sm5794363ejx.109 - gsmtp
MAIL FROM:<myEmail@gmail.com>
java.net.socketTimeoutException: Read timed out
这是我的客户端代码中有趣的部分:
public void connect(String ip,int port,int timeout) {
try {
SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
socket = (SSLSocket) sslSocketFactory.createSocket(ip,port);
socket.setSoTimeout(timeout);
out = new PrintWriter(socket.getoutputStream(),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("Successfully connected to " + ip + ":" + port + ".");
} catch (IOException e) {
System.out.println("Error: Can't connect to " + ip + ":" + port + ".");
e.printstacktrace();
}
}
public String sendMessage(String msg) {
out.print(msg + "\r\n");
String resp = "";
try {
resp = in.readLine();
} catch (IOException e) {
e.printstacktrace();
}
return resp;
}
在主函数中,我只是从控制台读取输入,使用 sendMessage() 发送它并在循环中打印响应。套接字超时设置为 20 秒。
编辑:我不想使用任何 3rd 方库或 javax.mail。
解决方法
在您可以从 Java 应用程序使用您的 Gmail 帐户之前,您必须转到您的 Gmail 首选项并将其配置为能够使用安全性较低的应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。