Avatar billede trp79 Nybegynder
12. november 2004 - 02:26 Der er 8 kommentarer og
1 løsning

Afsending af mail fra JSP side i Tomcat

Hejsa
Jeg kan ikke rigtig sende mails gennem Tomcat. Jeg syntes ellers, at jeg har tilrettet server.xml, web.xml og koden til som det foreskrives på Apaches hjemmeside. Der er ingen fejl at finde i loggen, så jeg håber at nogen kan se, hvad der kunne være galt. Jeg har forsøgt at slå firewallen fra på pc'en, men det hjalp desværre ikke.

***************mailmetoden i UserBean.java********************

    private void sendAdgangskode(String adgangskoden) throws Exception
    {
        if (postafsender==null) postafsender = "min@adresse.dk";
        if (postserver==null) postserver = "smtp.mail.dk";

    Context initCtx = new InitialContext();

    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    Session session = (Session) envCtx.lookup("mail/Session");
           
        // Opbyg beskedden
        Message besked = new MimeMessage(session);
        besked.setFrom(new InternetAddress(postafsender));
        besked.setRecipient(Message.RecipientType.TO, new InternetAddress(epost));
        besked.setSubject("Din adgangskode");
        String txt = "Din adgangskode er: "+adgangskoden+"\n"
            + "Du kan også logge ind ved at klikke på nedenstående henvisning:\n"
            + "http://localhost/adminomraade?brugernavn="
            + java.net.URLEncoder.encode(brugernavn,"UTF-8")+"&adgangskode="
            + java.net.URLEncoder.encode(adgangskoden,"UTF-8")+"&handling=log+ind";
        besked.setContent(txt, "text/plain"); // put beskedden ind
        System.out.println(txt);              // skriv også beskedden i serverens log

        Transport.send(besked);              // send beskedden
        meddelelse = "Adgangskoden er sendt til adressen "+ epost;
    }
***************/mailmetoden********************


***************/web.xml********************
<?xml version = '1.0' encoding = 'windows-1252'?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <description>Empty web.xml file for Web Application</description>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  <mime-mapping>
    <extension>html</extension>
    <mime-type>text/html</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>txt</extension>
    <mime-type>text/plain</mime-type>
  </mime-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>User</web-resource-name>
      <url-pattern>/user/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>user</role-name>
    </auth-constraint>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Admin</web-resource-name>
      <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>SuperAdmin</web-resource-name>
      <url-pattern>/superadmin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>superadmin</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/loginError.jsp</form-error-page>
    </form-login-config>
  </login-config>   

<resource-ref>

  <description>

    Resource reference to a factory for javax.mail.Session

    instances that may be used for sending electronic mail

    messages, preconfigured to connect to the appropriate

    SMTP server.

  </description>

  <res-ref-name>

    mail/Session

  </res-ref-name>

  <res-type>

    javax.mail.Session

  </res-type>

  <res-auth>

    Container

  </res-auth>

</resource-ref>
</web-app>
***************/web.xml********************

***************server.xml********************
<?xml version='1.0' encoding='utf-8'?>
<Server>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>

  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
   
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443">
    </Connector>
    <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
    </Connector>
    <Engine defaultHost="localhost" name="Catalina">
      <Host appBase="webapps" name="localhost">
     
      <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
          driverName="com.mysql.jdbc.Driver" 
          connectionURL="jdbc:mysql://localhost/Vindmolle"
          connectionName="XXX" connectionPassword="XXX"
          userTable="Tomcat_users" userNameCol="username" userCredCol="password"
          userRoleTable="Tomcat_roles" roleNameCol="role"
      />
     
    <DefaultContext>
      <Resource name="jdbc/Vindmolle" auth="Container" type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/Vindmolle">
        <parameter>
          <name>driverClassName</name>
          <value>com.mysql.jdbc.Driver</value>
        </parameter>
        <parameter>
          <name>url</name>
          <value>jdbc:mysql://localhost/Vindmolle</value>
        </parameter>
        <parameter>
          <name>username</name>
          <value>XXX</value>
        </parameter>
        <parameter>
          <name>password</name>
          <value>XXX</value></parameter>
        <parameter>
          <name>maxActive</name>
          <value>20</value></parameter>
        <parameter>
          <name>maxIdle</name>
          <value>30000</value></parameter>
        <parameter>
          <name>maxWait</name>
          <value>100</value>
        </parameter>
      </ResourceParams>

      <Resource name="mail/Session" auth="Container"
                type="javax.mail.Session"/>
      <ResourceParams name="mail/Session">
        <parameter>
          <name>mail.smtp.host</name>
          <value>smtp.mail.dk</value>
        </parameter>
      </ResourceParams>
    </DefaultContext>
   
    <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
      </Host>
      <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
    </Engine>
  </Service>
</Server>
***************/server.xml********************
Avatar billede trp79 Nybegynder
12. november 2004 - 10:05 #1
Det blev vist lidt sent siden jeg glemte at postefejlen også! Jeg søgte på google og der så det ud som, at det var fordi j2ee.jar ikke var i classpath. Men det er den nu på min pc, og jeg har også lagt den i tomcat\common\lib. Fejlen er:

exception

javax.servlet.ServletException: com/sun/mail/util/SharedByteArrayInputStream
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.admin.newUser_jsp._jspService(newUser_jsp.java:144)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NoClassDefFoundError: com/sun/mail/util/SharedByteArrayInputStream
    vindmolle.UserBean.sendAdgangskode(UserBean.java:101)
    vindmolle.UserBean.opretBruger(UserBean.java:53)
    org.apache.jsp.admin.newUser_jsp._jspService(newUser_jsp.java:114)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Avatar billede arne_v Ekspert
12. november 2004 - 20:38 #2
Jeg har meget dårlige erfaringer med j2ee.jar i Tomcat.

Byg servlets og beans mod j2ee.jar, men deploy javamail.jar og activation.jar
i Tomcat (hvis de ikke allerede er der) men ikke j2ee.jar - så prøv og
gå et skrift tilbage.
Avatar billede trp79 Nybegynder
12. november 2004 - 21:31 #3
Forrygende arne! :o)

Smid du bare et svar...

Mange tak for hjælpen
Mvh
Torben
Avatar billede arne_v Ekspert
12. november 2004 - 21:33 #4
Det løste problemet ?
Avatar billede trp79 Nybegynder
12. november 2004 - 21:36 #5
I allerhøjeste grad :o)
Men er det ikke lidt underligt, at det fejler fordi man bruger j2ee.jar istedet eller?
Avatar billede trp79 Nybegynder
12. november 2004 - 21:37 #6
Det eneste jeg gjorde var at erstatte j2ee.jar med henholdsvis mail.jar og activation.jar.
Avatar billede arne_v Ekspert
12. november 2004 - 21:40 #7
Jeg formoder at det er fordi j2ee.jar indeholder 2 ting:
  - standard interfaces og classes for J2EE
  - SUN's J2EE reference app server

Jeg gætter på at det er de sidste og Tomcat der ikke kan sammen.
Avatar billede trp79 Nybegynder
12. november 2004 - 21:52 #8
Okay. Anyways, så er det rart med folk herinde som kender til fx sådanne problemer. Det her med j2ee.jar ville jeg formentlig aldrig have fundet ud af selv! Men jeg har lige en lille ide/opfordring så... om det måske ikke var aktuelt at redigere din artikkel omkring det at sende email fra java så?
Således, at det fremgår af den, at der kan opstå problemer med j2ee.jar i forhold til tomcat. Der er desuden en lille bitte "fejl" i dit første (kode)eksempel, hvor du skriver:
"message.addRecipient(Message.RecipientType.TO, new InternetAddress( " der mangler altså lige et "to));" som afslutning på den linie.
Der er altså ikke for at være en pernittengrynet - men blot noget du kan tage til efterretning, hvis du har tid og lyst :)
Avatar billede arne_v Ekspert
12. november 2004 - 22:01 #9
rettet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester