Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建没有SSL的简单本地SMTP客户端_Java_Sockets_Email_Smtp - Fatal编程技术网

Java 创建没有SSL的简单本地SMTP客户端

Java 创建没有SSL的简单本地SMTP客户端,java,sockets,email,smtp,Java,Sockets,Email,Smtp,我正在本地计算机上运行smtp4dev(),并试图编写一个简单的Java程序,使用SMTP发送邮件 但是当我运行它时,电子邮件没有收到。smtp4dev记录了一个会话,但没有检索到任何内容。我不明白为什么,因为当我用telnet做同样的事情时,它工作得很好,但用Java不行 我还试图将服务器正在回复的内容打印到终端,但它只给了我第一个“220 localhost smtp4dev ready”,然后就什么也没有了 这是我的客户: import java.io.BufferedReader; im

我正在本地计算机上运行smtp4dev(),并试图编写一个简单的Java程序,使用SMTP发送邮件

但是当我运行它时,电子邮件没有收到。smtp4dev记录了一个会话,但没有检索到任何内容。我不明白为什么,因为当我用telnet做同样的事情时,它工作得很好,但用Java不行

我还试图将服务器正在回复的内容打印到终端,但它只给了我第一个“220 localhost smtp4dev ready”,然后就什么也没有了

这是我的客户:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Main {

public static void main(String [] args) {
    String hostName = "localhost";
    int portNumber = 25;
    String userInput = "";
    String mailFrom = "sender@server.com";
    String mailTo = "receiver@server.com";
    String subject = "Important matters";
    String data = "Finish your mission in 24h, sir. Or else...";

    try {
        Socket emailSocket = new Socket(hostName, portNumber);
        PrintWriter out = new PrintWriter(
            emailSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(emailSocket.getInputStream()));

        System.out.println(in.readLine());
        out.append("HELO" + hostName);
        out.append("MAIL FROM: <" + mailFrom + ">");
        System.out.println(in.readLine());
        out.append("RCPT TO: <" + mailTo + ">");
        System.out.println(in.readLine());
        out.append("DATA");
        System.out.println(in.readLine());
        out.append(data);
        out.append(".");
        System.out.println(in.readLine());
        out.append("QUIT");
        System.out.println(in.readLine());
    }
    catch (Exception e) {}  
}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.PrintWriter;
导入java.net.Socket;
公共班机{
公共静态void main(字符串[]args){
字符串hostName=“localhost”;
int端口号=25;
字符串userInput=“”;
字符串mailFrom=”sender@server.com";
字符串mailTo=”receiver@server.com";
String subject=“重要事项”;
String data=“在24小时内完成任务,先生。否则……”;
试一试{
Socket emailSocket=新套接字(主机名、端口号);
PrintWriter out=新的PrintWriter(
emailSocket.getOutputStream(),true);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(emailSocket.getInputStream());
System.out.println(in.readLine());
out.append(“HELO”+主机名);
out.append(“邮件发件人:”);
System.out.println(in.readLine());
out.append(“RCPT TO:”);
System.out.println(in.readLine());
out.追加(“数据”);
System.out.println(in.readLine());
out.追加(数据);
out.追加(“.”);
System.out.println(in.readLine());
退出。追加(“退出”);
System.out.println(in.readLine());
}
捕获(例外e){}
}

}

您尝试刷新写入程序?您似乎没有在发送到服务器的每个数据块末尾发送换行符。根据标准的NVT行为,发送到服务器的每一行都需要以CRLF结尾。我现在试图解决这个问题。通过像这样附加“\r\n:
code
out.append(“HELO\r\n”)<代码>代码
代码
输出。追加(“邮件发件人:\r\n”)<代码>代码但它没有改变任何东西。