【问题标题】:What is the problem with creating a mail client without a java mail library?在没有 java 邮件库的情况下创建邮件客户端有什么问题?
【发布时间】:2022-11-05 13:56:54
【问题描述】:
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 ESMTP 250 smtp.naver.com 很高兴认识你 530 5.5.1 需要认证 发送邮件失败 java.lang.Exception: 530 5.5.1 需要验证

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

【问题讨论】:

    标签: java smtp sendmail smtpclient


    【解决方案1】:

    这不是 TLS 问题。用于提交的 SMTP(与用于中继的 SMTP 不同)需要用户身份验证。确保发送 EHLO 而不是 HELO(因为 AUTH 是扩展简单邮件传输协议 (ESMTP) 的扩展)。之后,发送AUTH PLAIN value,其中value 是您运行echo -ne ' 时得到的结果

    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 2014-03-17
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多