Avatar billede coolfisk Nybegynder
25. marts 2004 - 10:12 Der er 44 kommentarer og
1 løsning

mail error

Har fundet et eksempel på hvordan man kan sende mails i JSP, men kan ikke få det til at virke:

main:

<html><body>
<jsp:useBean id="Post" class="Post.SendMail" scope="session"/>
<%
  Post.SendMail sm=new SendMail();
  sm.setSender("anders.and@andeby.dk");
  sm.setRecepient("Cool_fisk_2_u@hotmail.com");
  sm.setSubject("Jeg vil have penge !!");
  sm.setBody("Nu synes jeg du skal give mig penge !!!");
  sm.sendMail();
%>
</body></html>

bean SendMail:

package Post;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendMail
{
    String recipient="";
    String sender= "";
        String body="";
        String subject="";
       
    public void setRecipient( String recipient )
    {
            this.recipient = recipient;
    }
   
    public void setSender( String sender)
    {
            this.sender = sender;
    }
   
        public void setBody(String body)
        {
            this.body=body;
        }
       
        public void setSubject(String subject)
        {
            this.subject=subject;
        }

        public boolean sendMail()
    {
        boolean sendMail = true;
        try
        {
            Properties props = new Properties();
            props.put("mail.smtp.host", "lambe.pair.com");
           
            Session mailsession = Session.getDefaultInstance(props, null);
           
            Message msg = new MimeMessage(mailsession);
            msg.setFrom(new InternetAddress(sender));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            msg.setSubject(subject);
            msg.setText(body);
           
            Transport.send(msg);
/*
                        System.out.println("modtager = "+recipient);
                        System.out.println("afsender = "+sender);
                        System.out.println("subject  = "+subject);
                        System.out.println("tekst    = "+body);
*/                       
                        return true;
        }
        catch( AddressException e )
        {
            return false;
        }
        catch( MessagingException e )
        {
            return false;
        }
    }
}

Den melder fejlen:
Error(3,1): cannot access directory javax\mail; verify that directory is reachable from classpath and/or sourcepath

og en masse ligende. Er javax.mail ikke standart i jdeveloper, eller skal jeg installere det ved siden af?
Avatar billede arne_v Ekspert
25. marts 2004 - 10:21 #1
Tilsyneladende ikke.

Prøv og hent javamail og jaf !
Avatar billede arne_v Ekspert
25. marts 2004 - 10:21 #2
Læs evt. min artikel om email i java.
Avatar billede arne_v Ekspert
25. marts 2004 - 10:22 #3
Iøvrigt er det vel kun sjovt at kode den som bean, hvis man sætter
alle properties fra form felter.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 10:27 #4
hvor skal jaf-1_0_2.zip pakkes ud henne? Hvad er linket til din artikel?
Avatar billede arne_v Ekspert
25. marts 2004 - 10:32 #5
Det er ligegyldigt hvor du udpakker henne.

Du skal bare have tilføjet jar filen til din classpath.
Avatar billede arne_v Ekspert
25. marts 2004 - 10:33 #6
Avatar billede coolfisk Nybegynder
25. marts 2004 - 10:46 #7
i jaf-1_0_2.zip er den eneste jar til: activation.jar, og den sætter jeg i classpath?
Avatar billede coolfisk Nybegynder
25. marts 2004 - 10:49 #8
og i javamail:

pop3.jar
mail.jar
smtp.jar
mailapi.jar
imap.jar
Avatar billede arne_v Ekspert
25. marts 2004 - 10:52 #9
Ja.

pop3 og imap skal du nok ikke bruge, men tag dem med alligevel.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:03 #10
classpath = egenskaber til denne computer, advance, envioment..., new f,eks:
mail
c:\javamail\javamail-1.3.1\mail.jar
Avatar billede arne_v Ekspert
25. marts 2004 - 11:08 #11
Jeg ville aldrig ligge den ind i global CLASSPATH.

Jeg ville bare tilføje den til projektets classpath inde
i JDeveloper.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:10 #12
hvor gør man det henne i jdevoper?
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:15 #13
har fundet ud af det :)
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:17 #14
Nu melder den kun fejlen: Error(4,32): class SendMail not found in class _main
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:27 #15
nu er den fikset:...

props.put("mail.smtp.host", "hotmail.com"); er det rigtigt?

msg.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));

der er rød streg under Message.RecipientType.TO
Avatar billede arne_v Ekspert
25. marts 2004 - 11:36 #16
Jeg nægter at tro på at du bruger hotmail.com som SMTP server.

Det skal enten være dit firmas SMTP server eller din internet udbyders
SMTP server.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:36 #17
har også prøvet med:  props.put("mail.smtp.host", "pop3.mail.dk"); men intet bliver sendt
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:36 #18
i know... mistake
Avatar billede arne_v Ekspert
25. marts 2004 - 11:37 #19
Hvis du har TDC mener jeg at det er smtp.mail.dk
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:38 #20
props.put("mail.smtp.host", "smtp.mail.dk"); så må denne være korrekt
Avatar billede arne_v Ekspert
25. marts 2004 - 11:38 #21
Fik du addRecipient kaldet til at compile ?
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:39 #22
ja, men der er åbenbart fejl!?
Avatar billede coolfisk Nybegynder
25. marts 2004 - 11:49 #23
props.put("mail.smtp.host", "mx01.hotmail.com"); til hotmail
Avatar billede coolfisk Nybegynder
25. marts 2004 - 13:03 #24
den starter applikationen, men jeg modtager ikke nogen mail.... så der må være en fejl i : msg.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));

Er der noget der skal tilføjes/importes for at anvende Message.RecipientType.TO
Avatar billede coolfisk Nybegynder
25. marts 2004 - 13:34 #25
hvis jeg trykker F1 på den: member RecipientType not found in javax.mail.message
Avatar billede arne_v Ekspert
25. marts 2004 - 13:41 #26
Dybt mystisk.

Fra min Java Doc:

javax.mail
Class Message.RecipientType
java.lang.Object
  |
  +--javax.mail.Message.RecipientType

All Implemented Interfaces:
java.io.Serializable
Direct Known Subclasses:
MimeMessage.RecipientType
Enclosing class:
Message

--------------------------------------------------------------------------------

public static class Message.RecipientType
extends java.lang.Object
implements java.io.Serializable
This inner class defines the types of recipients allowed by the Message class. The currently defined types are TO, CC and BCC. Note that this class only has a protected constructor, thereby restricting new Recipient types to either this class or subclasses.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 15:04 #27
det er version: JavaMail API 1.3.1 Release jeg har hentet. Hvilken en bruger du?
Avatar billede arne_v Ekspert
25. marts 2004 - 15:26 #28
Jeg bruger javamail 1.3 eller J2EE 1.3.1, men jeg tror ikke at
det er forskellen.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 15:39 #29
du kan prøve at køre koden!?

main.jsp:

<html><body>
<jsp:useBean id="sm" class="Post.SendMail" scope="session"/>
<%
  //sm.setSender("Jakob.bielefeldt@mail.dk");
  //sm.setRecipient("Jakob.bielefeldt@mail.dk");
  sm.setSender("Bielefeldt2@hotmail.com");
  sm.setRecipient("cool_fisk_2_u@hotmail.com");
  sm.setSubject("Jeg vil have penge !!");
  sm.setBody("Nu synes jeg du skal give mig penge !!!");
  sm.sendMail();
%>
</body></html>

SendMail.java:

package Post;
import java.util.*;
import javax.mail.*;
import javax.mail.Message;
import javax.mail.internet.*;
import javax.mail.Message.RecipientType.*;


public class SendMail
{
    String recipient="";
   
    String sender= "";
    String body="";
    String subject="";
       
    public void setRecipient( String recipient )
    {
            this.recipient = recipient;
    }
   
    public void setSender( String sender)
    {
            this.sender = sender;
    }
   
        public void setBody(String body)
        {
            this.body=body;
        }
       
        public void setSubject(String subject)
        {
            this.subject=subject;
        }

        public boolean sendMail()
    {
        boolean sendMail = true;
        try
        {
            Properties props = new Properties();
            props.put("mail.smtp.host", "mx01.hotmail.com");
           
            Session mailsession = Session.getDefaultInstance(props, null);
           
            Message msg = new MimeMessage(mailsession);
            msg.setFrom(new InternetAddress(sender));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            //message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            msg.setSubject(subject);
            msg.setText(body);
           
            Transport.send(msg);
/*
                        System.out.println("modtager = "+recipient);
                        System.out.println("afsender = "+sender);
                        System.out.println("subject  = "+subject);
                        System.out.println("tekst    = "+body);
*/                       
                        return true;
        }
        catch( AddressException e )
        {
            return false;
        }
        catch( MessagingException e )
        {
            return false;
        }
    }
}
Avatar billede coolfisk Nybegynder
25. marts 2004 - 17:50 #30
prøver at installere J2EE SDK...
Avatar billede arne_v Ekspert
25. marts 2004 - 17:50 #31
Prøv lige og slet den her linie:

import javax.mail.Message.RecipientType.*;
Avatar billede coolfisk Nybegynder
25. marts 2004 - 17:51 #32
det er en jeg selv har prøvet at tilføje.... Virker stadig ikke
Avatar billede arne_v Ekspert
25. marts 2004 - 17:54 #33
Og fejlen er nu ?
Avatar billede coolfisk Nybegynder
25. marts 2004 - 17:56 #34
det er ikke en disideret fejl, men der er bølgestreg under Message.RecipientType.TO, hvor den siger : member RecipientType not found in javax.mail.message. Man kan sagtens køre applikationen, men modtager igen mail
Avatar billede arne_v Ekspert
25. marts 2004 - 18:01 #35
Prøv:

      catch( AddressException e )
        {
            e.printStackTrace();
            return false;
        }
        catch( MessagingException e )
        {
            e.printStackTrace();
            return false;
        }

og så kør det standalone (ikke fra JSP side) så man kan se hvad der sker.
Avatar billede coolfisk Nybegynder
25. marts 2004 - 18:05 #36
ved ikke helt hvad du mener... skal jeg køre det fra bønnen? eller ?
Avatar billede arne_v Ekspert
25. marts 2004 - 18:08 #37
Put en main ind i bønnen og køre den !

(jeg ved ikke hvor console output i OC4J ender henne)
Avatar billede coolfisk Nybegynder
25. marts 2004 - 18:14 #38
er ikke sikker på jeg har gjort det rigtigt:
Error(14,20): can't return a value from method whose result type is void
Error(19,20): can't return a value from method whose result type is void
Error(11,9): exception javax.mail.internet.AddressException is never thrown in the corresponding try block
Error(16,9): exception javax.mail.MessagingException is never thrown in the corresponding try block
Avatar billede arne_v Ekspert
25. marts 2004 - 18:16 #39
Næppe.
Avatar billede arne_v Ekspert
25. marts 2004 - 18:19 #40
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendMail {
    String recipient = "";

    String sender = "";
    String body = "";
    String subject = "";

    public void setRecipient(String recipient) {
        this.recipient = recipient;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public boolean sendMail() {
        boolean sendMail = true;
        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", "mx01.hotmail.com");

            Session mailsession = Session.getDefaultInstance(props, null);

            Message msg = new MimeMessage(mailsession);
            msg.setFrom(new InternetAddress(sender));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            msg.setSubject(subject);
            msg.setText(body);

            Transport.send(msg);
            return true;
        } catch (AddressException e) {
                        e.printStackTrace();
            return false;
        } catch (MessagingException e) {
                        e.printStackTrace();
            return false;
        }
    }
   
    public static void main(String[] args) {
        SendMail sm = new SendMail();
                sm.setSender("Bielefeldt2@hotmail.com");
                sm.setRecipient("cool_fisk_2_u@hotmail.com");
                sm.setSubject("Jeg vil have penge !!");
                sm.setBody("Nu synes jeg du skal give mig penge !!!");
                sm.sendMail();
    }
}
Avatar billede coolfisk Nybegynder
25. marts 2004 - 18:26 #41
der opstår ingen fejl
Avatar billede coolfisk Nybegynder
25. marts 2004 - 18:27 #42
nu virker det!?
Avatar billede coolfisk Nybegynder
25. marts 2004 - 18:35 #43
Skal man skifte :props.put("mail.smtp.host", "smtp.mail.dk");
hvis man skal sende til en hotmail, eller andre? Modtager på min tdc men ikke hotmail
Avatar billede arne_v Ekspert
25. marts 2004 - 18:37 #44
Normalt skal man sende til den SMTP server der matcher ens internet forbindelse.

Hvis man f.eks. bruger TDC ADSL forbindelse skal man altid bruge TDC's SMTP server
selvom man i FROM bruger sin HOTMAIL/Cybercity/get2net/whatever adresse.
Avatar billede arne_v Ekspert
25. marts 2004 - 18:38 #45
Og et svar
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