Bonjour a tous,

Je suis entrain de faire un client mail pour les cours et je me heurte a un problème depuis bientot 1 mois sans en trouver la solution...
Je vous explique: Lorsque que je me connecte a un serveur (SMTP, POP ou IMAP), le programme ouvre la connection puis se bloque..
J'ai fais une capture avec Ethereal qui en gros me dit que il y a un "TCP CHECK SUM INVALIDE". Cela arrive just après avoir reçu la trame [ACK,SYN] du serveur (la 1ère donc).
J'ai essayer sous windows, linux, plusieurs pc, plusieurs type de réseaux, plusieurs serveurs, il n'y a rien a faire!

Je m'en remet donc a vous. Je vous mets ma classe qui permet d'envoyer un mail:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
 
package mailer;
 
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.JTextArea;
/**
 *
 * @author  skeltryx
 */
public class CtrEnvoyerMail extends javax.swing.JFrame {
 
    private Mailer mailer;
    private Compte compte;
    private MailEnvoyer mail;
    private static BufferedReader in;
    private static PrintWriter out;   
 
    /** Creates a new instance of CtrEnvoyerMail */
    public CtrEnvoyerMail(Mailer m, Compte c, MailEnvoyer mail) {
        this.lierMailer(m);
        this.lierCompte(c);
        this.lierMail(mail);
        this.setVisible(true);
        initComponents();
 
        try{Thread.sleep(500);} catch(Exception e){}
 
        try{
 
            Socket socket = new Socket(compte.getServeurSmtp().getHost(), 25);
             out = new PrintWriter(socket.getOutputStream());
             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            if (socket.isConnected() == false) {
                jTextArea1.setText("Erreur de connection !\n");
            }
            else {
 
             jTextArea1.setText("Connection établie !\n");
             // crée les in et out pour lire et écrire
 
             String reponse = receive();
             jTextArea1.setText(jTextArea1.getText() + reponse + "\n");
 
             send("HELO "+compte.getServeurSmtp().getHost());
             jTextArea1.setText(jTextArea1.getText() + "HELO "+compte.getServeurSmtp().getHost() + "\n");
 
             reponse = receive();
             jTextArea1.setText(jTextArea1.getText() + reponse + "\n");
 
 
             send("MAIL FROM: <" + compte.getMail() + ">");
             jTextArea1.setText(jTextArea1.getText() + "MAIL FROM: <" + compte.getMail() + ">" + "\n");
 
 
             reponse = receive();
             jTextArea1.setText(jTextArea1.getText() + reponse + "\n");
 
             send("RCPT TO: <" + mail.getDestinataire() + ">");
 
             jTextArea1.setText(jTextArea1.getText() + "RCPT TO: " + mail.getDestinataire() + "\n");
 
 
             reponse = receive();
             jTextArea1.setText(jTextArea1.getText() + reponse + "\n");
 
             send("DATA");
             jTextArea1.setText(jTextArea1.getText() + "DATA" + "\n");
 
 
             send("Subject: " + mail.getSujet());
             jTextArea1.setText(jTextArea1.getText() + "Subject: " + mail.getSujet() + "\n");
 
 
             StringTokenizer tokenizer = new StringTokenizer(mail.getBody(), "\n");
             while (tokenizer.hasMoreTokens())
                send(tokenizer.nextToken());
 
 
             send(".");
             jTextArea1.setText(jTextArea1.getText() + "\r\n.\r\n" + "\n");
 
 
             reponse = receive();
             jTextArea1.setText(jTextArea1.getText() + reponse + "\n");
 
             out.flush();
             // ferme les connexions, puis le client
             out.close();
             in.close();
             socket.close();             
            }
 
      }
 
        catch (Exception e){
            //jTextArea1.setText(e.getMessage());            
            /*if(e instanceof UnknownHostException)
                                System.out.println("Serveur inconnu");
                        else if(e instanceof ConnectException)
                                System.out.println("Connection impossible au serveur");
                        else
                                System.out.println(e.getClass());
                        System.exit(0);*/
        }    
    }
 
      //methode qui recoit les information du servveur
     private static String receive() throws IOException {
         String line = in.readLine();
         return line;
     }
 
     //methode qui envoi des infos au serveur
     private static void send(String s) {
         out.print(s);
         out.print("\n");
         out.flush();
 
     }   
 
    private void lierCompte(Compte c){
        this.compte = c;
    }
 
    private void lierMailer(Mailer m){
        this.mailer = m;
    }
 
    private void lierMail(MailEnvoyer m){
        this.mail = m;
    }
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {
        jProgressBar1 = new javax.swing.JProgressBar();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
 
        setTitle("Envoyer un mail");
        setEnabled(false);
 
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jProgressBar1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE))
                .addContainerGap(10, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(31, 31, 31)
                .addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(34, 34, 34)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(29, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        
 
 
 
 
    // Variables declaration - do not modify                     
    private javax.swing.JProgressBar jProgressBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
 
}
J'utilise Netbeans 5.5 et JDK 1.6.
Merci d'avance.