API JavaMail - Envoi d'e-mails avec pièce jointe

Voici un exemple pour envoyer un e-mail avec pièce jointe depuis votre machine. Le fichier sur la machine locale estfile.txtplacé dans / home / manisha / . 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.

  • Définissez le message réel comme ci-dessous:

    messageBodyPart.setText("This is message body");
  • Créez un objet MimeMultipart. Ajoutez le messageBodyPart ci-dessus avec le message réel défini, à cet objet en plusieurs parties.

  • Ensuite, ajoutez la pièce jointe en créant un Datahandler comme suit:

    messageBodyPart = new MimeBodyPart();
    String filename = "/home/manisha/file.txt";
    DataSource source = new FileDataSource(filename);
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);
    multipart.addBodyPart(messageBodyPart);
  • 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 SendAttachmentInEmail, 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.Multipart;
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 SendAttachmentInEmail {
   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");

      // Get the Session object.
      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");

         // Create the message part
         BodyPart messageBodyPart = new MimeBodyPart();

         // Now set the actual message
         messageBodyPart.setText("This is message body");

         // Create a multipar message
         Multipart multipart = new MimeMultipart();

         // Set text message part
         multipart.addBodyPart(messageBodyPart);

         // Part two is attachment
         messageBodyPart = new MimeBodyPart();
         String filename = "/home/manisha/file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);

         // Send the complete message parts
         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 d'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 SendAttachmentInEmail.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: SendAttachmentInEmail.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: SendAttachmentInEmail

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: