envoyer un mail

envoyer un mail - Java - Programmation

Marsh Posté le 25-11-2004 à 09:15:24    

bonjour,
je voudrais envoyer un mail depuis une servlet
le mail ne contiendra qu'une url, et un peu de texte
je peux utiliser le serveur de messagerie de mon entreprise pour envoyer le mail(smtp)
 
par contre, j'ai commencer a regarder un peu sur le net, et je pense que ca ne me sert a rien d'utiliser l'api JavaMail (beaucoup trop complexes pour le besoin que j'ai)
j'ai vu qu'on pouvait utiliser les commandes HELO, MAIL FROM:, RCPT TO: DATA etc.. mais je n'en sait pas plus
 
si vous pouvez m'eclairer ;)
 
merci

Reply

Marsh Posté le 25-11-2004 à 09:15:24   

Reply

Marsh Posté le 25-11-2004 à 09:26:20    

Tu trouves javamail compliqué ?
Franchement...
 

Code :
  1. import java.util.*;
  2. import javax.mail.*;
  3. import javax.mail.internet.*;
  4. public class Jmail
  5. {
  6.    private String serverAddress;
  7.    private boolean verbose = true;
  8.    private String fromAddress;
  9.    private String recipient;
  10.    private String subject;
  11.    private String body;
  12.  
  13.    public Jmail(String serverAddress, String fromAddress, String recipient, String subject, String body)
  14.    {
  15.       this.serverAddress = serverAddress;
  16.       this.fromAddress = fromAddress;
  17.       this.recipient = recipient;
  18.       this.subject = subject;
  19.       this.body = body;
  20.       this.verbose = true;
  21.    }
  22.    public Jmail(String serverAddress, String fromAddress, String recipient, String subject, String body, boolean verbose)
  23.    {
  24.       this.serverAddress = serverAddress;
  25.       this.fromAddress = fromAddress;
  26.       this.recipient = recipient;
  27.       this.subject = subject;
  28.       this.body = body;
  29.       this.verbose = verbose;     
  30.    }
  31.  
  32.    public void send() throws Exception
  33. {
  34.       Message mesg;
  35.       Session session;
  36.      
  37.  Properties props = new Properties();
  38.  props.put("mail.smtp.host", serverAddress);
  39.  session = Session.getDefaultInstance(props, null);
  40.  session.setDebug(verbose);
  41.   mesg = new MimeMessage(session);
  42.   mesg.setFrom(new InternetAddress(this.fromAddress));
  43.   mesg.addRecipient(Message.RecipientType.TO, new InternetAddress(this.recipient));
  44.   mesg.setSubject(this.subject);
  45.   mesg.setText(body);
  46.   Transport.send(mesg);
  47. }
  48.    public void setRecipient(String recipient)
  49.    {
  50.       this.recipient = recipient;
  51.    }
  52. }


 
C'est si compliqué ?
J'ai aussi la version qui utilise des sockets et qui envoi des HELO et autres RSET, DATA etc...

Reply

Marsh Posté le 25-11-2004 à 10:06:01    

c'est vrai qu'en me montrant ca, ca a pas l'air si complique ;)
mais en fait, ce que j'aimerais savoir aussi, si je peux donc utiliser le serveur de messagerie de mon entreprise
c'est un serveur exchange 2000
donc il faudrait que je m'identifie normalement (user, mot de passe) pour penvoir faire du smtp
 
sinon, si tu peux me montrer ta version avec les sockets ;)
 
merci

Reply

Marsh Posté le 25-11-2004 à 10:37:58    

Dans ma boîte c'est du exchange. Du moment qu'il cause smtp...
 
Voilà une façon de faire en direct. Ca n'est pas de moi, j'ai dû piocher ça dans le java cookbook il y a déjà un bon bout de temps. J'utilise javamail maintenant.
 
 

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. public class SimpleSendMail
  4. {
  5. String mail = null;
  6. String to = null;
  7. String from = null;
  8. String name = null;
  9. boolean verbose = false;
  10. String smtpServerAddress = "smtp";
  11. int smtpServerPort = 25;
  12. Socket socketSmtpServer = null;
  13. DataOutputStream dos = null;
  14. BufferedReader br = null;
  15. /**
  16.  * @param mail message à envoyer
  17.  * @param name nom fourni lors de la connexion au serveur stmp
  18.  * @param from adresse email de l'auteur
  19.  * @param to adresse email destinataire
  20.  */
  21. public SimpleSendMail(String mail, String name, String from, String to)
  22. {
  23.  this.mail=mail;
  24.  this.name=name;
  25.  this.from=from;
  26.  this.to=to;
  27. }
  28. /**
  29.  * @param smtpServer adresse du serveur smtp
  30.  * @param port port du serveur smtp (25 en général)
  31.  * @param mail message à envoyer
  32.  * @param name nom fourni lors de la connexion au serveur stmp
  33.  * @param from adresse email de l'auteur
  34.  * @param to adresse email destinataire
  35.  */
  36. public SimpleSendMail(String smtpServer, int port, String mail, String name, String from, String to)
  37. {
  38.  this.smtpServerAddress=smtpServer;
  39.  this.smtpServerPort=port;
  40.  this.mail=mail;
  41.  this.name=name;
  42.  this.from=from;
  43.  this.to=to;
  44. }
  45. /**
  46.  * @param smtpServer adresse du serveur smtp
  47.  * @param port port du serveur smtp (25 en général)
  48.  * @param mail message à envoyer
  49.  * @param name nom fourni lors de la connexion au serveur stmp
  50.  * @param from adresse email de l'auteur
  51.  * @param to adresse email destinataire
  52.  * @param verbose : affiche sur la sortie standard la discussion avec le serveur smtp
  53.  */
  54. public SimpleSendMail(String smtpServer, int port, String mail, String name, String from, String to, boolean verbose)
  55. {
  56.  this.smtpServerAddress=smtpServer;
  57.  this.smtpServerPort=port;
  58.  this.mail=mail;
  59.  this.name=name;
  60.  this.from=from;
  61.  this.to=to;
  62.  this.verbose=verbose;
  63. }
  64.    /**
  65.     * envoi du message
  66.     */
  67. public void send() throws UnknownHostException, IOException
  68. {
  69.  println("Connexion..." );
  70.  try
  71.  {
  72.   socketSmtpServer = new Socket(smtpServerAddress, smtpServerPort);
  73.   dos = new DataOutputStream(socketSmtpServer.getOutputStream());
  74.   br  = new BufferedReader(new InputStreamReader(socketSmtpServer.getInputStream()));
  75.  }
  76.  catch (UnknownHostException uhe) {throw (uhe);}
  77.  catch (IOException ioe) {throw (ioe);}
  78.  String strBuf = null; //reçoit les réponses du serveur
  79.  strBuf = br.readLine(); println(strBuf);
  80.  //strBuf = br.readLine(); println(strBuf);  
  81.  println("HELO" );
  82.  dos.writeBytes("HELO " + name + "\n" );
  83.  strBuf = br.readLine(); println(strBuf);
  84.  println("RSET" );
  85.  dos.writeBytes("RSET\n" );
  86.  strBuf = br.readLine(); println(strBuf);
  87.  println("MAIL FROM" );
  88.  dos.writeBytes("MAIL FROM:<"+from+">\n" );
  89.  br.readLine();
  90.  println("RCPT TO" );
  91.  dos.writeBytes("RCPT TO:<"+to+">\n" );
  92.  br.readLine();
  93.  println("DATA" );
  94.  dos.writeBytes ("DATA\n" );
  95.  strBuf = br.readLine(); println(strBuf);
  96.  dos.writeBytes (mail);
  97.  println("." );
  98.  dos.writeBytes("\n.\n" ); //signale la fin de DATA
  99.  strBuf = br.readLine(); println(strBuf);
  100.  println("QUIT" );
  101.  dos.writeBytes("QUIT\n" );
  102.  strBuf = br.readLine(); println(strBuf);
  103.  dos.close();
  104.  br.close();
  105.  socketSmtpServer.close();
  106. }
  107. private void println(String s)
  108. {
  109.  if (verbose) System.out.println(s);
  110. }
  111. }

Reply

Marsh Posté le 25-11-2004 à 12:12:34    

j'avais deja reussi a faire ca
mais ce que je ne comprend pas, c'est que normalement il faut s'authentifier aupres du serveur exchange, et la ya pas besoin, ca marche comme ca !!!
 
et avec cette methode, le mail est bien envoye, bien recu, mais quand on ouvre le mail (j'ai fais des tests avec mon adresse) il n'y a rien dans les champs "De" et "A", c'est bizarre
 
merci de m'eclairer

Reply

Marsh Posté le 25-11-2004 à 14:06:06    

ben faut quand meme etre un peu maso pour faire ça à la main alors que javamail le fait, et mieux, pour toi...

Reply

Marsh Posté le 25-11-2004 à 14:30:23    

en fait j'utilise javamail, c'est vrai que c'est un peu mieux ;)
par contre, je comprend toujours pas pourquoi j'ai pas besoin de m'authentifier, je met juste l'adresse de mon serveur de messagerie, je ne met meme pas dans "FROM" le nom d'un compte qui est auoriser a utiliser le serveur de messagerie, et je peux envoyer un mail
c'est quand meme vachement dangereux, ou c'est un probleme de configuration du serveur mail??
 
merci

Reply

Marsh Posté le 25-11-2004 à 15:04:47    

encore une ptite question ;)
comment faire pour que le corps de mon mail contienne un lien hypertexte?
bien evidemment, si je met un "<a href.." dans setText(), ca ne marche pas
 
merci ;)

Reply

Marsh Posté le 25-11-2004 à 17:17:46    

eeeuuuuuu bah [:mlc]
si t'envoie un mail en plain text, ... ben... c'est du plain text.. alors là ton seul espoir c'est que le client mail fasse de la transformation de ce qu'il reconnait comme étant une url...
 
sinon bah t'envoie ton mail en html (enfin, les deux, et c'est le client mail qui décide quel contenu afficher.. j'ai oublié le terme qui définit ça)

Reply

Marsh Posté le 25-11-2004 à 17:56:28    

jeromejanson a écrit :

en fait j'utilise javamail, c'est vrai que c'est un peu mieux ;)
par contre, je comprend toujours pas pourquoi j'ai pas besoin de m'authentifier, je met juste l'adresse de mon serveur de messagerie, je ne met meme pas dans "FROM" le nom d'un compte qui est auoriser a utiliser le serveur de messagerie, et je peux envoyer un mail
c'est quand meme vachement dangereux, ou c'est un probleme de configuration du serveur mail??
 
merci


Pour ton histoire d'authentification, ça doit être une histoire de domaine. Si tu es dans le même domaine que ton serveur de mail alors il accepte de relayer tes mails.
Ce n'est qu'une hypothèse, j'ai pas testé.
 
En ce qui me concerne, tous les champs du mail sont correctement rempli (To: et From:). Tu dois avoir une petite erreur quelquepart.

Reply

Marsh Posté le 25-11-2004 à 17:56:28   

Reply

Marsh Posté le 26-11-2004 à 09:59:29    

J_C_R a écrit :

Pour ton histoire d'authentification, ça doit être une histoire de domaine. Si tu es dans le même domaine que ton serveur de mail alors il accepte de relayer tes mails.
Ce n'est qu'une hypothèse, j'ai pas testé.
 
En ce qui me concerne, tous les champs du mail sont correctement rempli (To: et From:). Tu dois avoir une petite erreur quelquepart.


 
c'est ce que je pensais hier soir, du fait que mon serveur ou se trouve l'appli web java est situe sur le meme domaine que le serveur mail, il n'y a pas de soucis pour faire du smtp sans authentification
 
merci bien les gars ;)

Reply

Marsh Posté le 26-11-2004 à 21:34:55    

il y a ORO aussi, c'est plus leger que javamail :o ( 2 jar a installé ca fait beaucoup)

Reply

Marsh Posté le 27-11-2004 à 19:34:13    

jeromejanson a écrit :

par contre, je comprend toujours pas pourquoi j'ai pas besoin de m'authentifier, je met juste l'adresse de mon serveur de messagerie, je ne met meme pas dans "FROM" le nom d'un compte qui est auoriser a utiliser le serveur de messagerie, et je peux envoyer un mail
c'est quand meme vachement dangereux, ou c'est un probleme de configuration du serveur mail??


 
Rien à voir avec Javamail. Fais le depuis ton outlook ou autre et tu auras exactement le même résultat.

Reply

Marsh Posté le 27-11-2004 à 19:35:29    

jeromejanson a écrit :

encore une ptite question ;)
comment faire pour que le corps de mon mail contienne un lien hypertexte?
bien evidemment, si je met un "<a href.." dans setText(), ca ne marche pas
 
merci ;)


 
Tu peux ajouter un body multipart. Une version HTML ou tu indiques ton lien et une version text/plain qui contient l'url en texte. Si le client mail reconnait le format il t'affichera le mail au format HTML. Dans le cas contraire tu verras la version texte.
 
Chercher sur javaworld, j'avais lu un article sur le sujet. Sinon, j'ai du code qui traine qui le fait. MP si ca t'intéresse.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed