您好,我研究了这段代码来弄清楚 SMTP 如何与 java 程序一起工作,我已经走了很远,但我一直收到这个错误,我不知道它有什么问题。这一切似乎都是我看过的其他类似程序所做的,但他们的似乎有效。它一直到 FROM 行,然后打印出这个错误
530 5.7.0 Must issue a STARTTLS command first. n1sm21348109bkv.14 - gsmtp
Exception in thread "main" java.lang.Exception: 250 reply not received from server.
at emailagent.EmailAgent.main(EmailAgent.java:73)
对此的任何帮助将不胜感激谢谢
import java.io.*;
import java.net.*;
import java.util.*;
public class EmailAgent
{
public static void main(String[] args) throws Exception
{
// Establish a TCP connection with the mail server.
System.out.println("Enter the mail server you wish to connect to (example: pop.gmail.com):\n");
String hostName = new String();
Scanner emailScanner = new Scanner(System.in);
hostName = emailScanner.next();
Socket socket = new Socket(hostName, 25);
// Create a BufferedReader to read a line at a time.
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// Read greeting from the server.
String response = br.readLine();
System.out.println(response);
if (!response.startsWith("220"))
{
throw new Exception("220 reply not received from server.");
}
// Get a reference to the socket's output stream.
OutputStream os = socket.getOutputStream();
// Send HELO command and get server response.
String command = "HELO alice\r\n";
System.out.print(command);
os.write(command.getBytes("US-ASCII"));
response = br.readLine();
System.out.println(response);
if (!response.startsWith("250"))
{
throw new Exception("250 reply not received from server.");
}
// Send HELO command and get server response.
System.out.println("Enter the name of your mail domain (example: hotmail.com):");
String heloDomain = emailScanner.next();
String fullHeloCommand = "HELO " + heloDomain + "\r\n";
System.out.print(fullHeloCommand);
os.write(fullHeloCommand.getBytes("US-ASCII"));
response = br.readLine();
System.out.println(response);
if (!response.startsWith("250"))
{
throw new Exception("250 reply not received from server.\n");
}
// Send MAIL FROM command.
System.out.println("Please enter your e-mail address (example: me@myexample.com:\n");
String sourceAddress = emailScanner.next();
String mailFromCommand = "MAIL FROM: <" + sourceAddress + ">\r\n";
System.out.println(mailFromCommand);
os.write(mailFromCommand.getBytes("US-ASCII"));
response = br.readLine();
System.out.println(response);
if (!response.startsWith("250"))
{
throw new Exception("250 reply not received from server.\n");
}
// Send RCPT TO command.
System.out.println("Please type the destination e-mail address (example: example@nova.edu):\n");
String destEmailAddress = new String();
destEmailAddress = emailScanner.next();
String fullAddress = new String();
fullAddress = "RCPT TO: <" + destEmailAddress + ">\r\n";
System.out.println(fullAddress);
os.write(fullAddress.getBytes("US-ASCII"));
response = br.readLine();
System.out.println(response);
if(!response.startsWith("250"))
{
throw new Exception("250 reply not received from server.\n");
}
// Send DATA command.
String dataString = new String();
dataString = "DATA";
System.out.println(dataString);
os.write(dataString.getBytes("US-ASCII"));
response = br.readLine();
if(!response.startsWith("354"))
{
throw new Exception("354 reply not received from server.\n");
}
System.out.println(response);
// Send message data.
System.out.println("Enter your message, enter '.' on a separate line to end message data entry:\n");
String input = new String();
while(input.charAt(0) != '.')
{
input = emailScanner.next();
os.write(input.getBytes("US-ASCII"));
}
//End with line with a single period.
os.write(input.getBytes("US-ASCII"));
response = br.readLine();
System.out.println(response);
if(!response.startsWith("250"))
{
throw new Exception("250 reply not received from server\n");
}
// Send QUIT command.
String quitCommand = new String();
quitCommand = "QUIT";
os.write(quitCommand.getBytes("US-ASCII"));
}
}