SMTP-клиент останавливается командой HELO

Я пытался запустить этот SMTP-клиент. Клиент достигает сервера и может отправить сообщение HELO. Я также могу получить успешное признание. Но после этой первой команды все остальные команды получают подтверждение о том, что команда не распознана. Это довольно странно, и я не могу продолжить свою программу. Пожалуйста помоги..:(

Что ж, это моя программа. Вы можете просто скомпилировать ее в eclipse и использовать пользовательский интерфейс свинга.

enter code here
import java.awt.*;
import java.io.*;
import java.net.Socket;

import javax.swing.*;


public class Mail extends javax.swing.JFrame {


    JLabel userLabel = new JLabel("USER");
    JLabel passLabel = new JLabel("PASS");
    JLabel fromLabel = new JLabel("FROM");
    JLabel toLabel = new JLabel("TO");
    JLabel subjectLabel =  new JLabel("SUBJECT");
    JLabel bodyLabel = new JLabel("BODY");
    JLabel serverLabel=new JLabel("SERVER");
    JButton sendButton = new JButton("Send");
    JButton closeButton = new JButton("Close");
    JTextField userText= new JTextField();
    JPasswordField passText= new JPasswordField();
    JTextField fromText= new JTextField();
    JTextField toText= new JTextField();
    JTextField subjectText= new JTextField();
    JTextField bodyText = new JTextField();
    JTextField serverText = new JTextField("smtp.nus.edu.sg");
    JList testList= new JList() ;
    JTextArea test= new JTextArea() ;
    DefaultListModel testArea= new DefaultListModel();
    BufferedReader input ;
    PrintWriter output ;


    public Mail(){

    setTitle("User Agent");
    this.setSize(1400,1400);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.getContentPane().setLayout(null);


    userLabel.setBounds(12, 12, 70, 12);
    passLabel.setBounds(12, 48, 70, 12);
    fromLabel.setBounds(12, 84, 70, 12);
    toLabel.setBounds(12, 120, 70, 12);
    subjectLabel.setBounds(12, 156, 70, 12);
    bodyLabel.setBounds(12, 192, 70, 12);
    serverLabel.setBounds(12, 228, 70, 12);
    sendButton.setBounds(12, 264, 70, 22);
    closeButton.setBounds(130, 264, 70, 22);
    //testArea.setBounds(130, 294, 170, 122);

    userText.setBounds(60,12,200,22);
    passText.setBounds(60,48,200,22);
    fromText.setBounds(60,84,200,22);
    toText.setBounds(60,120,200,22);
    subjectText.setBounds(60,156,200,22);
    bodyText.setBounds(60,192,200,22);
    serverText.setBounds(60,228,200,22);
    testList.setBounds(130, 294, 970, 922);
    test.setBounds(400, 294, 970, 922);


    getContentPane().add(userLabel);
    getContentPane().add(passLabel);
    getContentPane().add(fromLabel);
    getContentPane().add(toLabel);
    getContentPane().add(subjectLabel);
    getContentPane().add(bodyLabel);
    getContentPane().add(serverLabel);
    getContentPane().add(sendButton);
    getContentPane().add(closeButton);
    getContentPane().add(userText);
    getContentPane().add(passText);
    getContentPane().add(fromText);
    getContentPane().add(toText);
    getContentPane().add(subjectText);
    getContentPane().add(bodyText);
    getContentPane().add(serverText);
    getContentPane().add(testList);
//      getContentPane().add(test);

    testList.setModel(testArea);
    testArea.addElement("this is a test message");

/*thehandler handler = new thehandler();
sendButton.addActionListener(handler);
*/
    theHandler handler = new theHandler();
    closeButton.addActionListener(handler);
   sendButton.addActionListener(handler);
}
class theHandler implements java.awt.event.ActionListener{

    public void actionPerformed(java.awt.event.ActionEvent event){
    Object happen = event.getSource();
    if (happen == closeButton)
      closeButton_actionPerformed(event);
    else if(happen == sendButton)
        sendButton_actionPerformed(event);


}
}

/*void Send_actionPerformed(java.awt.event.ActionEvent event) {
System.exit(0);
}*/


void closeButton_actionPerformed(java.awt.event.ActionEvent event) {
    System.exit(0);
    //testText.setText("vikas");
}

void sendButton_actionPerformed(java.awt.event.ActionEvent event) {

    try{
    Socket sock = new Socket(serverText.getText(), 25);
    //testArea.addElement(sock);
 output = new PrintWriter(sock.getOutputStream(),true);
 input = new BufferedReader(new InputStreamReader(sock.getInputStream()));


//output.flush();

 pass(null);
pass("HELO\r\n");
pass("AUTH LOGIN\r\n");
//pass("AUTH LOGIN\r\n");
//pass(null);


//pass("TlVTU1RVXHUwOTA2OTc1");
//pass("TlVTU1RVXHUwOTA2OTc1");


    }
    catch(Exception e){
    testArea.addElement("Error");
    }
    }
    //testText.setText("vikas");


void pass(String s)throws java.io.IOException{

    if(s!=null){
        output.println(s);
    System.out.println(s);


        testArea.addElement("Me");
        testArea.addElement(s);
    }


    String inline = input.readLine();
    if(inline!= null)
        testArea.addElement("Him");
    testArea.addElement(inline);

//  test.setText(inline);

}

public static void main(String args[]) {
 Mail theMail = new Mail();
 theMail.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}


}

person user1008724    schedule 22.10.2011    source источник
comment
Не публикуйте всю свою программу и не просите кого-нибудь прочитать и исправить ее. Определите конкретную проблему и опубликуйте минимальный код, необходимый для ее воспроизведения.   -  person erickson    schedule 22.10.2011


Ответы (2)


arrow_upward
2
arrow_downward

Поскольку вы отправляете HELO вместо EHLO, сервер, вероятно, не включает поддержку команды ESMTP AUTH.

person erickson    schedule 22.10.2011

arrow_upward
0
arrow_downward

RFC 5321 для SMTP требует, чтобы HELO включал полное доменное имя (имя хоста с доменом), в зависимости от какой SMTP-сервер вы используете, может из-за этого отказаться от связи. Кроме того, HELO устарела в пользу команды EHLO.

Рассматривали ли вы возможность использования Java Mail или Commons-email вместо того, чтобы самостоятельно обрабатывать все протоколы?

person centic    schedule 08.02.2013