0

こんにちは、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"));  

    }   
  }  
4

1 に答える 1

1

接続しようとしているメールサーバーでは、メールサービスを使用するためにSSL(Secure Connection)を確立する必要があります。それはあなたが得ているエラーです。

解決策に関しては、JavaMailライブラリを使用することを強くお勧めします。これは、この機能の多くをすぐに使用でき、「実際に」テストされているためです。

于 2013-02-18T20:04:06.247 に答える