Mail Class

tikemyson

Mitglied
Hallo (Tom) :p ..

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
 
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:
Code:
 <?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...)
Code:
 /*
  * 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:
Code:
 /*
  * 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
 
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!
 
Zuletzt bearbeitet:
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
 
public String sendForm() {


String MAIL_SERVER = "mail.********.de";
String DAEMON_EMAIL_ADR = "*****";
String DAEMON_EMAIL_PW = "****";
String CONTENT_TYPE = "text/plain";
String[] CONTENT_LANGUAGE = {"de"};

String emailTo = "****@******.de";
String emailFrom="ti@mo.de";
String subject="Kontaktformular";


Properties props = new Properties();
Session session = Session.getDefaultInstance(props);
session.setDebug(false);

MimeMessage msg = new MimeMessage(session);
InternetAddress adressFrom=null;
InternetAddress adressTo=null;
try {
adressFrom = new InternetAddress(emailFrom);
adressTo = new InternetAddress(emailTo);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

String contactLastname = (String)parameterHashMap.get("contactLastname");
String contactFirstname = (String)parameterHashMap.get("contactFirstname");
String contactStreet = (String)parameterHashMap.get("contactStreet");
String contactPostalCode = (String)parameterHashMap.get("contactPostalCode");
String contactCity = (String)parameterHashMap.get("contactCity");
String contactPhone = (String)parameterHashMap.get("contactPhone");
String contactMobile = (String)parameterHashMap.get("contactMobile");
String contactEMail = (String)parameterHashMap.get("contactEMail");
String contactICQ = (String)parameterHashMap.get("contactICQ");
String contactComment = (String)parameterHashMap.get("contactComment");




String content = "Dies ist generierte Nachricht!\n";
content+="\n";
content+="Die nachfolgende Nachricht wurde im Kontakt-Formular des*************\n";
content+="hinterlegt. Hier die Kontaktdaten der Person:\n";
content+="\n";
content+="";
content+="Name, Vorname: " + contactLastname + "," + contactFirstname + "(" + contactEMail + ")\n";

content+="Strasse: " + contactStreet + "\n";
content+="PLZ, Ort: " + contactPostalCode + " " + contactCity + "\n";
content+="Telefon: " + contactPhone + "\n";

content+="Empfänger: " + emailTo + "\n";
content+="\n";
content+="--------------------------------------------------------------------------------\n";
content+="\n";
content+=contactComment;



try {
msg.setFrom(adressFrom);
msg.setRecipient(Message.RecipientType.TO, adressTo);
msg.setSubject(subject);
msg.setContent(content,CONTENT_TYPE);
msg.setContentLanguage(CONTENT_LANGUAGE);
} catch (MessagingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

try {
javax.mail.Transport transport = session.getTransport("smtp");
transport.connect(MAIL_SERVER,DAEMON_EMAIL_ADR,DAEMON_EMAIL_PW);

transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (NoSuchProviderException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (MessagingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}




return content;
}


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!
 
Hallo!

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

Gruß Tom
 
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
 
Zuletzt bearbeitet:
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
 
Zurück