Jump to content

Джакарта Почта

Jakarta Mail (ранее JavaMail) — это Jakarta EE API , используемый для отправки и получения электронной почты через SMTP , POP3 и IMAP . Jakarta Mail встроен в платформу Jakarta EE, но также предоставляет дополнительный пакет для использования в Java SE . [ 1 ]

Текущая версия — 2.1.3, выпущенная 29 февраля 2024 г. [ 2 ] Существует еще одна реализация Jakarta Mail с открытым исходным кодом (GNU JavaMail), которая, хотя и поддерживает только устаревшую спецификацию JavaMail 1.3, предоставляет единственный бесплатный NNTP- сервер, который позволяет использовать эту технологию для чтения и отправки статей групп новостей .

По состоянию на 2019 год программное обеспечение известно как Jakarta Mail и является частью бренда Jakarta EE (ранее известного как Java EE ). Эталонная реализация является частью проекта Eclipse Angus .

Координаты Maven соответствующих проектов, необходимых для работы:

  • почтовый API: jakarta.mail:jakarta.mail-api:2.1.3
  • реализация почты: org.eclipse.angus:angus-mail:2.0.3
  • мультимедийные расширения: jakarta.activation:jakarta.activation-api:2.1.3

Лицензирование

[ редактировать ]

Jakarta Mail размещается как проект с открытым исходным кодом на Eclipse.org под новым названием Jakarta Mail . [ 3 ]

Большая часть исходного кода Jakarta Mail лицензируется по следующим лицензиям:

  • ЭПЛ-2.0
  • GPL-2.0 с лицензией Classpath Exception
  • Исходный код демонстрационных программ распространяется по лицензии BSD.
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();
        }
    }
}

Пример кода для отправки составных электронных писем, электронных писем в формате HTML и вложенных файлов

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";
        }
    }
}
  1. ^ «Включение JavaEE» . Проверено 12 ноября 2014 г.
  2. ^ «Домашняя страница почты Джакарты» . Проверено 5 сентября 2023 г.
  3. ^ «Почта Джакарты» . Проверено 3 сентября 2019 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 145f6bb85443e0f179c6192230960949__1711523880
URL1:https://arc.ask3.ru/arc/aa/14/49/145f6bb85443e0f179c6192230960949.html
Заголовок, (Title) документа по адресу, URL1:
Jakarta Mail - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)