Подтвердить что ты не робот

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

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

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

Связанный:

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

4b9b3361

Ответ 1

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

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 = "[email protected]";
String from = "[email protected]";
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/

Ответ 2

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

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

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

simplejavamail.org

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

Ответ 4

Чтобы следить за ответом jon, здесь приведен пример отправки почты с помощью simple-java-mail.

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

Простая Java Mail btw - это оболочка API JavaMail.

final Email email = new Email();

email.setFromAddress("lollypop", "[email protected]"); 
email.setSubject("hey");
email.addRecipient("C. Cane", "[email protected]", RecipientType.TO);
email.addRecipient("C. Bo", "[email protected]", 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

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

<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);

Ответ 6

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

Ответ 7

используйте библиотеку 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.

Ответ 8

Добавьте 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();
            }
        }
    }

Ответ 9

Смотрите это для отправки электронной почты с помощью API Java. В этом видео почта отправляется с вашего аккаунта Gmail. Этот метод требует включить настройку в учетной записи gmail "В -Less Secure App"

https://youtu.be/Rz3F1WSKC3U

Ответ 10

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

Загрузите эти банки:  1. Javamail  2. smtp  3. Java.mail

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

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