Comment puis-je envoyer un e-mail en Java?


J'ai besoin d'envoyer des e-mails à partir d'un servlet exécuté dans Tomcat. Je vais toujours envoyer au même destinataire avec le même sujet, mais avec un contenu différent.

Qu'est-ce qu'un moyen simple et facile d'envoyer un e-mail en Java?

Lié:

Comment envoyer des e-mails à partir d'une application Java à l'aide de GMail?

Author: Community, 2009-05-20

9 answers

Voici mon code pour le faire:

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.
}

Vous pouvez obtenir les bibliothèques JavaMail de Sun ici: http://java.sun.com/products/javamail/

 29
Author: RichieHindle, 2009-05-19 21:12:21

JavaMail peut être un peu pénible à utiliser. Si vous voulez une solution plus simple et plus propre, jetez un œil au Spring wrapper pour JavaMail. Les documents de référence sont ici:

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

Cependant, cela signifie que vous avez besoin de Spring dans votre application, si ce n'est pas une option, vous pouvez regarder un autre wrapper opensource tel que simple-java-mail:

Simplejavamail.org

Alternativement, vous pouvez utiliser JavaMail directement, mais les deux solutions ci-dessus sont des moyens plus faciles et plus propres d'envoyer des e-mails en Java.

 23
Author: Jon, 2016-05-29 18:55:07

Une autre option qui encapsule l'API Java Mail est Commons-email d'Apache.

De leur Guide de l'utilisateur .

SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");
email.addTo("[email protected]", "John Doe");
email.setFrom("[email protected]", "Me");
email.setSubject("Test message");
email.setMsg("This is a simple test of commons-email");
email.send();
 18
Author: Steve K, 2009-05-19 21:05:51

Pour suivre la réponse de jon, voici un exemple d'envoi d'un courrier en utilisant simple-java-mail.

L'idée est que vous n'avez pas besoin de connaître toutes les parties techniques (imbriquées) qui composent un e-mail. En ce sens, c'est un peu comme commons-email d'Apache, sauf que Simple Java Mail est un peu plus simple que l'API mailing d'Apache lorsqu'il s'agit de pièces jointes et d'images intégrées. L'installation de publipostage de Spring fonctionne aussi bien mais est un peu maladroite dans l'utilisation (par exemple il nécessite une innerclass anonyme) et bien sûr, vous avez besoin d'une dépendance sur Spring qui vous donne beaucoup plus qu'une simple bibliothèque de diffusion, car c'est sa base il a été conçu pour être une solution IOC.

Simple Java Mail btw est un wrapper autour de l'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);
 9
Author: user109771, 2016-05-29 18:53:33

Je définis généralement ma session javamail dans la section GlobalNamingResources du serveur tomcat.fichier xml pour que mon code ne dépende pas des paramètres de configuration:

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

Et j'obtiens la session via 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);
 5
Author: Maurice Perry, 2009-05-19 21:13:54

JavaMail est génial si vous pouvez compter sur un serveur SMTP extérieur. Si, cependant, vous devez être votre propre serveur SMTP, alors jetez un oeil à Asprin.

 3
Author: Yishai, 2014-04-30 20:36:05

Utiliser la bibliothèque de messagerie Java

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

Il s'agit d'une version tronquée du code que j'utilise pour qu'une application envoie des e-mails. Évidemment, mettre un corps et des destinataires dans le message avant de l'envoyer va probablement mieux vous convenir.

L'emplacement du référentiel maven est artifactId: javax.mail, groupId: mail.

 1
Author: Jherico, 2009-05-19 20:57:40

Ajouter java.mail jar dans votre chemin de classe s'il s'agit d'un projet non maven Ajoutez la dépendance ci-dessous dans votre pom.xml exécute le code

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

Ci-Dessous est le code testé

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
Author: srinivas gowda, 2017-10-11 07:30:54

Voici la solution simple

Télécharger ces pots: 1. Javamail 2. SMTP 3. Java.courrier

Copiez et collez le code ci-dessous à partir de [http://javapapers.com/core-java/java-email/][1]

Modifier le ToEmail, le nom d'utilisateur et le mot de passe (ID utilisateur Gmail et Pwd)

 -1
Author: SuperSaiyan, 2014-03-12 05:56:30