在没有java邮件库的情况下创建邮件客户端有什么问题


import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;
import java.net.*;
class MailServer{
public static void MailSender() throws Exception{
String Reply;
String To = "???@naver.com";
String From = "???@naver.com";
String Data = "Hello this is computer networking";
SSLSocketFactory sslsocketf = (SSLSocketFactory) SSLSocketFactory.getDefault();
System.out.println("Connect Start");
SSLSocket socket = (SSLSocket)sslsocketf.createSocket("smtp.naver.com", 465);
//Socket socket = new Socket("smtp.gmail.com", 465);
System.out.println("Connect Success");

BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter outToServer = new PrintWriter(socket.getOutputStream(), true);
//String[] supported = socket.getSupportedCipherSuites();
//socket.setEnabledCipherSuites(supported);
Reply = inFromServer.readLine();
if(Reply.startsWith("220"))
System.out.println("Server Connect Success!");
else {
System.out.println("Server Connect Fail");
System.exit(0);
}
System.out.println(Reply);
//HELO command
outToServer.println("HELO naver.com");
Reply = inFromServer.readLine();
ReplyCheck(Reply, "250");
//MAIL FROM command
outToServer.println("MAIL FROM: <" + From + ">");
Reply = inFromServer.readLine();
ReplyCheck(Reply, "250");
//RCPT TO command
outToServer.println("RCPT TO: <" + To + ">");
Reply = inFromServer.readLine();
ReplyCheck(Reply, "250");
//DATA command
outToServer.println("DATA");
Reply = inFromServer.readLine();
ReplyCheck(Reply, "354");
outToServer.println(Data);
outToServer.println(".");
ReplyCheck(Reply, "250");
//QUIT command
outToServer.println("QUIT");
Reply = inFromServer.readLine();
ReplyCheck(Reply, "221");

outToServer.close();
inFromServer.close();
socket.close();
}
public static void ReplyCheck(String Reply, String Status) throws Exception{
System.out.println(Reply);
if(!Reply.startsWith(Status))
throw new Exception(Reply);
}
public static void main(String args[]){
try{
MailServer.MailSender();
System.out.println("Send Mail Success!");
}catch(Exception e){
System.out.println("Send Mail Fail");
System.out.println(e.toString());
}
}
}

如果你执行它,这个短语将出现并结束

连接开始连接成功服务器连接成功!220 smtp.naver.com ESMTP250 smtp.naver.com很高兴见到你530 5.5.1需要身份验证发送邮件失败java.lang.Exception:530 5.5.1需要身份验证的

我认为这是一个安全问题(TLS/SSL(,有解决方案吗?

这不是TLS问题。用于提交的SMTP(与用于中继的SMTP不同(需要用户身份验证。请确保发送EHLO而不是HELO(因为AUTH是扩展简单邮件传输协议(ESMTP(的扩展(。之后,立即发送AUTH PLAIN value,其中value是使用传出邮件服务器的用户名和密码运行echo -ne '000username000password' | openssl base64时得到的内容。

最新更新