MNM
MNM

Reputation: 2743

SMTP and Java email error

Hello I worked on this code to figure out how SMTP works with a java program and I got really far but I keep getting this error and I dont know whats wrong with it. It all seams to be what other similar programs that I looked at do but theirs seems to work. It gets all the way down to the FROM line and then prints out this error

 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)

Any help with this would be appreciated Thanks

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: [email protected]:\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:  [email protected]):\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"));  

    }   
  }  

Upvotes: 0

Views: 684

Answers (1)

Perception
Perception

Reputation: 80593

The mail server you are attempting to connect to requires you establish a secure connection (TLS) in order to use mail services. Thats the error you are getting.

As far as the solution, I would highly recommend using the JavaMail library as it provides much of this functionality out of the box, and has been robustly tested 'in the wild'.

Upvotes: 1

Related Questions