{"id":425,"date":"2011-11-05T08:30:33","date_gmt":"2011-11-05T06:30:33","guid":{"rendered":"http:\/\/www.kristiansborg.dk\/bibliotek\/?page_id=425"},"modified":"2011-11-05T08:32:35","modified_gmt":"2011-11-05T06:32:35","slug":"kapitel-11-javamail","status":"publish","type":"page","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/","title":{"rendered":"Kapitel 11 JavaMail"},"content":{"rendered":"<p>Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.<\/p>\n<div style=\"border: 1px solid red; color: red\">\n<b>Du l\u00e6ser en gammel bog<\/b><br \/>\nDen bog, du l\u00e6ser her, er fra 1998, og mange ting kan have \u00e6ndret sig siden da.<br \/>\nVi h\u00e5ber, at du stadig kan finde relevant information i den.<br \/>\nHvis du vil l\u00e6se aktuelle oplysninger om de avancerede dele af Java, anbefaler vi<br \/>\nbogen <a href=\"http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0132354799)\"  target=\"_blank\">Core Java &#8211; Advanced Features<\/a><img decoding=\"async\" src=\"http:\/\/impdk.tradedoubler.com\/imp?type(inv)g(19172914)a(2029446)\" \/>\n<\/div>\n<p>JavaMail er en udvidelse af Java Development Kit og ikke en integreret del. Det betyder, at API\u2019et skal downloades separat. Det betyder ogs\u00e5, at de klasser, man skal bruge, hedder javax.* i stedet for java.*.<\/p>\n<p>&nbsp;<\/p>\n<h1>Terminologien<\/h1>\n<p>&nbsp;<\/p>\n<p>Inden man g\u00e5r i gang med at bruge JavaMail, b\u00f8r man s\u00e6tte sig ind i JavaMails terminologi. Mailserveren er den computer, der k\u00f8rer det program, der h\u00e5ndterer posten. Nogle programmer er implementeret s\u00e5ledes, at der skal bruges et program til afsendelse af post og et program til modtagelse af post. I dette kapitel vil udtrykket mailserver d\u00e6kke over begge programmer.<\/p>\n<p>&nbsp;<\/p>\n<p>Klientprogrammet er det program, der kontakter mailserveren. Det er dette program, brugeren benytter til afsendelse og modtagelse af post. Kommunikationen mellem klientprogrammet og mailserveren kaldes en <em>session<\/em>. Det brev, der afsendes kaldes en besked. Beskeder best\u00e5r af en <em>header<\/em> og en br\u00f8dtekst. Br\u00f8dteksten er selve den tekst, beskeden best\u00e5r af. Headeren indeholder informationer om afsenderen, modtagerne og beskedens overskrift. Det er muligt at tilf\u00f8je egne informationer til headeren \u2013 det vil blive gennemg\u00e5et senere.<\/p>\n<p>&nbsp;<\/p>\n<h1>Ops\u00e6tning af systemet<\/h1>\n<p>&nbsp;<\/p>\n<p>Inden man kan begynde at bruge JavaMail, skal man indstille sit system, s\u00e5 det ved, hvordan posten skal behandles. Dette g\u00f8r man ved hj\u00e6lp af setProperty-metoden, der er en statisk metode i klassen System. Metoden har f\u00f8lgende signatur<\/p>\n<p>&nbsp;<\/p>\n<p>System.setProperty (String key, String value);<\/p>\n<p>&nbsp;<\/p>\n<p>key angiver den property, der skal s\u00e6ttes, mens value angiver v\u00e6rdien. Nedenst\u00e5ende tabel viser de properties, det kan v\u00e6re n\u00f8dvendigt at s\u00e6tte for at f\u00e5 JavaMail til at fungere.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"326\" valign=\"top\">Property<\/td>\n<td width=\"326\" valign=\"top\">Beskrivelse<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">mail.store.protocol<\/td>\n<td width=\"326\" valign=\"top\">Angiver store-protokollen. Session.getStore()-metodekaldet   returnerer et Store-objekt, der underst\u00f8tter   denne protokol. Man kan v\u00e6lge at bruge en anden protokol ved at angive denne   i kaldet til Session.getTransport(String protokol).<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">mail.transport.protocol<\/td>\n<td width=\"326\" valign=\"top\">Angiver den protokol, transporten skal benytte. Session.getTransport   returnerer et Transport-objekt, der   implementerer denne protokol. Man kan v\u00e6lge at benytte en anden protokol ved   at kalde Session.getTransport (String protokol).<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">mail.host<\/td>\n<td width=\"326\" valign=\"top\">Angiver mailserveren. Hvis denne property ikke er angivet,   fors\u00f8ges den lokale maskine brugt som mailserver.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">mail.user<\/td>\n<td width=\"326\" valign=\"top\">Angiver det brugernavn, der skal bruges, n\u00e5r der   tilsluttes til en mailserver.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">Mail.<em>protokol<\/em>.host<\/td>\n<td width=\"326\" valign=\"top\">Angiver en protokolafh\u00e6ngig mailserver. Denne overskriver mail.host-v\u00e6dien.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">mail.<em>protokol<\/em>.user<\/td>\n<td width=\"326\" valign=\"top\">Angiver et protokolafh\u00e6ngigt brugernavn. Dette overskriver   mail.user-v\u00e6rdien.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">mail.from<\/td>\n<td width=\"326\" valign=\"top\">Angiver brugerens returadresse. Denne v\u00e6rdi bliver brugt   af InternetAddress.getLocalAddress(). Angives denne   ikke s\u00e6ttes det til at v\u00e6re <a href=\"mailto:user@host\">user@host<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Afsendelse af en besked<\/h1>\n<p>&nbsp;<\/p>\n<p>Med terminologien og indstillingerne p\u00e5 plads kan man med god samvittighed begynde at bruge JavaMail. Det f\u00f8rste der skal oprettes, er et Session-objekt. Session-klassen har nedenst\u00e5ende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public final class Session extends java.lang.Object<\/p>\n<p>{<\/p>\n<p>public static javax.mail.Session getInstance(java.util.Properties, javax.mail.Authenticator);<\/p>\n<p>public static javax.mail.Session getDefaultInstance(java.util.Properties, javax.mail.Authenticator);<\/p>\n<p>public void setDebug(boolean);<\/p>\n<p>public boolean getDebug();<\/p>\n<p>public javax.mail.Provider[] getProviders();<\/p>\n<p>public javax.mail.Provider getProvider(java.lang.String);<\/p>\n<p>public void setProvider(javax.mail.Provider);<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>public javax.mail.Store getStore();<\/p>\n<p>public javax.mail.Store getStore(java.lang.String);<\/p>\n<p>public javax.mail.Store getStore(javax.mail.URLName);<\/p>\n<p>public javax.mail.Store getStore(javax.mail.Provider);<\/p>\n<p>public javax.mail.Folder getFolder(javax.mail.URLName);<\/p>\n<p>public javax.mail.Transport getTransport();<\/p>\n<p>public javax.mail.Transport getTransport(java.lang.String);<\/p>\n<p>public javax.mail.Transport getTransport(javax.mail.URLName);<\/p>\n<p>public javax.mail.Transport getTransport(javax.mail.Provider);<\/p>\n<p>public javax.mail.Transport getTransport(javax.mail.Address);<\/p>\n<p>public void setPasswordAuthentication(javax.mail.URLName, javax.mail.PasswordAuthentication);<\/p>\n<p>public javax.mail.PasswordAuthentication getPasswordAuthentication(javax.mail.URLName);<\/p>\n<p>public javax.mail.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);<\/p>\n<p>public java.util.Properties getProperties();<\/p>\n<p>public java.lang.String getProperty(java.lang.String);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Som det ses, har klassen ingen constructor. N\u00e5r man vil have instanser af klassen, bruger man metoderne getInstance\u00a0og getDefaultInstance. Forskellen p\u00e5 de to er, at getDefaultInstance returnerer en instans, der kan blive brugt flere gange af det samme program, mens getInstance returnerer en nyoprettet instans. Hvis man kalder getDefaultInstance, og der ikke allerede eksisterer en instans, bliver der oprettet en ny.<\/p>\n<p>&nbsp;<\/p>\n<p>Begge metoder tager de samme typer parametre. Det drejer sig om en r\u00e6kke properties og et Authenticator-objekt. Hvis man satte systemindstillinger efter den metode, der blev gennemg\u00e5et f\u00f8rst i kapitlet, kan man f\u00e5 en reference til systemets indstillinger med kommandoen System.getProperties().<\/p>\n<p>&nbsp;<\/p>\n<p>Authenticator-objektet bruges til at kontrollere, hvilke andre Java-klasser, der kan f\u00e5 adgang til Session-objektet ved hj\u00e6lp af getDefaultInstance. Session-objektet indeholder informationer om brugerens navn og adgangskode, og derfor skal det s\u00e5 vidt muligt holdes fortroligt. Hvis man ikke \u00f8nsker den fortrolighed, kan man angive null i stedet for et Authenticator-objekt \u2013 s\u00e5 vil alle andre klasser kunne f\u00e5 en reference til objektet ved at kalde getDefaultInstance med null som Authenticator-objekt.<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man \u00f8nsker at sikre sit Session-objekt, m\u00e5 man angive et Authenticator-objekt. Det g\u00f8res ved at oprette en klasse, der nedarver fra den abstrakte klasse Authenticator. Denne klasse har f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public abstract class Authenticator extends java.lang.Object<\/p>\n<p>{<\/p>\n<p>final javax.mail.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String);<\/p>\n<p>&nbsp;<\/p>\n<p>protected final java.net.InetAddress getRequestingSite();<\/p>\n<p>protected final int getRequestingPort();<\/p>\n<p>protected final java.lang.String getRequestingProtocol();<\/p>\n<p>protected final java.lang.String getRequestingPrompt();<\/p>\n<p>protected final java.lang.String getDefaultUserName();<\/p>\n<p>protected javax.mail.PasswordAuthentication getPasswordAuthentication();<\/p>\n<p>public javax.mail.Authenticator();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<h2>Oprettelse af beskeden<\/h2>\n<p>&nbsp;<\/p>\n<p>N\u00e5r man har f\u00e5et en reference til Session-objektet, kan man oprette selve beskeden. P\u00e5 Internet sendes beskeder i MIME-format \u2013 Multipurpose Internet Mail Extensions. Derfor bruger man klassen MimeMessage til at angive en besked. Denne klasse findes i pakken javax.mail.internet og har f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public class MimeMessage\u00a0extends javax.mail.Message implements javax.mail.internet.MimePart<\/p>\n<p>{<\/p>\n<p>public javax.mail.internet.MimeMessage(javax.mail.Session);<\/p>\n<p>public javax.mail.internet.MimeMessage(javax.mail.Session,java.io.InputStream);<\/p>\n<p>public javax.mail.Address[] getFrom();<\/p>\n<p>public void setFrom(javax.mail.Address);<\/p>\n<p>public void setFrom();<\/p>\n<p>public void addFrom(javax.mail.Address[]);<\/p>\n<p>public javax.mail.Address[] getRecipients(javax.mail.Message.RecipientType);<\/p>\n<p>public javax.mail.Address[] getAllRecipients();<\/p>\n<p>public void setRecipients(javax.mail.Message.RecipientType, javax.mail.Address[]);<\/p>\n<p>public void addRecipients(javax.mail.Message.RecipientType, javax.mail.Address[]);<\/p>\n<p>public javax.mail.Address[] getReplyTo();<\/p>\n<p>public void setReplyTo(javax.mail.Address[]);<\/p>\n<p>public java.lang.String getSubject();<\/p>\n<p>public void setSubject(java.lang.String);<\/p>\n<p>public void setSubject(java.lang.String, java.lang.String);<\/p>\n<p>public java.util.Date getSentDate();<\/p>\n<p>public void setSentDate(java.util.Date);<\/p>\n<p>public java.util.Date getReceivedDate();<\/p>\n<p>&nbsp;<\/p>\n<p>public int getSize();<\/p>\n<p>public int getLineCount();<\/p>\n<p>public boolean isMimeType(java.lang.String);<\/p>\n<p>public java.lang.String getDisposition();<\/p>\n<p>public void setDisposition(java.lang.String);<\/p>\n<p>public java.lang.String getEncoding();<\/p>\n<p>public java.lang.String getContentID();<\/p>\n<p>public void setContentID(java.lang.String);<\/p>\n<p>public java.lang.String getContentMD5();<\/p>\n<p>public java.lang.String getDescription();<\/p>\n<p>public void setDescription(java.lang.String);<\/p>\n<p>public void setDescription(java.lang.String, java.lang.String);<\/p>\n<p>public java.lang.String[] getContentLanguage();<\/p>\n<p>public void setContentLanguage(java.lang.String[]);<\/p>\n<p>public java.lang.Object getContent();<\/p>\n<p>public void setContent(java.lang.Object, java.lang.String);<\/p>\n<p>public void setText(java.lang.String);<\/p>\n<p>public void setText(java.lang.String, java.lang.String);<\/p>\n<p>public void setContent(javax.mail.Multipart);<\/p>\n<p>public javax.mail.Message reply(boolean);<\/p>\n<p>public java.lang.String[] getHeader(java.lang.String);<\/p>\n<p>public java.lang.String getHeader(java.lang.String, java.lang.String);<\/p>\n<p>public void setHeader(java.lang.String, java.lang.String);<\/p>\n<p>public void addHeader(java.lang.String, java.lang.String);<\/p>\n<p>public void removeHeader(java.lang.String);<\/p>\n<p>public java.util.Enumeration getAllHeaders();<\/p>\n<p>public void addHeaderLine(java.lang.String);<\/p>\n<p>public java.util.Enumeration getAllHeaderLines();<\/p>\n<p>public void saveChanges();<\/p>\n<p>protected void updateHeaders();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Som det ses indeholder MimeMessage-klassen en lang r\u00e6kke metoder. For at afsende en besked, beh\u00f8ver man kun kende de f\u00e6rreste af dem. De fleste af metoderne er imidlertid s\u00e6rdeles anvendelige og vil derfor blive gennemg\u00e5et i l\u00f8bet af kapitlet.<\/p>\n<p>&nbsp;<\/p>\n<p>De mest n\u00f8dvendige metoder er setRecipients, setSubject\u00a0og setText. Man bruger setRecipients til at angive, hvem der skal modtage beskeden. Der findes tre forskellige former for modtagere:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Almindelige modtagere<\/li>\n<li>CC\u00a0(Carbon Copy)<\/li>\n<li>BCC\u00a0(Blind Carbon Copy)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Alle, der modtager beskeden, kan se de almindelige modtagere og CC-modtagere, mens BCC-modtagerne ikke vises. Man skal dog v\u00e6re opm\u00e6rksom p\u00e5, at nogen mailservere ikke underst\u00f8tter BCC og derfor konverterer dem til CC.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>I JavaMail bruger man setRecipients til at angive alle former for modtagere. Metodens f\u00f8rste parameter er en konstant, der angiver hvilken type modtager, der er tale om. Metoden accepterer f\u00f8lgende konstanter, der er defineret i klassen Message.RecipientType:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Message.RecipientType.TO<\/li>\n<li>Message.RecipientType.CC<\/li>\n<li>Message.RecipientType.BCC<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Man skal naturligvis ogs\u00e5 angive, hvilke personer, der skal modtage beskeden. Det g\u00f8r man ved hj\u00e6lp af en r\u00e6kke Address-objekter. JavaMail kan b\u00e5de benyttes til at sende beskeder til enkelte personer eller til diskussiongrupper (newsgroups). Derfor findes der to forskellige klasser, som begge nedarver fra Address-klassen. Det drejer sig om NewsAddress, der bruges til at sende beskeder til diskussionsgrupper, og InternetAddress, som bruges til at sende almindelige beskeder. InternetAddress har f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public class InternetAddress\u00a0extends javax.mail.Address<\/p>\n<p>{<\/p>\n<p>public javax.mail.internet.InternetAddress();<\/p>\n<p>public javax.mail.internet.InternetAddress(java.lang.String);<\/p>\n<p>public javax.mail.internet.InternetAddress(java.lang.String,java.lang.String);<\/p>\n<p>public javax.mail.internet.InternetAddress(java.lang.String,java.lang.String,java.lang.String);<\/p>\n<p>&nbsp;<\/p>\n<p>public java.lang.String getType();<\/p>\n<p>public void setAddress(java.lang.String);<\/p>\n<p>public void setPersonal(java.lang.String, java.lang.String);<\/p>\n<p>public void setPersonal(java.lang.String);<\/p>\n<p>public java.lang.String getAddress();<\/p>\n<p>public java.lang.String getPersonal();<\/p>\n<p>public static java.lang.String toString(javax.mail.Address[]);<\/p>\n<p>public static javax.mail.internet.InternetAddress getLocalAddress(javax.mail.Session);<\/p>\n<p>public static javax.mail.internet.InternetAddress[] parse(java.lang.String);<\/p>\n<p>public static javax.mail.internet.InternetAddress[] parse(java.lang.String, boolean);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man vil bruge klassens constructor til at oprette en adresse, kan det g\u00f8res p\u00e5 flere forskellige m\u00e5der. Man kan enten angive adressen som en almindelig adresse eller som en adresse og et virkeligt navn. Nedenst\u00e5ende viser, hvordan man kan angive adresser:<\/p>\n<p>&nbsp;<\/p>\n<p>new InternetAddress(&#8220;salg@post.engroshandel.dk&#8221;);<\/p>\n<p>new InternetAddress(&#8220;billg@microsoft.com&#8221;, &#8220;Bill Gates&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Opretter man et InternetAddress-objekt uden at angive nogen adresser, eller f\u00e5r man senere brug for at \u00e6ndre adressen, kan man bruge metoden setAddress og setPersonal.<\/p>\n<p>&nbsp;<\/p>\n<p>InternetAddress indeholder ogs\u00e5 statiske metoder til at overs\u00e6tte tekststrenge til adresser. Det drejer sig om parse-metoderne. N\u00e5r man angiver en adresse i en tekststreng kan dette ske p\u00e5 tre forskellige m\u00e5der:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><em>nil<\/em> eksempelvis billg@microsoft.com.<\/li>\n<li><em>parens<\/em> eksempelvis billg@microsoft.com (Bill Gates).<\/li>\n<li><em>angles <\/em>eksempelvis Bill Gates &lt;billg@microsoft.com&gt;.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Bem\u00e6rk at setRecipients tager et array af adresser som parameter. Derfor kan det v\u00e6re en fordel at bruge parse-funktionen, da denne netop returnerer et array af adresser.<\/p>\n<p>&nbsp;<\/p>\n<p>Metoden setSubject bruges til at angive beskedens overskrift. Denne er blot en tekststreng. Til at angive br\u00f8dteksten, bruges metodet setText, der ogs\u00e5 tager en tekststreng som parameter.<\/p>\n<p>&nbsp;<\/p>\n<h2>Afsendelse af beskeden<\/h2>\n<p>&nbsp;<\/p>\n<p>Afsendelsen af beskeden foretages af Transport-klassen:<\/p>\n<p>&nbsp;<\/p>\n<p>public abstract class Transport extends java.lang.Object<\/p>\n<p>{<\/p>\n<p>public javax.mail.Transport(javax.mail.Session,javax.mail.URLName);<\/p>\n<p>&nbsp;<\/p>\n<p>public void connect(java.lang.String, java.lang.String, java.lang.String);<\/p>\n<p>public void connect(java.lang.String, int, java.lang.String, java.lang.String);<\/p>\n<p>public void connect();<\/p>\n<p>public boolean isConnected();<\/p>\n<p>public synchronized void close();<\/p>\n<p>public javax.mail.URLName getURLName();<\/p>\n<p>public static void send(javax.mail.Message);<\/p>\n<p>public static void send(javax.mail.Message, javax.mail.Address[]);<\/p>\n<p>public abstract void sendMessage(javax.mail.Message, javax.mail.Address[]);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Afsendelsen sker i metoden send, der tager beskeden som parameter. Hvis man ikke har tilf\u00f8jet modtageradresserne til beskedens header, kan man angive dem som parameter til send-metoden i stedet.<\/p>\n<p>&nbsp;<\/p>\n<p>Nedenst\u00e5ende program viser, hvordan man kan afsende en besked ved hj\u00e6lp af JavaMail.<\/p>\n<p>&nbsp;<\/p>\n<p>import javax.mail.*;<\/p>\n<p>import javax.mail.internet.*;<\/p>\n<p>&nbsp;<\/p>\n<p>public class sendMail<\/p>\n<p>&nbsp;<\/p>\n<p>{<\/p>\n<p>public static final void main (String args[]) throws Exception<\/p>\n<p>{<\/p>\n<p>Session session = Session.getDefaultInstance(System.getProperties(), null);<\/p>\n<p>&nbsp;<\/p>\n<p>Message msg = new MimeMessage(session);<\/p>\n<p>&nbsp;<\/p>\n<p>String to = &#8220;modtager@denne.her.adresse.dk&#8221;;<\/p>\n<p>String from = &#8220;mig@mit.domaene.dk&#8221;;<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));<\/p>\n<p>msg.setFrom (new InternetAddress(from));<\/p>\n<p>}<\/p>\n<p>catch (AddressException ae)<\/p>\n<p>{<\/p>\n<p>System.err.println (ae.toString());<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.err.println (me.toString());<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>msg.setSubject (&#8220;Eksempel&#8221;);<\/p>\n<p>msg.setText (&#8220;Her er indholdet&#8221;);<\/p>\n<p>Transport.send (msg);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.err.println (me.toString());<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man vil have et mere avanceret program til postafsendelse kan man bruge programmet MailSender. Det giver en grafisk brugerflade til beskedafsendelsen og giver mulighed for, at man kan s\u00e6tte CC og BCC. Hvis man vil have flere modtagere af en type, kan man adskille adresserne med et komma.<\/p>\n<p>&nbsp;<\/p>\n<p>import java.awt.*;<\/p>\n<p>import java.awt.event.*;<\/p>\n<p>import javax.mail.*;<\/p>\n<p>import javax.mail.internet.*;<\/p>\n<p>&nbsp;<\/p>\n<p>public class MailSender extends Frame implements ActionListener<\/p>\n<p>{<\/p>\n<p>&nbsp;<\/p>\n<p>private TextField til, cc, bcc, subject;<\/p>\n<p>private TextArea besked;<\/p>\n<p>private Button send;<\/p>\n<p>private Label status;<\/p>\n<p>&nbsp;<\/p>\n<p>public MailSender()<\/p>\n<p>{<\/p>\n<p>\/\/ Tilpas vinduet<\/p>\n<p>&nbsp;<\/p>\n<p>super (&#8220;Beskedsender&#8221;);<\/p>\n<p>setSize (500,400);<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Opret komponenter<\/p>\n<p>&nbsp;<\/p>\n<p>til = new TextField();<\/p>\n<p>cc = new TextField();<\/p>\n<p>bcc = new TextField();<\/p>\n<p>subject = new TextField();<\/p>\n<p>besked = new TextArea();<\/p>\n<p>send = new Button (&#8220;Afsend&#8221;);<\/p>\n<p>status = new Label (&#8220;Beskedsender 1.0&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>Panel toPanel = new Panel();<\/p>\n<p>toPanel.setLayout(new GridLayout(1,2));<\/p>\n<p>toPanel.add (new Label (&#8220;Til&#8221;));<\/p>\n<p>toPanel.add (til);<\/p>\n<p>&nbsp;<\/p>\n<p>Panel ccPanel = new Panel();<\/p>\n<p>ccPanel.setLayout(new GridLayout(1,2));<\/p>\n<p>ccPanel.add (new Label (&#8220;CC&#8221;));<\/p>\n<p>ccPanel.add (cc);<\/p>\n<p>&nbsp;<\/p>\n<p>Panel bccPanel = new Panel();<\/p>\n<p>bccPanel.setLayout(new GridLayout(1,2));<\/p>\n<p>bccPanel.add (new Label (&#8220;BCC&#8221;));<\/p>\n<p>bccPanel.add (bcc);<\/p>\n<p>&nbsp;<\/p>\n<p>Panel subjPanel = new Panel();<\/p>\n<p>subjPanel.setLayout(new GridLayout(1,2));<\/p>\n<p>subjPanel.add (new Label (&#8220;Overskrift&#8221;));<\/p>\n<p>subjPanel.add (subject);<\/p>\n<p>&nbsp;<\/p>\n<p>Panel topPanel = new Panel();<\/p>\n<p>topPanel.setLayout (new GridLayout(4,1));<\/p>\n<p>topPanel.add (toPanel);<\/p>\n<p>topPanel.add (ccPanel);<\/p>\n<p>topPanel.add (bccPanel);<\/p>\n<p>topPanel.add (subjPanel);<\/p>\n<p>&nbsp;<\/p>\n<p>Panel buttomPanel = new Panel();<\/p>\n<p>buttomPanel.setLayout(new GridLayout(2,1));<\/p>\n<p>buttomPanel.add (send);<\/p>\n<p>buttomPanel.add (status);<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Tilf\u00f8j komponenter<\/p>\n<p>&nbsp;<\/p>\n<p>add (topPanel, BorderLayout.NORTH);<\/p>\n<p>add (besked, BorderLayout.CENTER);<\/p>\n<p>add (buttomPanel, BorderLayout.SOUTH);<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Tilf\u00f8j eventh\u00e5ndtering<\/p>\n<p>&nbsp;<\/p>\n<p>send.addActionListener (this);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>public static final void main (String args[])<\/p>\n<p>{<\/p>\n<p>MailSender me = new MailSender();<\/p>\n<p>me.show();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>public void actionPerformed(ActionEvent e)<\/p>\n<p>{<\/p>\n<p>if (e.getSource() == send)<\/p>\n<p>{<\/p>\n<p>status.setText (&#8220;Sender besked&#8230;&#8221;);<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>Session session = Session.getDefaultInstance(System.getProperties(), null);<\/p>\n<p>Message msg = new MimeMessage(session);<\/p>\n<p>&nbsp;<\/p>\n<p>msg.setRecipients (Message.RecipientType.TO, InternetAddress.parse (til.getText()));<\/p>\n<p>msg.setRecipients (Message.RecipientType.CC, InternetAddress.parse (cc.getText()));<\/p>\n<p>msg.setRecipients (Message.RecipientType.BCC, InternetAddress.parse (bcc.getText()));<\/p>\n<p>msg.setSubject (subject.getText());<\/p>\n<p>msg.setText (besked.getText());<\/p>\n<p>Transport.send (msg);<\/p>\n<p>status.setText (&#8220;Besked afsendt.&#8221;);<\/p>\n<p>}<\/p>\n<p>catch (Exception ex)<\/p>\n<p>{<\/p>\n<p>status.setText (ex.toString());<\/p>\n<p>ex.printStackTrace();<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p><strong><em><br \/>\n<\/em><\/strong><\/p>\n<h2>Definition af headeren<\/h2>\n<p>Indtil videre er kun en lille del af de oplysninger, headeren kan indeholde, blevet gennemg\u00e5et. Nedenst\u00e5ende skema viser hvilke headers, der anvendes.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"260\" valign=\"top\">Header<\/td>\n<td width=\"196\" valign=\"top\">Beskrivelse<\/td>\n<td width=\"196\" valign=\"top\">Metode<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">From<\/td>\n<td width=\"196\" valign=\"top\">Afsenderadressen<\/td>\n<td width=\"196\" valign=\"top\">setFrom<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Sender<\/td>\n<td width=\"196\" valign=\"top\">Den   adresse, beskeden er sendt fra.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Subject<\/td>\n<td width=\"196\" valign=\"top\">Beskedens   overskrift<\/td>\n<td width=\"196\" valign=\"top\">setSubject<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">To<\/td>\n<td width=\"196\" valign=\"top\">Beskedens   modtager<\/td>\n<td width=\"196\" valign=\"top\">setRecipients<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">CC<\/td>\n<td width=\"196\" valign=\"top\">CC-modtagere<\/td>\n<td width=\"196\" valign=\"top\">setRecipients<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">BCC<\/td>\n<td width=\"196\" valign=\"top\">BCC-modtagere<\/td>\n<td width=\"196\" valign=\"top\">setRecipients<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Comment<\/td>\n<td width=\"196\" valign=\"top\">Kommentarer   om brevet.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Reply-To<\/td>\n<td width=\"196\" valign=\"top\">Den   adresse, der skal sendes svar til.<\/td>\n<td width=\"196\" valign=\"top\">SetReplyTo<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-Reply-To<\/td>\n<td width=\"196\" valign=\"top\">Som   Reply-To, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-From<\/td>\n<td width=\"196\" valign=\"top\">Som   From, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-Sender<\/td>\n<td width=\"196\" valign=\"top\">Som   Sender, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Date<\/td>\n<td width=\"196\" valign=\"top\">Det   tidspunkt beskeden er afsendt p\u00e5.<\/td>\n<td width=\"196\" valign=\"top\">setSentDate<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-To<\/td>\n<td width=\"196\" valign=\"top\">Som   To, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-CC<\/td>\n<td width=\"196\" valign=\"top\">Som   CC, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-BCC<\/td>\n<td width=\"196\" valign=\"top\">Som   BCC, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Message-ID<\/td>\n<td width=\"196\" valign=\"top\">Beskedens   ID.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Resent-Message-ID<\/td>\n<td width=\"196\" valign=\"top\">Som   Message-ID, men ved en besked der er sendt mere end en gang.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">In-Reply-To<\/td>\n<td width=\"196\" valign=\"top\">Den   besked, denne besked er et svar p\u00e5.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">References<\/td>\n<td width=\"196\" valign=\"top\">En   liste over henvisninger<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Keywords<\/td>\n<td width=\"196\" valign=\"top\">N\u00f8gleord   i beskeden.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Encrypted<\/td>\n<td width=\"196\" valign=\"top\">Angiver   om beskeden er krypteret.<\/td>\n<td width=\"196\" valign=\"top\">Ingen<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Content-Descripton<\/td>\n<td width=\"196\" valign=\"top\">Beskrivelse   af beskedens indhold.<\/td>\n<td width=\"196\" valign=\"top\">setDescription<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Content-ID<\/td>\n<td width=\"196\" valign=\"top\">ID.<\/td>\n<td width=\"196\" valign=\"top\">setContentID<\/td>\n<\/tr>\n<tr>\n<td width=\"260\" valign=\"top\">Content-Language<\/td>\n<td width=\"196\" valign=\"top\">Sproget   af indholdet som defineret i RFC1766.<\/td>\n<td width=\"196\" valign=\"top\">setContentLanguage<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Udover de headere, ovenst\u00e5ende tabel viser, findes der en r\u00e6kke tilf\u00f8jelser. Disse indledes alle med X. De enkelte postprogrammer kan selv definere disse tilf\u00f8jelser, og man kan s\u00e5ledes ikke regne med, at modtagerens postprogram kan forst\u00e5 dem. De mest udbredte er X-Mailer, der angiver navnet p\u00e5 det program, der har afsendt beskeden, og X-priority, der angiver beskedens prioritet.<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man \u00f8nsker at besvare en besked, kan man bruge metoden reply til at oprette en besked, der har headers indstillet som en svarbesked.<\/p>\n<p><script type=\"text\/javascript\">\nvar uri = 'http:\/\/impdk.tradedoubler.com\/imp?type(js)g(19172330)a(2029446)' + new String (Math.random()).substring (2, 11);\ndocument.write('<sc'+'ript type=\"text\/javascript\" src=\"'+uri+'\" charset=\"\"><\/sc'+'ript>');\n<\/script><\/p>\n<h2>Beskeder i flere dele<\/h2>\n<p>&nbsp;<\/p>\n<p>Hvis man vil sende en besked med vedh\u00e6ng \u2013 for eksempel en vedlagt fil \u2013 skal man oprette en besked i flere dele \u2013 en <em>mime multipart message<\/em>. Dette g\u00f8res ved hj\u00e6lp af klassen MimeMultipart. Denne klasser har f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public class MimeMultipart\u00a0extends javax.mail.Multipart<\/p>\n<p>{<\/p>\n<p>public javax.mail.internet.MimeMultipart();<\/p>\n<p>public javax.mail.internet.MimeMultipart(java.lang.String);<\/p>\n<p>public javax.mail.internet.MimeMultipart(javax.activation.DataSource);<\/p>\n<p>&nbsp;<\/p>\n<p>public synchronized void setSubType(java.lang.String);<\/p>\n<p>public synchronized int getCount();<\/p>\n<p>public synchronized void addBodyPart(javax.mail.BodyPart);<\/p>\n<p>public synchronized void addBodyPart(javax.mail.BodyPart, int);<\/p>\n<p>public synchronized javax.mail.BodyPart getBodyPart(int);<\/p>\n<p>public synchronized javax.mail.BodyPart getBodyPart(java.lang.String);<\/p>\n<p>public void writeTo(java.io.OutputStream);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Dern\u00e6st skal der oprettes et MimeBodyPart-objekt for hver del, beskeden skal best\u00e5 af. MimeBodyPart har f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public class MimeBodyPart\u00a0extends javax.mail.BodyPart implements javax.mail.internet.MimePart<\/p>\n<p>{<\/p>\n<p>public javax.mail.internet.MimeBodyPart();<\/p>\n<p>public javax.mail.internet.MimeBodyPart(java.io.InputStream);<\/p>\n<p>public javax.mail.internet.MimeBodyPart(javax.mail.internet.InternetHeaders,byte[]);<\/p>\n<p>&nbsp;<\/p>\n<p>public int getSize();<\/p>\n<p>public int getLineCount();<\/p>\n<p>&nbsp;<\/p>\n<p>public java.lang.String getContentType();<\/p>\n<p>public boolean isMimeType(java.lang.String);<\/p>\n<p>public java.lang.String getDescription();<\/p>\n<p>public void setDescription(java.lang.String);<\/p>\n<p>public void setDescription(java.lang.String, java.lang.String);<\/p>\n<p>public java.lang.Object getContent();<\/p>\n<p>public void setContent(java.lang.Object, java.lang.String);<\/p>\n<p>public void setText(java.lang.String);<\/p>\n<p>public void setText(java.lang.String, java.lang.String);<\/p>\n<p>public void setContent(javax.mail.Multipart);<\/p>\n<p>public java.lang.String[] getHeader(java.lang.String);<\/p>\n<p>public java.lang.String getHeader(java.lang.String, java.lang.String);<\/p>\n<p>public void setHeader(java.lang.String, java.lang.String);<\/p>\n<p>public void addHeader(java.lang.String, java.lang.String);<\/p>\n<p>public void removeHeader(java.lang.String);<\/p>\n<p>public java.util.Enumeration getAllHeaders();<\/p>\n<p>public void addHeaderLine(java.lang.String);<\/p>\n<p>public java.util.Enumeration getAllHeaderLines();<\/p>\n<p>static boolean isMimeType(javax.mail.internet.MimePart, java.lang.String);<\/p>\n<p>static void setText(javax.mail.internet.MimePart, java.lang.String, java.lang.String);<\/p>\n<p>static java.lang.String getDescription(javax.mail.internet.MimePart);<\/p>\n<p>static void setDescription(javax.mail.internet.MimePart, java.lang.String, java.lang.String);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Man angiver indholdet af en del af beskeden ved at benytte metoden setContent. Denne har to parametre. Det er det objekt, som er selve indholdet, og en tekststreng, der angiver, hvilken mimetype indholdet er. De forskellige mimetyper vil blive gennemg\u00e5et senere i dette kapitel.<\/p>\n<p>&nbsp;<\/p>\n<p>N\u00e5r de forskellige dele er blevet oprettet, skal de tilf\u00f8jes til MimeMultipart-objektet. Det g\u00f8r man ved hj\u00e6lp af metoden addBodyPart. Endeligt skal MimeMultipart-objektet s\u00e6ttes som indholdet af en MimeMessage. Metoden setContent bruges til dette. Nedenst\u00e5ende eksempel viser, hvordan man kan sende tekst og et billede i samme besked.<\/p>\n<p>&nbsp;<\/p>\n<p>import javax.mail.*;<\/p>\n<p>import javax.mail.internet.*;<\/p>\n<p>import java.io.*;<\/p>\n<p>&nbsp;<\/p>\n<p>public class SendImage<\/p>\n<p>{<\/p>\n<p>public static final void main (String args[])<\/p>\n<p>{<\/p>\n<p>\/\/ Indstillinger<\/p>\n<p>&nbsp;<\/p>\n<p>String to = &#8220;modtager@dom\u00e6ne.dk&#8221;;<\/p>\n<p>&nbsp;<\/p>\n<p>String from = &#8220;afsender@dom\u00e6ne.dk&#8221;;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Indl\u00e6s billedet<\/p>\n<p>FileInputStream in = null;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>in = new FileInputStream (&#8220;Image.gif&#8221;);<\/p>\n<p>}<\/p>\n<p>catch (FileNotFoundException fnfe)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Filen &#8216;Image.gif&#8217; kunne ikke findes.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>byte buffer[] = null;<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>int size = in.available();<\/p>\n<p>buffer = new byte[size];<\/p>\n<p>in.read(buffer);<\/p>\n<p>}<\/p>\n<p>catch (IOException ioe)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Fejl under l\u00e6sning af fil.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Opret multipart<\/p>\n<p>&nbsp;<\/p>\n<p>MimeMultipart multipart = new MimeMultipart();<\/p>\n<p>MimeBodyPart text = new MimeBodyPart();<\/p>\n<p>MimeBodyPart billede = new MimeBodyPart();<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ S\u00e6t indholdet<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>text.setContent (&#8220;Her er billedet&#8221;, &#8220;text\/plain&#8221;);<\/p>\n<p>billede.setContent (buffer, &#8220;image\/gif&#8221;);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Beskedernes indhold kunne ikke s\u00e6ttes.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Tilf\u00f8j til multipart<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>multipart.addBodyPart (text);<\/p>\n<p>multipart.addBodyPart (billede);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Delene kunne ikke tilf\u00f8jes til beskeden.&#8221;);<\/p>\n<p>System.exit (0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Opret besked<\/p>\n<p>&nbsp;<\/p>\n<p>Session session = Session.getDefaultInstance(System.getProperties(), null);<\/p>\n<p>Message msg = new MimeMessage (session);<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>msg.setContent (multipart);<\/p>\n<p>msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));<\/p>\n<p>msg.setFrom (new InternetAddress (from));<\/p>\n<p>msg.setSubject (&#8220;Et billede&#8221;);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Den endelige besked kunne ikke oprettes.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Afsend beskeden<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>Transport.send (msg);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Beskeden kunne ikke afsendes.&#8221;);<\/p>\n<p>me.printStackTrace();<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p><strong><em><br \/>\n<\/em><\/strong><\/p>\n<h2>Mimetyper<\/h2>\n<p>&nbsp;<\/p>\n<p>N\u00e5r man sender beskeder i flere dele, skal man som n\u00e6vnt angive hvilken mimetype, de forskellige dele har. Mimetyperne er opdelt i forskellige niveauer. Det f\u00f8rste niveau angiver den overordnede type \u2013 for eksempel image \u2013 mens det n\u00e6ste niveau angiver en mere specifik type \u2013 for eksempel gif. Nedenst\u00e5ende tabel viser en oversigt over de mimetyper, der er standardiserede. Mange programmer opretter egene mimetyper til deres data. Dette er muligt, da mimestandarden er udvidelig.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"241\" valign=\"top\">Mimetype<\/td>\n<td width=\"411\" valign=\"top\">Beskrivelse<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">Text<\/td>\n<td width=\"411\" valign=\"top\">Tekst af en eller anden art.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">text\/plain<\/td>\n<td width=\"411\" valign=\"top\">Almindelig tekst uden formatering.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">text\/richtext<\/td>\n<td width=\"411\" valign=\"top\">Formateret tekst som defineret i RFC 1341.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">image<\/td>\n<td width=\"411\" valign=\"top\">Et billede af en eller anden art.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">image\/jpeg<\/td>\n<td width=\"411\" valign=\"top\">Et billede i jpeg-format.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">image\/gif<\/td>\n<td width=\"411\" valign=\"top\">Et billede i gif-format.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">audio<\/td>\n<td width=\"411\" valign=\"top\">Lyd af en eller anden form.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">audio\/basic<\/td>\n<td width=\"411\" valign=\"top\">Lyd kodet med 8bit ISDN mu-law [PCM] med en sample rate p\u00e5   8000 Hz.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">video<\/td>\n<td width=\"411\" valign=\"top\">Film af en eller anden art.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">video\/mpeg<\/td>\n<td width=\"411\" valign=\"top\">Film i mpeg-format<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">application<\/td>\n<td width=\"411\" valign=\"top\">Data i ufortolket bin\u00e6r form eller information, der skal   fortolkes af en applikation.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">application\/octet-stream<\/td>\n<td width=\"411\" valign=\"top\">Ufortolket data. Det eneste et program, der modtager denne   type, kan g\u00f8re, er at tilbyde brugeren at gemme dataene.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">application\/Postscript<\/td>\n<td width=\"411\" valign=\"top\">Data i postscript-format.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">message<\/td>\n<td width=\"411\" valign=\"top\">En besked<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">message\/rfc822<\/td>\n<td width=\"411\" valign=\"top\">En besked formateret i henhold til RFC 822.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">message\/partial<\/td>\n<td width=\"411\" valign=\"top\">En del af en besked.<\/td>\n<\/tr>\n<tr>\n<td width=\"241\" valign=\"top\">message\/external-body<\/td>\n<td width=\"411\" valign=\"top\">En besked, hvor selve besked ligger i en ekstern fil.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Der findes mange flere mimetyper end de, der er angivet herover. Disse er blot de typer, der er defineret i beskrivelsen af mime (RFC 2046).<\/p>\n<h1>Modtagelse af besked<\/h1>\n<p>&nbsp;<\/p>\n<p>At kunne sende beskeder er imidlertid kun halvdelen af et postprogram. Man skal ogs\u00e5 gerne kunne modtage de beskeder, andre sender til en. Her findes der to forskellige protokoller. Det er POP3\u00a0\u2013 Post Office Protocol\u00a0\u2013 og IMAP\u00a0\u2013 Internet Message Access Protocol. I \u00f8jeblikket underst\u00f8tter JavaMail kun<\/p>\n<p>&nbsp;<\/p>\n<p>IMAP, men det forventes at fremtidige versioner ogs\u00e5 vil indeholde underst\u00f8ttelse for POP3.<\/p>\n<p>&nbsp;<\/p>\n<p>Ligesom n\u00e5r man afsender post, bruger man Session-klassen, n\u00e5r man henter post. Den oprettes p\u00e5 den vanlige m\u00e5de ved hj\u00e6lp af getDefaultInstance-metoden. Dern\u00e6st skal man have en reference til et Store-objekt. Store-klassen repr\u00e6senterer en database, der kan indeholde et hierarki af foldere og beskeder. Det er ogs\u00e5 denne klasse, der definerer protokoller og henter beskeder fra folderne. Klassen har nedenst\u00e5ende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public abstract class Store extends java.lang.Object<\/p>\n<p>{<\/p>\n<p>public void connect();<\/p>\n<p>public void connect(java.lang.String, java.lang.String, java.lang.String);<\/p>\n<p>public void connect(java.lang.String, int, java.lang.String, java.lang.String);<\/p>\n<p>public boolean isConnected();<\/p>\n<p>public synchronized void close();<\/p>\n<p>public javax.mail.URLName getURLName();<\/p>\n<p>public abstract javax.mail.Folder getDefaultFolder();<\/p>\n<p>public abstract javax.mail.Folder getFolder(java.lang.String);<\/p>\n<p>public abstract javax.mail.Folder getFolder(javax.mail.URLName);<\/p>\n<p>public synchronized void addConnectionListener(javax.mail.event.ConnectionListener);<\/p>\n<p>public synchronized void removeConnectionListener(javax.mail.event.ConnectionListener);<\/p>\n<p>public synchronized void addStoreListener(javax.mail.event.StoreListener);<\/p>\n<p>public synchronized void removeStoreListener(javax.mail.event.StoreListener);<\/p>\n<p>public synchronized void addFolderListener(javax.mail.event.FolderListener);<\/p>\n<p>public synchronized void removeFolderListener(javax.mail.event.FolderListener);<\/p>\n<p>public java.lang.String toString();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Man f\u00e5r en instans af Store-klassen ved at kalde getStore-metoden p\u00e5 Session-objektet. Den eneste parameter til metoden er en tekststreng, der angiver protokollen.<\/p>\n<p>&nbsp;<\/p>\n<p>For at tilslutte mailserveren bruger man metoden connect. Her kan man angive adressen p\u00e5 mailserveren, brugernavn og kodeord. Hvis brugernavnet er ukendt, eller hvis kodeordet er forkert, opst\u00e5r en AuthenticationFailedException, mens alle andre fejl vil medf\u00f8re en MessagingException.<\/p>\n<p>&nbsp;<\/p>\n<p>Som det ses, kan man tilf\u00f8je tre slags listeners til Store-objektet. Det drejer sig om ConnectionListener, StoreListener\u00a0og FolderListener.<\/p>\n<p>&nbsp;<\/p>\n<p>Store-klassen genererer f\u00f8lgende events:<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"326\" valign=\"top\">Event<\/td>\n<td width=\"326\" valign=\"top\">Beskrivelse<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">ConnectionEvent<\/td>\n<td width=\"326\" valign=\"top\">Opst\u00e5r, n\u00e5r   programmeter slutter til mailserveren, eller n\u00e5r en eksisterende forbindelse   afbrydes eller afsluttes.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">StoreEvent<\/td>\n<td width=\"326\" valign=\"top\">Bruges til at   sende advarsler og andre beskeder fra mailserveren til brugeren. Metoden getMessageType kan bruges til   at f\u00e5 at vide, hvilken type besked, der er tale om. Det kan enten v\u00e6re ALERT eller NOTICE. Hvis typen er ALERT, skal programmet vise   beskeden p\u00e5 en m\u00e5de, der tiltr\u00e6kker brugerens opm\u00e6rksomhed.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">FolderEvent<\/td>\n<td width=\"326\" valign=\"top\">Opst\u00e5r n\u00e5r der   sker en \u00e6ndring i en af folderne. Det kan v\u00e6re oprettelse af en ny folder,   sletning af en folder eller omd\u00f8bning af en folder.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>Foldere<\/h2>\n<p>&nbsp;<\/p>\n<p>P\u00e5 baggrund af Store-objektet kan man f\u00e5 en reference til et Folder-objekt. Det sker ved hj\u00e6lp af metoden getFolder\u00a0eller getDefaultFolder. Folder-objektet repr\u00e6senterer en folder p\u00e5 mailserveren. Klassen har f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public abstract class Folder extends java.lang.Object<\/p>\n<p>{<\/p>\n<p>public abstract java.lang.String getName();<\/p>\n<p>public abstract java.lang.String getFullName();<\/p>\n<p>public javax.mail.Store getStore();<\/p>\n<p>public abstract javax.mail.Folder getParent();<\/p>\n<p>public abstract boolean exists();<\/p>\n<p>public abstract int getType();<\/p>\n<p>public abstract boolean hasNewMessages();<\/p>\n<p>public abstract javax.mail.Folder getFolder(java.lang.String);<\/p>\n<p>public abstract void open(int);<\/p>\n<p>public abstract void close(boolean);<\/p>\n<p>public abstract int getMessageCount();<\/p>\n<p>public synchronized int getNewMessageCount();<\/p>\n<p>public synchronized int getUnreadMessageCount();<\/p>\n<p>public abstract javax.mail.Message getMessage(int);<\/p>\n<p>public synchronized javax.mail.Message[] getMessages(int, int);<\/p>\n<p>public synchronized javax.mail.Message[] getMessages(int[]);<\/p>\n<p>public synchronized javax.mail.Message[] getMessages();<\/p>\n<p>public javax.mail.Folder[] list();<\/p>\n<p>public javax.mail.Message[] search(javax.mail.search.SearchTerm);<\/p>\n<p>public javax.mail.Message[] search(javax.mail.search.SearchTerm, javax.mail.Message[]);<\/p>\n<p>&nbsp;<\/p>\n<p>public synchronized void addConnectionListener(javax.mail.event.ConnectionListener);<\/p>\n<p>public synchronized void removeConnectionListener(javax.mail.event.ConnectionListener);<\/p>\n<p>public synchronized void addFolderListener(javax.mail.event.FolderListener);<\/p>\n<p>public synchronized void removeFolderListener(javax.mail.event.FolderListener);<\/p>\n<p>public synchronized void addMessageCountListener(javax.mail.event.MessageCountListener);<\/p>\n<p>public synchronized void removeMessageCountListener(javax.mail.event.MessageCountListener);<\/p>\n<p>public synchronized void addMessageChangedListener(javax.mail.event.MessageChangedListener);<\/p>\n<p>public synchronized void removeMessageChangedListener(javax.mail.event.MessageChangedListener);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Foldere kan indeholde underfoldere og beskeder. Metoden getType angiver, om en folder kan indeholde andre foldere, beskeder eller begge dele. Metoden returnerer en int, indeholdende en eller begge af f\u00f8lgende v\u00e6rdier:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>HOLDS_FOLDERS\u00a0hvis folderen kan indeholde andre foldere.<\/li>\n<li>HOLDS_MESSAGES hvis folderen kan indeholde beskeder.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Metoden getDefaultFolder\u00a0returnerer roden af folderhierakiet. Man kan bruge metoden list\u00a0til at f\u00e5 en liste over alle foldere i den aktuelle folder. Denne metode returnerer et array af Folder-objekter. Hvis man vil have navnene p\u00e5 disse foldere, skal man efterf\u00f8lgende kalde getName p\u00e5 samtlige foldere. Metoderne getMessageCount, getNewMessageCount\u00a0og getUnreadMessageCount\u00a0returnerer henholdsvis antallet af beskeder, nye beskeder og ul\u00e6ste beskeder i den p\u00e5g\u00e6ldende folder.<\/p>\n<p>&nbsp;<\/p>\n<p>Nedenst\u00e5ende klasse viser, hvordan man kan liste alle foldere i roden af hierakiet og vise, hvor mange beskeder hver af dem indeholder.<\/p>\n<p>&nbsp;<\/p>\n<p>import javax.mail.*;<\/p>\n<p>import javax.mail.internet.*;<\/p>\n<p>import java.util.*;<\/p>\n<p>&nbsp;<\/p>\n<p>public class MailInfo<\/p>\n<p>{<\/p>\n<p>public static final void main (String args[]) throws Exception<\/p>\n<p>{<\/p>\n<p>Properties indstillinger = System.getProperties();<\/p>\n<p>Session session = Session.getDefaultInstance(indstillinger, null);<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Store store = session.getStore(&#8220;imap&#8221;);<\/p>\n<p>store.connect(&#8220;host.mit-domain.dk&#8221;, &#8220;bruger&#8221;, &#8220;kodeord&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>Folder folder = store.getDefaultFolder();<\/p>\n<p>if (folder == null)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;No Default Folder&#8221;);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Folder liste[] = folder.list();<\/p>\n<p>&nbsp;<\/p>\n<p>System.out.println (&#8220;Oversigt over foldere:&#8221;);<\/p>\n<p>System.out.println (&#8220;======================&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>for (int i = 0; i &lt; liste.length; i++)<\/p>\n<p>{<\/p>\n<p>System.out.println (liste[i].getName());<\/p>\n<p>System.out.println (&#8220;-&gt; Nye beskeder:\u00a0\u00a0\u00a0 &#8221; + liste[i].getNewMessageCount());<\/p>\n<p>System.out.println (&#8220;-&gt; Ul\u00e6ste beskeder: &#8221; + liste[i].getUnreadMessageCount());<\/p>\n<p>System.out.println (&#8220;-&gt; Beskeder i alt:\u00a0 &#8221; + liste[i].getMessageCount());<\/p>\n<p>}<\/p>\n<p>System.out.println (&#8220;======================&#8221;);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Folder-klassen kan ogs\u00e5 generere events. Nedenst\u00e5ende skema viser de mulige events, og hvorn\u00e5r de optr\u00e6der.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"326\" valign=\"top\">Event<\/td>\n<td width=\"326\" valign=\"top\">Beskrivelse<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">ConnectionEvent<\/td>\n<td width=\"326\" valign=\"top\">Opst\u00e5r, n\u00e5r en folder \u00e5bnes eller   lukkes.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">FolderEvent<\/td>\n<td width=\"326\" valign=\"top\">Opst\u00e5r, n\u00e5r folderen oprettes,   slettes eller omd\u00f8bes.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">MessageCountEvent<\/td>\n<td width=\"326\" valign=\"top\">Opst\u00e5r,\u00a0 n\u00e5r antallet af beskeder \u00e6ndres.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>Beskeder<\/h2>\n<p>&nbsp;<\/p>\n<p>Beskeder i en folder er nummereret fortl\u00f8bende. Typisk afspejler beskedernes numre den r\u00e6kkef\u00f8lge, de er ankommet i. Den f\u00f8rste \u2013 \u00e6ldste \u2013 besked vil s\u00e5ledes have nummer 1. Hvis beskeder bliver slettet, skal man v\u00e6re opm\u00e6rksom p\u00e5, at beskednumrene kan blive \u00e6ndret.<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man vil hente en eller flere beskeder, kan man g\u00f8re det p\u00e5 baggrund af beskedens nummer. Vil man kun hente en enkelt besked, skal man bruge metoden getMessage, der tager beskedens nummer som parameter. Hvis man vil hente flere beskeder, kan man bruge metoden getMessages. Denne returnerer et array af Message-objekter. Parametre til denne metode er den f\u00f8rste og den sidste besked identificeret ved beskedens nummer.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Ved afsendelse af beskeder, repr\u00e6senteredes beskederne af MimeMessage-klassen. Dette er ikke tilf\u00e6ldet, n\u00e5r der hentes beskeder. Her behandles alle beskeder abstrakt gennem klassen Message, og det er ikke sikkert, at man kan caste et Message-objekt til et MimeMessage-objekt. Det betyder, at man kun kan bruge de metoder, Message-klassen stiller til r\u00e5dighed. Nedenst\u00e5ende signatur viser de metoder, der findes i Message-klassen.<\/p>\n<p>&nbsp;<\/p>\n<p>public abstract class Message\u00a0extends java.lang.Object implements javax.mail.Part<\/p>\n<p>{<\/p>\n<p>public abstract javax.mail.Address getFrom();<\/p>\n<p>public abstract javax.mail.Address[] getRecipients(javax.mail.Message.RecipientType);<\/p>\n<p>public javax.mail.Address[] getAllRecipients();<\/p>\n<p>public javax.mail.Address[] getReplyTo();<\/p>\n<p>public abstract java.lang.String getSubject();<\/p>\n<p>public abstract java.util.Date getSentDate();<\/p>\n<p>public abstract java.util.Date getReceivedDate();<\/p>\n<p>public abstract javax.mail.Flags getFlags();<\/p>\n<p>public int getMessageNumber();<\/p>\n<p>public javax.mail.Folder getFolder();<\/p>\n<p>public abstract javax.mail.Message reply(boolean);<\/p>\n<p>public abstract int getSize();<\/p>\n<p>public abstract int getLineCount();<\/p>\n<p>public abstract java.lang.String getContentType();<\/p>\n<p>public abstract boolean isMimeType(java.lang.String);<\/p>\n<p>public abstract java.lang.String getDisposition();<\/p>\n<p>public abstract java.lang.String getDescription();<\/p>\n<p>public abstract java.lang.String getFileName();<\/p>\n<p>public abstract java.lang.Object getContent();<\/p>\n<p>public abstract java.lang.String[] getHeader(java.lang.String);<\/p>\n<p>public abstract java.util.Enumeration getAllHeaders();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>I ovenst\u00e5ende specifikation er kun de metoder, der bruges til at hente information om beskeden inkluderet. Klassen indeholder selvf\u00f8lgeligt tilsvarende set-metoder.<\/p>\n<p>&nbsp;<\/p>\n<p>De fleste af klassens metoder har navne, der forklarer metodernes semantik. Klassen GetMessage viser, hvordan man kan hente informationer om en besked. Klassens kildetekst ses herunder.<\/p>\n<p>&nbsp;<\/p>\n<p>import javax.mail.*;<\/p>\n<p>import javax.mail.internet.*;<\/p>\n<p>import java.text.*;<\/p>\n<p>import java.util.*;<\/p>\n<p>&nbsp;<\/p>\n<p>public class GetMessage<\/p>\n<p>{<\/p>\n<p>public static final void main(String args[])<\/p>\n<p>{<\/p>\n<p>if (args.length != 4)<\/p>\n<p>&nbsp;<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Forkert syntaks.&#8221;);<\/p>\n<p>System.out.println (&#8220;java GetMessage &lt;server&gt; &lt;brugernavn&gt; &lt;kodeord&gt; &lt;beskednummer&gt;&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>String server = args[0];<\/p>\n<p>String bruger = args[1];<\/p>\n<p>String kodeord = args[2];<\/p>\n<p>&nbsp;<\/p>\n<p>int besked = 1;<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>besked = Integer.parseInt(args[3]);<\/p>\n<p>}<\/p>\n<p>catch (NumberFormatException spe)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Ugyldigt beskednummer.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Properties indstillinger = System.getProperties();<\/p>\n<p>Session session = Session.getDefaultInstance(indstillinger, null);<\/p>\n<p>&nbsp;<\/p>\n<p>Store store = null;<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>store = session.getStore(&#8220;imap&#8221;);<\/p>\n<p>}<\/p>\n<p>catch (NoSuchProviderException nspe)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;IMAP ikke underst\u00f8ttet.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>store.connect(server, bruger, kodeord);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Det var ikke muligt at slutte til mailserveren.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Folder folder = null;<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>folder = store.getFolder(&#8220;INBOX&#8221;);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Folderen kunne ikke findes.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>folder.open(Folder.READ_ONLY);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Folderen kunne ikke \u00e5bnes.&#8221;);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Message msg = null;<\/p>\n<p>&nbsp;<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>msg = folder.getMessage (besked);<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Beskeden kunne ikke findes.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>catch (IndexOutOfBoundsException ioobe)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Ugyldigt beskednummer.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>System.out.println (&#8220;Informationer om besked nummer &#8221; + besked);<\/p>\n<p>System.out.println ();<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Titel:\u00a0\u00a0\u00a0 &#8221; + msg.getSubject());<\/p>\n<p>System.out.println (&#8220;Afsender: &#8221; + msg.getFrom());<\/p>\n<p>&nbsp;<\/p>\n<p>Address modtagere[] = msg.getAllRecipients();<\/p>\n<p>for (int i = 0; i &lt; modtagere.length; i++)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Andre modtagere: &#8221; + ((InternetAddress) modtagere[i]).getAddress());<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>System.out.println (&#8220;Afsendelsestidspunkt: &#8221; + (new SimpleDateFormat()).format(msg.getSentDate()));<\/p>\n<p>System.out.println (&#8220;Modtagelsestidspunkt: &#8221; + (new SimpleDateFormat()).format(msg.getReceivedDate()));<\/p>\n<p>}<\/p>\n<p>catch (MessagingException me)<\/p>\n<p>{<\/p>\n<p>System.out.println (&#8220;Ugyldig besked.&#8221;);<\/p>\n<p>System.exit(0);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<h1>Fremtiden<\/h1>\n<p>&nbsp;<\/p>\n<p>JavaMail er et forholdsvis ungt API, og der er allerede planlagt \u00e6ndringer i forhold til den version, der er blevet gennemg\u00e5et her.<\/p>\n<p>&nbsp;<\/p>\n<p>Eksempelvis vil der blive oprettet en metode til at konvertere Java chars til tegn i mime-tegns\u00e6ttet. Metoden kommer sandsynligvis til at ligge i klassen javax.mail.internet.MimeUtility og have f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public static String mimeCharset (String);<\/p>\n<p>&nbsp;<\/p>\n<p>Derudover vil der blive tilf\u00f8jet nogle metoder i Folder-klassen. Den f\u00f8rste er getMode, der returnerer, hvorvidt folderen er \u00e5bnet med skriverettigheder. Metoden getMode f\u00e5r sandsynligvis f\u00f8lgende signatur:<\/p>\n<p>&nbsp;<\/p>\n<p>public int getMode ()<\/p>\n<p>&nbsp;<\/p>\n<p>Der bliver ogs\u00e5 oprettet en metode ved navn getURLName. Denne returnerer en URL, der angiver den aktuelle folder. \u00a0Signaturen for den nye metode bliver nok<\/p>\n<p>&nbsp;<\/p>\n<p>public URLName getURLName () throws MessagingException<\/p>\n<p>&nbsp;<\/p>\n<p>Endeligt vil der sandsynligvis blive oprettet en f\u00e6lles superklasse for klasserne Store og Transport. Dette medf\u00f8rer ikke \u00e6ndringer i nogen af de to klasser, men g\u00f8res kun for at g\u00f8re det lettere at vedligeholde klasserne.<\/p>\n<p>&nbsp;<\/p>\n<h1>Sammenfatning<\/h1>\n<p>I dette kapitel er API\u2019et JavaMail blevet gennemg\u00e5et. Det er blevet vist, hvordan man ved hj\u00e6lp af JavaMail kan sende og modtage post. Det er ogs\u00e5 blevet beskrevet, hvordan man anvender de mere avancerede muligheder som for eksempel angivelse af mimetyper og definition af headere.<\/p>\n<p>&nbsp;<\/p>\n<p>Da JavaMail er en forholdsvis nyudviklet teknologi, er det ogs\u00e5 blevet beskrevet, hvordan man kan forvente, at JavaMail vil v\u00e6re opbygget i fremtiden.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>FAQ<\/h1>\n<p>&nbsp;<\/p>\n<h3>Er det gratis at distribuere programmer, der er baseret p\u00e5 JavaMail?<\/h3>\n<p>&nbsp;<\/p>\n<p>I \u00f8jeblikket er det. Med JavaMail-pakken f\u00f8lger filen License. Denne fil beskriver de n\u00f8jagtige retningslinier for distribution af JavaMail.<\/p>\n<p>&nbsp;<\/p>\n<h3>Hvorfor kan mit JavaMail-program ikke udf\u00f8res? Jeg f\u00e5r at vide, at den ikke kan finde en klasse startende med javax.activation.<\/h3>\n<p>&nbsp;<\/p>\n<p>JavaMail f\u00f8r brug af Java Activation Framework\u00a0(JAF). Derfor skal JAF v\u00e6re installeret, f\u00f8r JavaMail-programmerne vil virke. JAF kan downloades gratis fra Javasofts hjemmeside.<\/p>\n<p>&nbsp;<\/p>\n<h3>Kan JavaMail bruges fra JDK 1.0?<\/h3>\n<p>&nbsp;<\/p>\n<p>Nej. Man skal have JDK 1.1 eller nyere for at kunne bruge JavaMail.<\/p>\n<p>&nbsp;<\/p>\n<div style=\"border: 1px solid red; color: red\">\n<b>Du l\u00e6ser en gammel bog<\/b><br \/>\nDen bog, du l\u00e6ser her, er fra 1998, og mange ting kan have \u00e6ndret sig siden da.<br \/>\nVi h\u00e5ber, at du stadig kan finde relevant information i den.<br \/>\nHvis du vil l\u00e6se aktuelle oplysninger om de avancerede dele af Java, anbefaler vi<br \/>\nbogen <a href=\"http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0132354799)\"  target=\"_blank\">Core Java &#8211; Advanced Features<\/a><img decoding=\"async\" src=\"http:\/\/impdk.tradedoubler.com\/imp?type(inv)g(19172914)a(2029446)\" \/>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":332,"menu_order":110,"comment_status":"closed","ping_status":"open","template":"","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-425","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"keywords\" content=\"java,mail,javamail,pop3,smtp,imap,e-mail,post,e-post,programmering,udvikling\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Biblioteket | Samling af artikler og b\u00f8ger\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"JavaMail | Biblioteket\" \/>\n\t\t<meta property=\"og:description\" content=\"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2011-11-05T06:30:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2011-11-05T06:32:35+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"JavaMail | Biblioteket\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-11-javamail\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"name\":\"B\\u00f8ger\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"position\":2,\"name\":\"B\\u00f8ger\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/#listItem\",\"name\":\"Avanceret Java-programmering\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/#listItem\",\"position\":3,\"name\":\"Avanceret Java-programmering\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-11-javamail\\\/#listItem\",\"name\":\"Kapitel 11 JavaMail\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"name\":\"B\\u00f8ger\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-11-javamail\\\/#listItem\",\"position\":4,\"name\":\"Kapitel 11 JavaMail\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/#listItem\",\"name\":\"Avanceret Java-programmering\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-11-javamail\\\/#webpage\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-11-javamail\\\/\",\"name\":\"JavaMail | Biblioteket\",\"description\":\"Det er let at kommunikere via TCP\\\/IP ved hj\\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\\u00e5 videre) bygger p\\u00e5 TCP\\\/IP, og derfor er det ogs\\u00e5 relativt let at kommunikere ved hj\\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\\u2019et stiller til r\\u00e5dighed til at hente og sende post.\",\"inLanguage\":\"da-DK\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-11-javamail\\\/#breadcrumblist\"},\"datePublished\":\"2011-11-05T08:30:33+02:00\",\"dateModified\":\"2011-11-05T08:32:35+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"inLanguage\":\"da-DK\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"JavaMail | Biblioteket","description":"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.","canonical_url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/","robots":"max-image-preview:large","keywords":"java,mail,javamail,pop3,smtp,imap,e-mail,post,e-post,programmering,udvikling","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","position":1,"name":"Home","item":"https:\/\/www.kristiansborg.dk\/bibliotek","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","name":"B\u00f8ger"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","position":2,"name":"B\u00f8ger","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/#listItem","name":"Avanceret Java-programmering"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/#listItem","position":3,"name":"Avanceret Java-programmering","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/#listItem","name":"Kapitel 11 JavaMail"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","name":"B\u00f8ger"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/#listItem","position":4,"name":"Kapitel 11 JavaMail","previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/#listItem","name":"Avanceret Java-programmering"}}]},{"@type":"Organization","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/"},{"@type":"WebPage","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/#webpage","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/","name":"JavaMail | Biblioteket","description":"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.","inLanguage":"da-DK","isPartOf":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website"},"breadcrumb":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/#breadcrumblist"},"datePublished":"2011-11-05T08:30:33+02:00","dateModified":"2011-11-05T08:32:35+02:00"},{"@type":"WebSite","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","inLanguage":"da-DK","publisher":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization"}}]},"og:locale":"da_DK","og:site_name":"Biblioteket | Samling af artikler og b\u00f8ger","og:type":"article","og:title":"JavaMail | Biblioteket","og:description":"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.","og:url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/","article:published_time":"2011-11-05T06:30:33+00:00","article:modified_time":"2011-11-05T06:32:35+00:00","twitter:card":"summary","twitter:title":"JavaMail | Biblioteket","twitter:description":"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post."},"aioseo_meta_data":{"post_id":"425","title":"JavaMail | #site_title","description":"Det er let at kommunikere via TCP\/IP ved hj\u00e6lp af Java. Alle Internet-protokollerne (ftp, http, smtp, pop3 og s\u00e5 videre) bygger p\u00e5 TCP\/IP, og derfor er det ogs\u00e5 relativt let at kommunikere ved hj\u00e6lp af disse protokoller. Med JavaMail bliver det imidlertid endnu lettere, hvis man vil bruge en af de protokoller, som anvendes til at sende post. Bruger man JavaMail beh\u00f8ver man slet intet kendskab til den underliggende protokol. Man kan blot anvende de metoder, API\u2019et stiller til r\u00e5dighed til at hente og sende post.","keywords":[{"label":"Java","value":"Java"},{"label":"mail","value":"mail"},{"label":"JavaMail","value":"JavaMail"},{"label":"POP3","value":"POP3"},{"label":"SMTP","value":"SMTP"},{"label":"IMAP","value":"IMAP"},{"label":"e-mail","value":"e-mail"},{"label":"post","value":"post"},{"label":"e-post","value":"e-post"},{"label":"programmering","value":"programmering"},{"label":"udvikling","value":"udvikling"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 06:59:15","updated":"2025-06-04 02:18:22","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/\" title=\"B\u00f8ger\">B\u00f8ger<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/\" title=\"Avanceret Java-programmering\">Avanceret Java-programmering<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tKapitel 11 JavaMail\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.kristiansborg.dk\/bibliotek"},{"label":"B\u00f8ger","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/"},{"label":"Avanceret Java-programmering","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/"},{"label":"Kapitel 11 JavaMail","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-11-javamail\/"}],"_links":{"self":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/comments?post=425"}],"version-history":[{"count":4,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/425\/revisions"}],"predecessor-version":[{"id":429,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/425\/revisions\/429"}],"up":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/332"}],"wp:attachment":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/media?parent=425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}