SMTP-клиент останавливается с помощью команды HELO - PullRequest
0 голосов
/ 22 октября 2011

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

Ну, это моя программа. Вы можете просто скомпилировать ее в Eclipse и пользовательском интерфейсе Swing l 1003 *

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);


}



}

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

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

0 голосов
/ 08 февраля 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...