API JavaMail - Envoi d'e-mails avec Inline Imagess

Voici un exemple pour envoyer un e-mail HTML depuis votre machine avec une image en ligne. Ici, nous avons utilisé le serveur JangoSMPT via lequel les e-mails sont envoyés à notre adresse e-mail de destination. La configuration est expliquée dans le chapitre Configuration de l' environnement .

Pour envoyer un e-mail avec une image intégrée, les étapes suivantes sont les suivantes:

  • Obtenez une session

  • Créez un objet MimeMessage par défaut et définissez De, À, Objet dans le message.

  • Créez un objet MimeMultipart.

  • Dans notre exemple, nous aurons une partie HTML et une image dans l'e-mail. Créez donc d'abord le contenu HTML et définissez-le dans l'objet multipart comme:

    // first part (the html)
    BodyPart messageBodyPart = new MimeBodyPart();
    String htmlText = "<H1>Hello</H1><img src=\"cid:image\">";
    messageBodyPart.setContent(htmlText, "text/html");
    // add it
    multipart.addBodyPart(messageBodyPart);
  • Ensuite, ajoutez l'image en créant un Datahandler comme suit:

    // second part (the image)
    messageBodyPart = new MimeBodyPart();
    DataSource fds = new FileDataSource(
     "/home/manisha/javamail-mini-logo.png");
    
    messageBodyPart.setDataHandler(new DataHandler(fds));
    messageBodyPart.setHeader("Content-ID", "<image>");
  • Ensuite, définissez le multipart dans le message comme suit:

    message.setContent(multipart);
  • Envoyez le message à l'aide de l'objet Transport.

Créer une classe Java

Créer un fichier de classe Java SendInlineImagesInEmail, dont le contenu est le suivant:

package com.tutorialspoint;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendInlineImagesInEmail {
   public static void main(String[] args) {
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
      final String username = "manishaspatil";//change accordingly
      final String password = "******";//change accordingly

      // Assuming you are sending email through relay.jangosmtp.net
      String host = "relay.jangosmtp.net";

      Properties props = new Properties();
      props.put("mail.smtp.auth", "true");
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.host", host);
      props.put("mail.smtp.port", "25");

      Session session = Session.getInstance(props,
         new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
               return new PasswordAuthentication(username, password);
            }
         });

      try {

         // Create a default MimeMessage object.
         Message message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(to));

         // Set Subject: header field
         message.setSubject("Testing Subject");

         // This mail has 2 part, the BODY and the embedded image
         MimeMultipart multipart = new MimeMultipart("related");

         // first part (the html)
         BodyPart messageBodyPart = new MimeBodyPart();
         String htmlText = "<H1>Hello</H1><img src=\"cid:image\">";
         messageBodyPart.setContent(htmlText, "text/html");
         // add it
         multipart.addBodyPart(messageBodyPart);

         // second part (the image)
         messageBodyPart = new MimeBodyPart();
         DataSource fds = new FileDataSource(
            "/home/manisha/javamail-mini-logo.png");

         messageBodyPart.setDataHandler(new DataHandler(fds));
         messageBodyPart.setHeader("Content-ID", "<image>");

         // add image to the multipart
         multipart.addBodyPart(messageBodyPart);

         // put everything together
         message.setContent(multipart);
         // Send message
         Transport.send(message);

         System.out.println("Sent message successfully....");

      } catch (MessagingException e) {
         throw new RuntimeException(e);
      }
   }
}

Comme nous utilisons le serveur SMTP fourni par le fournisseur hôte JangoSMTP, nous devons authentifier le nom d'utilisateur et le mot de passe. La classe javax.mail.PasswordAuthentication est utilisée pour authentifier le mot de passe.

Compiler et exécuter

Maintenant que notre classe est prête, compilons la classe ci-dessus. J'ai enregistré la classe SendInlineImagesInEmail.java dans le répertoire:/home/manisha/JavaMailAPIExercise. Nous aurions besoin des jars javax.mail.jar et activation.jar dans le classpath. Exécutez la commande ci-dessous pour compiler la classe (les deux fichiers JAR sont placés dans le répertoire / home / manisha /) à partir de l'invite de commande:

javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendInlineImagesInEmail.java

Maintenant que la classe est compilée, exécutez la commande ci-dessous pour exécuter:

java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendInlineImagesInEmail

Vérifier la sortie

Vous devriez voir le message suivant sur la console de commande:

Sent message successfully....

Comme j'envoie un e-mail à mon adresse gmail via JangoSMTP, le courrier suivant sera reçu dans la boîte de réception de mon compte gmail: