Как отправить электронное письмо на Java? - PullRequest
28 голосов
/ 20 мая 2009

Мне нужно отправлять электронные письма от сервлета, работающего в Tomcat. Я всегда буду отправлять одному и тому же получателю одну и ту же тему, но с разным содержанием.

Какой простой и легкий способ отправить электронное письмо на Java?

Связанный:

Как отправить электронное письмо из приложения Java с помощью GMail?

Ответы [ 9 ]

30 голосов
/ 20 мая 2009

Вот мой код для этого:

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

// Set up the SMTP server.
java.util.Properties props = new java.util.Properties();
props.put("mail.smtp.host", "smtp.myisp.com");
Session session = Session.getDefaultInstance(props, null);

// Construct the message
String to = "you@you.com";
String from = "me@me.com";
String subject = "Hello";
Message msg = new MimeMessage(session);
try {
    msg.setFrom(new InternetAddress(from));
    msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
    msg.setSubject(subject);
    msg.setText("Hi,\n\nHow are you?");

    // Send the message.
    Transport.send(msg);
} catch (MessagingException e) {
    // Error.
}

Вы можете получить библиотеки JavaMail от Sun здесь: http://java.sun.com/products/javamail/

23 голосов
/ 20 мая 2009

JavaMail может быть немного неудобно в использовании. Если вы хотите более простое и понятное решение, взгляните на оболочку Spring для JavaMail. Справочные документы здесь:

http://static.springframework.org/spring/docs/2.5.x/reference/mail.html

Однако это означает, что вам нужен Spring в вашем приложении, если это не вариант, вы можете посмотреть на другую оболочку с открытым исходным кодом, например simple-java-mail:

simplejavamail.org

В качестве альтернативы, вы можете использовать JavaMail напрямую, но два вышеупомянутых решения являются более простыми и понятными способами отправки электронной почты на Java.

19 голосов
/ 20 мая 2009

Еще один вариант, заключающий в себе Java Mail API, - Общая почта Apache .

Из Руководства пользователя.

SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();
9 голосов
/ 20 мая 2009

Чтобы проконтролировать ответ Джона, вот пример отправки письма с использованием simple-java-mail .

Идея состоит в том, что вам не нужно знать обо всех технических (вложенных) частях, составляющих электронную почту. В этом смысле он во многом похож на обыкновенную электронную почту Apache, за исключением того, что Simple Java Mail немного проще, чем почтовый API Apache при работе с вложениями и встроенными изображениями. Почтовое средство Spring работает также хорошо, но немного неудобно в использовании (например, для него требуется анонимный внутренний класс), и, конечно, вам нужна зависимость от Spring, которая дает вам гораздо больше, чем простая библиотека почтовых сообщений, так как она была разработана на ее основе быть решением МОК.

Простая Java Mail, кстати, является оберткой вокруг JavaMail API.

final Email email = new Email();

email.setFromAddress("lollypop", "lolly.pop@somemail.com"); 
email.setSubject("hey");
email.addRecipient("C. Cane", "candycane@candyshop.org", RecipientType.TO);
email.addRecipient("C. Bo", "chocobo@candyshop.org", RecipientType.BCC); 
email.setText("We should meet up! ;)"); 
email.setTextHTML("<img src='cid:wink1'><b>We should meet up!</b><img src='cid:wink2'>");

// embed images and include downloadable attachments 
email.addEmbeddedImage("wink1", imageByteArray, "image/png");
email.addEmbeddedImage("wink2", imageDatesource); 
email.addAttachment("invitation", pdfByteArray, "application/pdf");
email.addAttachment("dresscode", odfDatasource);

new Mailer("smtp.host.com", 25, "username", "password").sendMail(email);
// or alternatively, pass in your own traditional MailSession object.
new Mailer(preconfiguredMailSession).sendMail(email);
5 голосов
/ 20 мая 2009

Обычно я определяю сеанс javamail в разделе GlobalNamingResources файла server.xml tomcat, чтобы мой код не зависел от параметров конфигурации:

<GlobalNamingResources>
    <Resource name="mail/Mail" auth="Container" type="javax.mail.Session"
              mail.smtp.host="localhost"/>
    ...
</GlobalNamingResources>

и я получаю сеанс через JNDI:

    Context context = new InitialContext();
    Session sess = (Session) context.lookup("java:comp/env/mail/Mail");

    MimeMessage message = new MimeMessage(sess);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    message.setSubject(subject, "UTF-8");
    message.setText(content, "UTF-8");
    Transport.send(message);
3 голосов
/ 20 мая 2009

JavaMail отлично подходит, если вы можете положиться на внешний SMTP-сервер. Если, однако, вам нужен собственный SMTP-сервер, взгляните на Asprin .

1 голос
/ 11 октября 2017

Добавьте java.mail jar в ваш путь к классу, если это не проект maven Добавьте приведенную ниже зависимость в ваш pom.xml, запустите код

 <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>

Ниже приведен проверенный код

import java.util.Date;
    import java.util.Properties;

    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class MailSendingDemo {
        static Properties properties = new Properties();
        static {
            properties.put("mail.smtp.host", "smtp.gmail.com");
            properties.put("mail.smtp.port", "587");
            properties.put("mail.smtp.auth", "true");
            properties.put("mail.smtp.starttls.enable", "true");
        }
        public static void main(String[] args) {
            String returnStatement = null;
            try {
                Authenticator auth = new Authenticator() {
                    public PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("yourEmailId", "password");
                    }
                };
                Session session = Session.getInstance(properties, auth);
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("yourEmailId"));            
                message.setRecipient(Message.RecipientType.TO, new InternetAddress("recepeientMailId"));
                message.setSentDate(new Date());
                message.setSubject("Test Mail");
                message.setText("Hi");
                returnStatement = "The e-mail was sent successfully";
                System.out.println(returnStatement);    
                Transport.send(message);
            } catch (Exception e) {
                returnStatement = "error in sending mail";
                e.printStackTrace();
            }
        }
    }
1 голос
/ 20 мая 2009

использовать библиотеку Java Mail

import javax.mail.*

...

Session mSession = Session.getDefaultInstance(new Properties());
Transport mTransport = null;
mTransport = mSession.getTransport("smtp");
mTransport.connect(cServer, cUser, cPass);
MimeMessage mMessage = new MimeMessage(mSession);
mTransport.sendMessage(mMessage,  mMessage.getAllRecipients());
mTransport.close();

Это усеченная версия кода, который я использую, чтобы приложение отправляло электронные письма. Очевидно, что добавление тела и получателей в сообщение перед отправкой, вероятно, подойдет вам лучше.

Расположение репозитория maven: artifactId: javax.mail, groupId: mail.

0 голосов
/ 12 марта 2014

Вот простое решение

Скачать эти банки: 1. Javamail 2. smtp 3. Java.mail

Скопируйте и вставьте следующий код из [http://javapapers.com/core-java/java-email/][1]

Изменить ToEmail, Имя пользователя и Пароль (идентификатор пользователя Gmail и Pwd)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...