# Mail Class



## tikemyson (11. Juni 2005)

Hallo (Tom)   ..

Ich wäre für eine Erklärung dankbar, wie man eine Mail mittels einer Java Klasse versendet dankbar.

Ich habe bereits alle Formularparameter in einer "Member"Hashmap meiner SessionBean.

Nun fehlt halt nur noch die Klasse zum versenden...

Vielen Dank..

die Idee mit der JUG (Lyoneresser und Schwenkerbenutzer wissen was ich meine) finde ich eine gute Idee...
Bin selbst aus Lebach und InfoStudent im 6. Semester am UCB..

gruss

Timo


----------



## Basti54 (12. Juni 2005)

Mir würde da als erstes Java Messaging Service einfallen


----------



## tikemyson (12. Juni 2005)

danke...ich schau mirs mal an...


----------



## Thomas Darimont (12. Juni 2005)

Hallo!



> Ich wäre für eine Erklärung dankbar, wie man eine Mail mittels einer Java Klasse versendet dankbar.


 JBoss bietet mit JavaMail schon ein integriertes API um E-mails zu versenden. 
 Beispiel für JBoss 4.0.2:

 Schau mal in deiner jeweiligen Server Konfiguration (z.Bsp. Default) im Deploy-Verzeichnis in die Datei mail-service.xml:

```
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE server>
 <!-- $Id: mail-service.xml,v 1.5 2003/08/27 04:34:12 patriot1burke Exp $ -->
 
 <server>
 
   <!-- ==================================================================== -->
   <!-- Mail Connection Factory                                              -->
   <!-- ==================================================================== -->
 
   <mbean code="org.jboss.mail.MailService"
          name="jboss:service=Mail">
     <attribute name="JNDIName">java:/Mail</attribute>
     <attribute name="User">some.body</attribute>
     <attribute name="Password">somepassword</attribute>
     <attribute name="Configuration">
        <!-- Test -->
        <configuration>
           <!-- Change to your mail server prototocol -->
           <property name="mail.store.protocol" value="pop3"/>
           <property name="mail.transport.protocol" value="smtp"/>
 
           <!-- Change to the user who will receive mail  -->
           <property name="mail.user" value="Some Body"/>
 
           <!-- Change to the mail server  -->
           <property name="mail.pop3.host" value="pop3.someprovider.de"/>
 
           <!-- Change to the SMTP gateway server -->
           <property name="mail.smtp.host" value="smtp.someprovider.de"/>
 
           <!-- Change to the address mail will be from  -->
           <property name="mail.from" value="some.body@someprovider.de"/>
 
           <!-- Enable debugging output from the javamail classes -->
           <property name="mail.debug" value="true"/>
        </configuration>
     </attribute>
   </mbean>
 </server>
```
 
 Das SessionBean könnte dann Beispielsweise so aussehen:
 (Den Mailversand selbst sollte man jedoch besser über ein MessageDrivenBean bewerkstelligen...)

```
/*
  * Created on 12.06.2005@00:33:53
  *
  * TODO Add some Licence info
  */
 package de.tutorials.ejb.service;
 
 import java.rmi.RemoteException;
 
 import javax.ejb.CreateException;
 import javax.ejb.EJBException;
 import javax.ejb.SessionBean;
 import javax.ejb.SessionContext;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
 /**
  * @author Tom
  * @ejb.bean name="EMailService" display-name="EMailService"
  *           description="Description for EMailService" type="Stateless"
  *           view-type="remote" TODO Describe me
  */
 public class EMailServiceBean implements SessionBean {
 
     /**
      * Default create method
      * 
      * @throws CreateException
      * @ejb.create-method
      */
     public void ejbCreate() throws CreateException {
     }
 
     /**
      * @ejb.interface-method view-type = "remote"
      * @param recipientAddress
      * @param subject
      * @param message
      * @throws RemoteException
      */
     public void sendMail(String recipientAddress, String subject, String message)
             throws RemoteException {
         try {
             InitialContext ctx = new InitialContext();
 
             Session mailSession = (Session) ctx.lookup("java:/Mail");
 
             Message mailMessage = new MimeMessage(mailSession);
             try {
                 mailMessage.setSubject(subject);
                 mailMessage.setRecipient(Message.RecipientType.TO,
                         new InternetAddress(recipientAddress));
                 mailMessage.setText(message);
 
                 Transport.send(mailMessage);
 
             } catch (AddressException e1) {
                 e1.printStackTrace();
             } catch (MessagingException e1) {
                 e1.printStackTrace();
             }
 
             ctx.close();
         } catch (NamingException e) {
             e.printStackTrace();
         }
     }
 
     public void ejbActivate() throws EJBException, RemoteException {
     }
 
     public void ejbPassivate() throws EJBException, RemoteException {
     }
 
     public void ejbRemove() throws EJBException, RemoteException {
     }
 
     public void setSessionContext(SessionContext arg0) throws EJBException,
             RemoteException {
     }
 }
```
 
 Dabei ist zu beachten, dass man sich das mail.jar aus dem server/deploy/lib Verzeichnis in den Classpath legen sollte...

 Der Client sähe dann so aus:

```
/*
  * Created on 06.05.2005@20:59:05
  *
  * TODO Add some Licence info
  */
 package de.tutorials.ejb.client;
 
 import java.util.Hashtable;
 
 import javax.naming.InitialContext;
 
 import de.tutorials.ejb.service.generated.EMailService;
 import de.tutorials.ejb.service.generated.EMailServiceHome;
 
 /**
  * @author Tom
  * 
  * TODO Describe me
  */
 public class EjbClient {
 
     public static void main(String[] args) throws Exception {
 
         Hashtable env = new Hashtable();
         env.put("java.naming.factory.initial",
                 "org.jnp.interfaces.NamingContextFactory");
         env.put("java.naming.factory.url.pkgs",
                 "org.jboss.naming:org.jnp.interfaces");
         env.put("java.naming.provider.url", "jnp://localhost:1099");
 
         InitialContext ctx = new InitialContext(env);
 
         EMailServiceHome emailServiceHome = (EMailServiceHome) ctx
                 .lookup(EMailServiceHome.JNDI_NAME);
         EMailService emailService = emailServiceHome.create();
         emailService.sendMail("some.body@someprovider.de","nicht mehr lange...","Some silly message....");
         
         emailService.remove();
         ctx.close();
     }
 }
```
 


> die Idee mit der JUG (Lyoneresser und Schwenkerbenutzer wissen was ich meine) finde ich eine gute Idee...
> Bin selbst aus Lebach und InfoStudent im 6. Semester am UCB..


 Wunderbar  Dann trag dich doch in die Liste ein damit die anderen Interessenten auch mitbekommen, dass was passiert...

 Eine andere Alternative wäre es JavaMail "pur" zu verwenden... -> 
http://java.sun.com/products/javamail/index.jsp

 Gruß Tom


----------



## tikemyson (12. Juni 2005)

danke.....
...mach ich...

@Basti...

wow...also das JMS ist ja wieder ein komplettes Kapitel für sich...139 Seiten nur um ein paar Strings via Mail zu versenden. ich denke dass ist mit "Kanonen auf Spatzen geschossen". 

Trotzdem Danke!

Ich werde hier berichten, wie ich mein Problem gelöst habe!


----------



## Thomas Darimont (12. Juni 2005)

Hallo!



> Mir würde da als erstes Java Messaging Service einfallen


Mit JMS kann man zwar auch Nachrichten über smtp versenden, jedoch adressiert JMS in meinen Augen eine ganz andere Anwendung, nämlich asynchrones Messaging. Wie gesagt für die verlangte Aufgabe wäre die beste Lösung sicherlich in JavaMail zu finden.

Gruß Tom


----------



## tikemyson (15. Juni 2005)

> public String sendForm() {
> 
> 
> String MAIL_SERVER = "mail.********.de";
> ...




So habe ich es bis jetzt mal gelöst...

leider lässt die erhoffte Mail noch auf sich warten..

wäre dankbar, wenn mal jmd über den Code linsen könnte!


dankeschön im voraus!


----------



## Thomas Darimont (15. Juni 2005)

Hallo!

 Weshalb verwendest du nicht die Mail Funktionalität die JBoss schon mit sich bringt?
 (Wie in meinem Beispiel angedeutet)

 Gruß Tom


----------



## tikemyson (15. Juni 2005)

Grund: Ich komme mit der Definition für den Client nicht klar. 
Es handelt sich um einen WebClient (kann man das als ThinClient bezeichnen?)

Rufe ich da dann einfach die SendMail Methode der Session Bean auf?
LookUp kann ich mir dann doch sparen...oder?

Die Businesslogik des Projektes besteht nur aus einer stateful session beans, in die wir sämtliche Business-Methoden reingeklatscht haben.

Dankeschön schnonmal


----------



## tikemyson (16. Juni 2005)

Hi Tom,

nochmal ich..

Ich hätte noch eine weitere Frage zu der mail-service.xml.

Ich habe die Methode in die SessionBean integriert und angepasst.

Bin ich recht der Annahme, dass der Dienst, die E-Mails über per smtp versendet?
Wenn ja, dann über die Einstellungen  in der mail-service.xml?

Dann hätte ich ja Name und Passwort fest dort drinnstehen.

Noch ne Frage:

Wie kann ich realisieren, dass ich gleich an mehrere Empfänger schicken kann?
Laut XML Datei gibt es ja nur einen Empfängereintrag? 


> <!-- Change to the user who will receive mail  -->
> <property name="mail.user" value="Some Body"/>



Danke Anke


----------

