Jakarta Mail

Jakarta Mail (formerly JavaMail) is a Jakarta EE API used to send and receive email via SMTP, POP3 and IMAP. Jakarta Mail is built into the Jakarta EE platform, but also provides an optional package for use in Java SE.[1]

The current version is 2.1.3, released on February 29, 2024.[2] Another open source Jakarta Mail implementation exists (GNU JavaMail), which -while supporting only the obsolete JavaMail 1.3 specification- provides the only free NNTP backend, which makes it possible to use this technology to read and send news group articles.

As of 2019, the software is known as Jakarta Mail, and is part of the Jakarta EE brand (formerly known as Java EE). The reference implementation is part of the Eclipse Angus project.

Maven coordinates of the relevant projects required for operation are:

  • mail API: jakarta.mail:jakarta.mail-api:2.1.3
  • mail implementation: org.eclipse.angus:angus-mail:2.0.3
  • multimedia extensions: jakarta.activation:jakarta.activation-api:2.1.3

Licensing

Jakarta Mail is hosted as an open source project on Eclipse.org under its new name Jakarta Mail.[3]

Most of the Jakarta Mail source code is licensed under the following licences:

  • EPL-2.0
  • GPL-2.0 with Classpath Exception license
  • The source code for the demo programs is licensed under the BSD license

Examples

import jakarta.mail.*;
import jakarta.mail.internet.*;

import java.time.*;
import java.util.*;

// Send a simple, single part, text/plain e-mail
public class TestEmail {
    static Clock clock = Clock.systemUTC();
    public static void main(String[] args) {

        // SUBSTITUTE YOUR EMAIL ADDRESSES HERE!
        String to = "sendToMailAddress";
        String from = "sendFromMailAddress";
        // SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!
        String host = "smtp.yourisp.invalid";

        // Create properties, get Session
        Properties props = new Properties();

        // If using static Transport.send(),
        // need to specify which host to send it to
        props.put("mail.smtp.host", host);
        // To see what is going on behind the scene
        props.put("mail.debug", "true");
        Session session = Session.getInstance(props);

        try {
            // Instantiate a message
            Message msg = new MimeMessage(session);

            //Set message attributes
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject("Test E-Mail through Java");
            Date now = Date.from(LocalDateTime.now(clock).toInstant(ZoneOffset.UTC));
            msg.setSentDate(now);

            // Set message content
            msg.setText("This is a test of sending a " +
                        "plain text e-mail through Java.\n" +
                        "Here is line 2.");

            //Send the message
            Transport.send(msg);
        } catch (MessagingException mex) {
            // Prints all nested (chained) exceptions as well
            mex.printStackTrace();
        }
    }
}

Sample Code to Send Multipart E-Mail, HTML E-Mail and File Attachments

package org.example;

import jakarta.activation.*;
import jakarta.mail.*;
import jakarta.mail.internet.*;

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

public class SendMailUsage {
    static Clock clock = Clock.systemUTC();
    public static void main(String[] args) {

        // SUBSTITUTE YOUR EMAIL ADDRESSES HERE!!!
        String to = "sendToMailAddress";
        String from = "sendFromMailAddress";
        // SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!!!
        String host = "smtpserver.yourisp.invalid";

        // Create properties for the Session
        Properties props = new Properties();

        // If using static Transport.send(),
        // need to specify the mail server here
        props.put("mail.smtp.host", host);
        // To see what is going on behind the scene
        props.put("mail.debug", "true");

        // Get a session
        Session session = Session.getInstance(props);

        try {
            // Get a Transport object to send e-mail
            Transport bus = session.getTransport("smtp");

            // Connect only once here
            // Transport.send() disconnects after each send
            // Usually, no username and password is required for SMTP
            bus.connect();
            //bus.connect("smtpserver.yourisp.net", "username", "password");

            // Instantiate a message
            Message msg = new MimeMessage(session);

            // Set message attributes
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            // Parse a comma-separated list of email addresses. Be strict.
            msg.setRecipients(Message.RecipientType.CC,
                    InternetAddress.parse(to, true));
            // Parse comma/space-separated list. Cut some slack.
            msg.setRecipients(Message.RecipientType.BCC,
                    InternetAddress.parse(to, false));

            msg.setSubject("Test E-Mail through Java");
            msg.setSentDate(Date.from(LocalDateTime.now(clock).toInstant(ZoneOffset.UTC)));

            // Set message content and send
            setTextContent(msg);
            msg.saveChanges();
            bus.sendMessage(msg, address);

            setMultipartContent(msg);
            msg.saveChanges();
            bus.sendMessage(msg, address);

            setFileAsAttachment(msg, "C:/WINDOWS/CLOUD.GIF");
            msg.saveChanges();
            bus.sendMessage(msg, address);

            setHTMLContent(msg);
            msg.saveChanges();
            bus.sendMessage(msg, address);

            bus.close();

        } catch (MessagingException mex) {
            // Prints all nested (chained) exceptions as well
            mex.printStackTrace();
            // How to access nested exceptions
            while (null != mex.getNextException()) {
                // Get next exception in chain
                Exception ex = mex.getNextException();
                ex.printStackTrace();
                if (!(ex instanceof MessagingException)) break;
                else mex = (MessagingException) ex;
            }
        }
    }

    // A simple, single-part text/plain e-mail.
    public static void setTextContent(Message msg) throws MessagingException {
        // Set message content
        String mytxt = "This is a test of sending a " +
                       "plain text e-mail through Java.\n" +
                       "Here is line 2.";
        msg.setText(mytxt);

        // Alternate form
        msg.setContent(mytxt, "text/plain");

    }

    // A simple multipart/mixed e-mail. Both body parts are text/plain.
    public static void setMultipartContent(Message msg) throws MessagingException {
        // Create and fill first part
        MimeBodyPart p1 = new MimeBodyPart();
        p1.setText("This is part one of a test multipart e-mail.");

        // Create and fill second part
        MimeBodyPart p2 = new MimeBodyPart();
        // Here is how to set a charset on textual content
        p2.setText("This is the second part", "us-ascii");

        // Create the Multipart.  Add BodyParts to it.
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(p1);
        mp.addBodyPart(p2);

        // Set Multipart as the message's content
        msg.setContent(mp);
    }

    // Set a file as an attachment.  Uses JAF FileDataSource.
    public static void setFileAsAttachment(Message msg, String filename)
            throws MessagingException {

        // Create and fill first part
        MimeBodyPart p1 = new MimeBodyPart();
        p1.setText("This is part one of a test multipart e-mail." +
                   "The second part is file as an attachment");

        // Create second part
        MimeBodyPart p2 = new MimeBodyPart();

        // Put a file in the second part
        FileDataSource fds = new FileDataSource(filename);
        p2.setDataHandler(new DataHandler(fds));
        p2.setFileName(fds.getName());

        // Create the Multipart.  Add BodyParts to it.
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(p1);
        mp.addBodyPart(p2);

        // Set Multipart as the message's content
        msg.setContent(mp);
    }

    // Set a single part HTML content.
    // Sending data of any type is similar.
    public static void setHTMLContent(Message msg) throws MessagingException {

        String html = "<html><head><title>" +
                      msg.getSubject() +
                      "</title></head><body><h1>" +
                      msg.getSubject() +
                      "</h1><p>This is a test of sending an HTML e-mail" +
                      " through Java.</body></html>";

        // HTMLDataSource is a static nested class
        msg.setDataHandler(new DataHandler(new HTMLDataSource(html)));
    }

    /*
     * Static nested class to act as a JAF datasource to send HTML e-mail content
     */
    static class HTMLDataSource implements DataSource {
        private String html;

        public HTMLDataSource(String htmlString) {
            html = htmlString;
        }

        // Return html string in an InputStream.
        // A new stream must be returned each time.
        public InputStream getInputStream() throws IOException {
            if (null == html) throw new IOException("Null HTML");
            return new ByteArrayInputStream(html.getBytes());
        }

        public OutputStream getOutputStream() throws IOException {
            throw new IOException("This DataHandler cannot write HTML");
        }

        public String getContentType() {
            return "text/html";
        }

        public String getName() {
            return "JAF text/html dataSource to send e-mail only";
        }
    }
}

References

  1. ^ "JavaEE inclusion". Retrieved 12 Nov 2014.
  2. ^ "Jakarta Mail Home Page". Retrieved 5 September 2023.
  3. ^ "Jakarta Mail". Retrieved 3 Sep 2019.

Read other articles:

العلاقات الروسية المنغولية   منغوليا   روسيا السفارات سفارة روسيا في منغوليا   السفير : إسكندر أزيزوف[1] سفارة منغوليا في روسيا   السفير : شوخيرييْن ألتانغيريل[2] تعديل مصدري - تعديل   العلاقات الروسية المنغولية هي العلاقات الثنائية بين ج�...

 

Artikel ini bukan mengenai Kereta api Madiun Jaya Ekspres. Kereta api Madiun Ekspres singgah di stasiun Mojokerto. KA Madiun Ekspres merupakan KA eksekutif, dan bisnis tujuan Madiun-Surabaya PP. KA Madiun Ekspres berhenti di beberapa stasiun besar, antara lain Nganjuk, Kertosono, Jombang, dan Mojokerto. Stamformasi kereta ini hingga akhir operasionalnya ialah, 2 kereta bisnis (K2), 1 kereta makan pembangkit (KMP), 1 kereta eksekutif (K1), dan lokomotif BB301. Kereta api ini berangkat menuju S...

 

2 Tawarikh 10Kitab Tawarikh (Kitab 1 & 2 Tawarikh) lengkap pada Kodeks Leningrad, dibuat tahun 1008.KitabKitab 2 TawarikhKategoriKetuvimBagian Alkitab KristenPerjanjian LamaUrutan dalamKitab Kristen14← pasal 9 pasal 11 → 2 Tawarikh 10 (atau II Tawarikh 10, disingkat 2Taw 10) adalah bagian dari Kitab 2 Tawarikh dalam Alkitab Ibrani dan Perjanjian Lama di Alkitab Kristen. Dalam Alkitab Ibrani termasuk dalam bagian Ketuvim (כְּתוּבִים, tulisan).[1][2] Te...

Cet article est une ébauche concernant un physicien chinois. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Bei ShizhangBei Shizhang en 1930FonctionsMembre du comité national de la conférence consultative politique du peuple chinois3e comité national de la conférence consultative politique du peuple chinois (d)Député6e Assemblée nationale populaire (en)5e Assemblée nationale populaire (en)4e Assemblée...

 

Pleione in the Pleiades is a shell star. A shell star is a star having a spectrum that shows extremely broad absorption lines, plus some very narrow absorption lines. They typically also show some emission lines, usually from the Balmer series but occasionally of other lines. The broad absorption lines are due to rapid rotation of the photosphere, the emission lines from an equatorial disk, and the narrow absorption lines are produced when the disc is seen nearly edge-on. Shell stars have spe...

 

Geoff Stults nel 2018 Geoffrey Manton Stults (Detroit, 15 dicembre 1977) è un attore ed ex giocatore di football americano statunitense. Indice 1 Biografia 2 Football americano 3 Filmografia parziale 3.1 Cinema 3.2 Televisione 4 Doppiatori italiani 5 Altri progetti 6 Collegamenti esterni Biografia Cresciuto in Colorado, si trasferisce a Los Angeles e comincia a recitare a teatro mentre studia allo Whittier College. Giocatore di football professionista, ha giocato come ricevitore nei Klostern...

هنودمعلومات عامةنسبة التسمية الهند التعداد الكليالتعداد قرابة 1.21 مليار[1][2]تعداد الهند عام 2011ق. 1.32 مليار[3]تقديرات عام 2017ق. 30.8 مليون[4]مناطق الوجود المميزةبلد الأصل الهند البلد الهند  الهند نيبال 4,000,000[5] الولايات المتحدة 3,982,398[6] الإمار...

 

Headland in Sydney, New South Wales, Australia 33°51′9″S 151°14′45″E / 33.85250°S 151.24583°E / -33.85250; 151.24583 Location of the antagonist's Sydney residence in Mission: Impossible 2. The house itself has been removed. Bradleys Head is a headland protruding from the north shore of Sydney Harbour, within the metropolitan area of Sydney, New South Wales, Australia. It is named after the First Fleet naval officer William Bradley. The original Aboriginal i...

 

本文或本章節是關於未來的公共运输建設或計划。未有可靠来源的臆測內容可能會被移除,現時內容可能與竣工情況有所出入。 此条目讲述中国大陆處於施工或详细规划阶段的工程。设计阶段的資訊,或許与竣工后情況有所出入。无可靠来源供查证的猜测会被移除。 设想中的三条路线方案[1]。 臺灣海峽隧道或臺湾海峡橋隧(英語:Taiwan Strait Tunnel Project)是一项工程�...

Para el circuito permanente, véase Circuito de Shanghái. Circuito Urbano de Shanghái Trazado actualUbicación Shanghái, China 31°13′16″N 121°32′38″E / 31.22111, 121.54389Coordenadas 31°13′16″N 121°32′38″E / 31.22111111, 121.54388889Eventos DTMLongitud 3,1 kmCurvas 9[editar datos en Wikidata] El Circuito Urbano de Shanghái fue un circuito no permanente situado en el distrito de Pudong, cerca del distrito financiero de Shanghá...

 

                                            الثقافة الأعلام والتراجم الجغرافيا التاريخ الرياضيات العلوم المجتمع التقانات الطيران الأديان فهرس البوابات ولاية وهران (بالفرنسية: Wilaya d'Oran)‏ (بالإنجليزية: Oran Province)‏ (تنطق باللهجة المحلي...

 

2000 song by Demon & 2021 song by DJ Snake You Are My HighSingle by Demon vs. Heartbreakerfrom the EP You Are My High Released16 January 2000 (2000-01-16)Recorded1999Genre French house Length3:475:28 (Extended Version)Label 20000st Records Small Songwriter(s) Demon Heartbreaker Charlie Wilson Johnsye Andrea Smith Ronnie Wilson Producer(s)Demon, HeartbreakerDemon singles chronology Midnight Funk (1999) You Are My High (2000) Don't Make Me Cry (2002) You Are My High is a ...

Australian multicultural radio network For other uses, see SBS Radio (disambiguation). SBS RadioMelbourne and SydneyBroadcast areaAustralia (national) via AM, FM, DAB+, digital TV, online and satelliteFrequencyVariousBrandingSBS AudioProgrammingLanguage(s)EnglishVariousFormatMultilingual programmingSubchannelsSBS ChillSBS PopAsiaSBS Arabic 24SBS South AsianOwnershipOwnerSpecial Broadcasting ServiceHistoryFirst air date9 June 1975; 49 years ago (1975-06-09) (as 2EA, 3EA)[...

 

2024年スケートアメリカ アレン・イベントセンター大会概要英語 2024 Skate America大会種 ISUグランプリシリーズ優勝ポイント 400シーズン 2024-2025日程 10月18日 - 10月20日主催 アメリカフィギュアスケート連盟、国際スケート連盟開催国 アメリカ合衆国開催地 アレン会場 アレン・イベントセンター賞金総額 US$ 180,000.00公式サイト 公式サイト前回優勝者男子前回優勝 イ�...

 

Patriarch of Alexandria from 412 to 444 For other people with the same name, see Pope Cyril of Alexandria (disambiguation). SaintCyril of AlexandriaSt Cyril of Alexandria, Patriarch, and ConfessorArchdioceseAlexandriaSeeAlexandriaPredecessorTheophilus of AlexandriaSuccessorPope Dioscorus I of AlexandriaPersonal detailsBornc. 376Didouseya, Province of Egypt, Byzantine EmpireDied444 (aged 67–68)Alexandria, Province of Egypt, Byzantine EmpireSainthoodFeast day18 January and 9 Ju...

American activist (1928–2024) For other people named James Lawson, see James Lawson (disambiguation). James LawsonLawson in 2005BornJames Morris Lawson Jr.(1928-09-22)September 22, 1928Uniontown, Pennsylvania, U.S.DiedJune 9, 2024(2024-06-09) (aged 95)Los Angeles, California, U.S.Education Baldwin Wallace University (BA) Oberlin College Vanderbilt University Boston University (STB) Occupation(s)Activist, professor, ministerKnown forNashville sit-ins James Morris Lawson Jr. (Septem...

 

2004 studio album by Hugh CornwellBeyond Elysian FieldsStudio album by Hugh CornwellReleased4 October 2004Recorded2003StudioLooking Glass, New YorkTruck Farm, New OrleansGenre Alternative rock post-punk Length43:29LabelInvisible Hands MusicProducer Tony Visconti Danny Kadar Hugh Cornwell chronology In the Dock(2003) Beyond Elysian Fields(2004) Hooverdam(2008) Beyond Elysian Fields is the sixth studio album by Hugh Cornwell, released by Invisible Hands Music on 4 October 2004[1 ...

 

1546–1547 conflict in the Holy Roman Empire For the 1552 Princes' Revolt, see Second Schmalkaldic War. Schmalkaldic WarPart of European wars of religionTitian's Equestrian Portrait of Charles V (1548) celebrates Charles's victory at the Battle of Mühlberg.Date10 July 1546 – 23 May 1547LocationHoly Roman EmpireResult Imperial victory[1] Capitulation of Wittenberg: Schmalkaldic League dissolved, Saxon electoral dignity passed to the Albertine House of WettinBelligerents  Holy ...

Scottish surgeon (1795–1860) James BraidJames Braid, 1854Born(1795-06-19)19 June 1795Portmoak, Kinross-shire, ScotlandDied25 March 1860(1860-03-25) (aged 64)Chorlton-on-Medlock, Manchester, EnglandAlma materUniversity of EdinburghKnown forSurgeryhypnotismScientific careerFieldsMedicinenatural historyInstitutionsRoyal College of Surgeons of EdinburghWernerian Natural History Society Hypnosis Applications Age regression in therapy Animal magnetism Hypnotherapy Stage hypnosis Se...

 

Bust Eugène Auguste Nicolas Millon (24 April 1812 – 22 October 1867) was a French chemist and physician. He is remembered in the name of Millon's reagent which reacts with tyrosine in proteins to form a brown precipitate. The reagent is used for determination of the presence of soluble proteins. Millon was born in Saint-Seine-l'Abbaye and after his education, he taught briefly at the Collège Rollin after before training in medicine at the military hospital at Val-de-Grâce from 1832 to 18...