OVH Cloud OVH Cloud

Envoi d'un e-mail par java

4 réponses
Avatar
Maurice Rosenbaum
J'essaye d'envoyer un mail sur un LAN grâce au code ci-dessous.

Au niveau des logs du serveur SMTP je trouve bien les deux lignes login et
logout, seulement il n'y a aucun mail dans la boite aux lettre.

Quelqu'un peut-il me dire qu'es ce qui déconne?

System.out.println("Envoi de l'e-mail");

System.out.println();



String serveur="serveurSMTP";

String machine="maMachine";

String utilisateur="moi";

String motDePasse= "motdepasse";

String emetteur="moi@" + serveur;

String recepteur="lui@" + serveur;

String message = "TEST TEST TEST";



try

{

Socket s = new Socket(serveur, 25);



out = new PrintWriter(s.getOutputStream());



send("HELO " + maMachine);

send("USER " + utilisateur);

send("PASS " + motDePasse);

send("MAIL FROM: <" + emetteur + ">");

send("RCPT TO: <"+ recepteur + ">");

send("Subject test");

send("DATA");

send(message);

send();

s.close();

}

catch(IOException ex)

{

System.out.println("Erreur: " + ex);

}

System.out.println();

System.out.println("E-mail envoyé");

}



public void send(String s)

{

out.print(s);

out.print("\r\n");

out.flush();

System.err.println(s);

}



public void send()

{

out.print(". \r\n");

out.flush();

}





Merci d'avance

4 réponses

Avatar
Nicolas Repiquet
"Maurice Rosenbaum" a écrit dans le message
news: bn85gs$2dj$

J'essaye d'envoyer un mail sur un LAN grâce au code ci-dessous.


Hum, c'est un peu léger non ? Tu pourrais au moins tester si chaque
opération obtient l'aprobation du serveur.

Sinon la fin des données à envoyer doit être marquée par la séquence
<CRLF>.<CRLF>, sachant que CR à le code ascii 0xd et LF 0xa. Tu dois filtrer
ton texte pour remplacer cette séquence par <CRLF>..<CRLF>. Donc essayes
dans un premier temps d'ajouter l'envoi de "u000du000a.u000du000a" à la
fin de ton message, sinon il serait interessant de voir ce que le serveur te
répond. Si enfin tu cherche à envoyer un mail sans te casse la tête, il
existe des bibliothèque toutes prêtes.

Bonne continuation, et n'hésites pas à jeter un oeil à la rfc smtp (821).

-- Nicolas Repiquet

Avatar
Christophe M.
Essaye d'envoyer un "n" après le send(message) pour envoyer une ligne
"vide" qui correspond à la fin du message en lui-même. (a moins que ce
soit un CTRL-D, sais plus..)

Sinon, y a le package javamail chez sun qui permet
envoi/réception/traitement/pièce jointe, et tout le toutim

Maurice Rosenbaum wrote:
J'essaye d'envoyer un mail sur un LAN grâce au code ci-dessous.

Au niveau des logs du serveur SMTP je trouve bien les deux lignes login et
logout, seulement il n'y a aucun mail dans la boite aux lettre.

Quelqu'un peut-il me dire qu'es ce qui déconne?



Avatar
Frederic Pepin
Utilise plutot Java Mail si ton server SMTP accepte de fowarder:

Properties props = new Properties();
mailserver = "localhost"
props.put("mail.host", mailserver );
props.put("mail.smtp.host", mailserver );
Session session = Session.getDefaultInstance( props, null);
session.setDebug(debug);

javax.mail.Message msg = new MimeMessage(session);
msg.setContent(txt ,"text/plain");
msg.setFrom(new InternetAddress( adrSnd, MimeUtility.encodeText(nmSnd ,
"ISO-8859-1", null)));
msg.setSubject( MimeUtility.encodeText(subj, "ISO-8859-1", null) );
msg.setHeader("Content-Transfer-Encoding", "8bit");
msg.setHeader("Mime-Version" , "1.0" );

InternetAddress address = new InternetAddress( adrRcr ,
MimeUtility.encodeText(nmRcr , "ISO-8859-1", null));
msg.setRecipient(javax.mail.Message.RecipientType.TO, address);
Transport.send(msg);
emailSent = true;


"Maurice Rosenbaum" wrote in message
news:bn85gs$2dj$


J'essaye d'envoyer un mail sur un LAN grâce au code ci-dessous.

Au niveau des logs du serveur SMTP je trouve bien les deux lignes login et
logout, seulement il n'y a aucun mail dans la boite aux lettre.

Quelqu'un peut-il me dire qu'es ce qui déconne?

System.out.println("Envoi de l'e-mail");

System.out.println();



String serveur="serveurSMTP";

String machine="maMachine";

String utilisateur="moi";

String motDePasse= "motdepasse";

String emetteur="moi@" + serveur;

String recepteur="lui@" + serveur;

String message = "TEST TEST TEST";



try

{

Socket s = new Socket(serveur, 25);



out = new PrintWriter(s.getOutputStream());



send("HELO " + maMachine);

send("USER " + utilisateur);

send("PASS " + motDePasse);

send("MAIL FROM: <" + emetteur + ">");

send("RCPT TO: <"+ recepteur + ">");

send("Subject test");

send("DATA");

send(message);

send();

s.close();

}

catch(IOException ex)

{

System.out.println("Erreur: " + ex);

}

System.out.println();

System.out.println("E-mail envoyé");

}



public void send(String s)

{

out.print(s);

out.print("rn");

out.flush();

System.err.println(s);

}



public void send()

{

out.print(". rn");

out.flush();

}





Merci d'avance




Avatar
Ulrich
Salut,

Tu as aussi la lib : NetComponents http://www.savarese.org/java/index.html
C'est fiable et tu as accès à d'autres protocoles comme : ftp, nntp, pop3,
telnet, tftp...

Bon code,
Ulrich.

PS : Perso. j'utiliserai JavaMail par souci de comptabilité avec Java, mais
c'est pour te proposer une alternative.


"Maurice Rosenbaum" a écrit dans le message
de news: bn85gs$2dj$


J'essaye d'envoyer un mail sur un LAN grâce au code ci-dessous.

Au niveau des logs du serveur SMTP je trouve bien les deux lignes login et
logout, seulement il n'y a aucun mail dans la boite aux lettre.

Quelqu'un peut-il me dire qu'es ce qui déconne?

System.out.println("Envoi de l'e-mail");

System.out.println();



String serveur="serveurSMTP";

String machine="maMachine";

String utilisateur="moi";

String motDePasse= "motdepasse";

String emetteur="moi@" + serveur;

String recepteur="lui@" + serveur;

String message = "TEST TEST TEST";



try

{

Socket s = new Socket(serveur, 25);



out = new PrintWriter(s.getOutputStream());



send("HELO " + maMachine);

send("USER " + utilisateur);

send("PASS " + motDePasse);

send("MAIL FROM: <" + emetteur + ">");

send("RCPT TO: <"+ recepteur + ">");

send("Subject test");

send("DATA");

send(message);

send();

s.close();

}

catch(IOException ex)

{

System.out.println("Erreur: " + ex);

}

System.out.println();

System.out.println("E-mail envoyé");

}



public void send(String s)

{

out.print(s);

out.print("rn");

out.flush();

System.err.println(s);

}



public void send()

{

out.print(". rn");

out.flush();

}





Merci d'avance