Søger du en specifik kategori?

 



Oprettet tir. d. 16. februar 2010 kl. 02:28

arne_v
arne_v (1.005.403 point)
Guidens karaktér
1
2
3
4
5

Send email fra Java

Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende email fra Java. Simple eksempler ikke noget vildt avanceret. Den forudsætter kendskab til Java.
Historie:
V1.0 - 16/01/2004 - original
V1.1 - 31/01/2004 - forbedret formatering
V1.2 - 12/11/2004 - fix trunkeret linie og tilføj note til sidst om j2ee.jar
V1.3 - 16/02/2010 - smårettelser

Indledning

Det hænder at man har brug for at ens applikation kan
sende emails ud.

Og selvfølgelig kan det også gøres i Java.

Man kan sende email fra java på 2 måder:
  * bruge JavaMail
  * bruge en almindelig Socket connection til port 25

Jeg vil kun beskrive den første. Normalt vil man anbefale JavaMail,
fordi der er indbygget en masse funktionalitet.

I det efterfølgende vil jeg antage at:
  - ens SMTP server er 192.168.1.10
  - ens egen email adresse er mig@etsted.dk
  - modtagers email adresse er enanden@etandetsted.dk

SMTP server er den samme som man angiver i browser/email
program (og for de fleste privat brugere er det en man får
udleveret i forbindelse med sit internet abonnement).

For at bruge JavaMail skal man hente:
  JavaMail - http://java.sun.com/ (...)
  JAF (Java Activation Framework) - http://java.sun.com/ (...)

Du downloader zip filerne, udpakker dem og putter jar filerne i
din classpath.

Hvis du har J2EE/Java EE SDK installeret kan du også bare putte j2ee.jar/javaee.jar i classpath,
fordi den har det hele.

Eksempler

Lad os starte med et simpelt eksempel som sender en text i ASCII.


import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

public class Email1 {
    private final static String SMTP_SERVER = "192.168.1.10";
    private final static String FROM = "mig@etsted.dk";
    public static void send(String to, String subj, String body) {
        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", SMTP_SERVER);
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subj);
            message.setText(body);
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        send("enanden@etandetsted.dk", "Test 1", "Linie 1\nLinie 2\nLinie 3\n");
    }
}


Nu modificerer vi det til at sende danske bogstaver i ISO-8859-1
karakter sæt:


import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

public class Email2 {
    private final static String SMTP_SERVER = "192.168.1.10";
    private final static String FROM = "mig@etsted.dk";
    public static void send(String to, String subj, String body) {
        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", SMTP_SERVER);
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subj, "ISO-8859-1");
            message.setText(body, "ISO-8859-1");
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        send("enanden@etandetsted.dk", "Test 2 med ÆØÅ", "ABC\n123\nÆØÅ\n");
    }
}


Nu prøver vi at sende HTML:


import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

public class Email3 {
    private final static String SMTP_SERVER = "192.168.1.10";
    private final static String FROM = "mig@etsted.dk";
    public static void send(String to, String subj, String body) {
        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", SMTP_SERVER);
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subj, "ISO-8859-1");
            message.setContent(body, "text/html; charset=ISO-8859-1");
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        send("enanden@etandetsted.dk", "Test 3 med ÆØÅ", "<P>Linie 1</P><P>Linie 2</P><P>Linie 3 med ÆØÅ</P>");
    }
}


Nu prøver vi så at sende en email med både text og HTML:


import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

public class Email4 {
    private final static String SMTP_SERVER = "192.168.1.10";
    private final static String FROM = "mig@etsted.dk";
    public static void send(String to, String subj, String body1, String body2) {
        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", SMTP_SERVER);
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subj, "ISO-8859-1");
            MimeBodyPart mpart1 = new MimeBodyPart();
            mpart1.setText(body1, "ISO-8859-1");
            MimeBodyPart mpart2 = new MimeBodyPart();
            mpart2.setContent(body2, "text/html; charset=ISO-8859-1");
            MimeMultipart mpart = new MimeMultipart();
            mpart.addBodyPart(mpart1);
            mpart.addBodyPart(mpart2);
            message.setContent(mpart);
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        send("enanden@etandetsted.dk", "Test 4 med ÆØÅ",
            "Linie 1\nLinie 2\nLinie 3 med ÆØÅ\n",
            "<P>Linie 1</P><P>Linie 2</P><P>Linie 3 med ÆØÅ</P>");
    }
}


Og til sidst vil vi sende en email med attachment:


import java.io.*;
import java.util.*;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

public class Email5 {
    private final static String SMTP_SERVER = "192.168.1.10";
    private final static String FROM = "mig@etsted.dk";
    public static void send(String to, String subj, String body, String filename) {
        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", SMTP_SERVER);
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subj, "ISO-8859-1");
            MimeBodyPart mpart1 = new MimeBodyPart();
            mpart1.setText(body, "ISO-8859-1");
            MimeBodyPart mpart2 = new MimeBodyPart();
            mpart2.setDataHandler(new DataHandler(new FileDataSource(filename)));
            mpart2.setFileName((new File(filename)).getName());
            MimeMultipart mpart = new MimeMultipart();
            mpart.addBodyPart(mpart1);
            mpart.addBodyPart(mpart2);
            message.setContent(mpart);
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        send("enanden@etandetsted.dk", "Test 5",
            "Vedhæftet Z.ZIP\n", "C:\\Z.ZIP");
    }
}


Det er faktisk ikke svært at sende email fra Java.

Bemærk at det ikke spiller nogen rolle om man sender fra en
J2SE/Java SE eller J2EE/Java EE applikation. Koden er den samme.

Men en vigtig pointe er: hvis det er en J2EE app, så må man
godt compile sin kode mod j2ee.jar/javaee.jar, men man må ikke bruge j2ee.jar/javaee.jar
runtime med andre servere end SUN's reference implementation. Hvis javax.mail
klasserne mangler så skal man deploye mail.jar og activation.jar.

Skrevet tir. d. 27. januar 2004 kl. 02:46| #1

God artikel. Det her kan helt sikkert få dig igang.

Skrevet tir. d. 17. februar 2004 kl. 01:15| #2

skovborg (18.125 point)
skide godt..
Med venlig hilsen
Morten skovborg

Skrevet tor. d. 06. maj 2004 kl. 13:31| #3

digitalsoul (17.803 point)
Meget god artikel, mangler måske lidt kommentare i kode eksemplerne.

Skrevet tor. d. 22. juli 2004 kl. 07:56| #4

mercutio (13.584 point)
Kan kun sige tak for hjælpen =)

Skrevet tir. d. 27. juli 2004 kl. 22:34| #5

kurtpedersen (15.455 point)
Bliver ikke det fjerneste klogere.

Skrevet lør. d. 11. september 2004 kl. 13:46| #6

duckman (23.492 point)
Ganske fin artikel med masser af kode eksempler som er lige til at bruge.
Dog ville det være rart med lidt mere dokumentation i selv koden, og evt. en mindre forklaring om de forskellige ISO charsets

Skrevet lør. d. 11. september 2004 kl. 16:01| #7

maximus (18.005 point)
Der mangler dog lidt flere kommentar på hvad der sker, men omvendt, er man lidt rutineret i Java så er det ikke det store problem at gennemskue hvad der sker.
Så alt i alt er man godt kørende med denne artikel
Der mangler dog et lidt forklaring hvad man gør når den mail-server man benytter kræver brugernavn og adgangskode

Skrevet ons. d. 20. oktober 2004 kl. 14:43| #8

vedikkebedre (14.510 point)
God lille artikel der giver en god grundviden til at komme videre med email i java.

Det er korrekt at flere kommentarer vil give en hurtigere indlæring, men man lærer også ved at tænke selv.

Fortsæt endelig med sådanne artikeler der giver en basis-viden om forskellige emner.

Skrevet tir. d. 15. februar 2005 kl. 21:20| #9

nfrank (15.795 point)
Meget informativ og inspirerende.

Skrevet søn. d. 21. august 2005 kl. 11:38| #10


Skrevet tir. d. 01. november 2005 kl. 22:46| #11

visualdeveloper (20.364 point)
super artikel. flot skrevet arne_v god og informativ

Skrevet man. d. 23. juli 2007 kl. 17:30| #12

flar74 (17.795 point)
Simpelthen god stil :-)

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
12 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Gør dig selv en tjeneste: Køb et ordentligt SD-kort

Der kan være meget stor hastighedsforskel på to umiddelbare ens SD-kort. Se her hvad du skal være opmærksom på, når du køber ekstra hukommelse til din mobil, tablet eller kamera.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Gratis flysimulator fra Microsoft

Den legendariske Flight Simulator fra Microsoft genopstår den 29. februar - og denne gang er spillet gratis.


Nyheder fra Computerworld

Teaser billede

Bank: Derfor er login uden NemID helt i orden

Der er ikke hold i påstanden om sikkerhedsproblemer i forbindelse med bankkunders login uden brug af NemID, lyder det fra Nykredit Bank.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger