Java Envoyer un e-mail


L'envoi d'e-mails à l'aide d'applications Java est très simple, mais vous devez d'abord installer l'API JavaMail et Java Activation Framework (JAF) sur votre machine.

Vous pouvez télécharger la dernière version sur JavaMail (Version 1.2).

Vous pouvez télécharger la dernière version depuis JAF (Version 1.1.1).

Téléchargez et décompressez ces fichiers. Vous trouverez de nombreux fichiers jar dans le dossier supérieur. Vous devez ajouter mail.jar et activation.jar à votre CLASSPATH.

Si vous utilisez un serveur de messagerie tiers tel que le serveur SMTP de QQ, vous pouvez consulter un exemple complet d'authentification utilisateur au bas de l'article.


Envoyer un e-mail simple

Ce qui suit est un exemple d'envoi d'un e-mail simple. Supposons que votre hôte local soit connecté au réseau.

// 文件名 SendEmail.java
 
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail
{
   public static void main(String [] args)
   {   
      // 收件人电子邮箱
      String to = "abcd@gmail.com";
 
      // 发件人电子邮箱
      String from = "web@gmail.com";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认session对象
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
 
         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));
 
         // Set To: 头部头字段
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Set Subject: 头部头字段
         message.setSubject("This is the Subject Line!");
 
         // 设置消息体
         message.setText("This is actual message");
 
         // 发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compilez et exécutez ce programme pour envoyer un simple e-mail :

$ java SendEmail
Sent message successfully....

Si vous souhaitez envoyer un e-mail à plusieurs destinataires, utilisez la méthode suivante pour spécifier plusieurs identifiants de destinataire :

void addRecipients(Message.RecipientType type,
                   Address[] addresses)
throws MessagingException

Ce qui suit est une description des paramètres :

  • type : à définir sur TO, CC ou BCC Ici CC signifie CC et BCC. signifie Secret CC y. Par exemple : Message.RecipientType.TO

  • adresses : il s'agit d'un tableau d'identifiants de messagerie. Lors de la spécification de l'ID de messagerie, vous devrez utiliser la méthode InternetAddress().


Envoyer un e-mail HTML

Ce qui suit est un exemple d'envoi d'un e-mail HTML. Supposons que votre hôte local soit connecté au réseau.

Il est très similaire à l'exemple précédent, sauf que nous utilisons la méthode setContent() pour définir le contenu en passant le deuxième paramètre à "text/html" pour spécifier le contenu HTML à envoyer.

// 文件名 SendHTMLEmail.java
 
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendHTMLEmail
{
   public static void main(String [] args)
   {
     
      // 收件人电子邮箱
      String to = "abcd@gmail.com";
 
      // 发件人电子邮箱
      String from = "web@gmail.com";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象。
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象。
         MimeMessage message = new MimeMessage(session);
 
         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));
 
         // Set To: 头部头字段
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Set Subject: 头字段
         message.setSubject("This is the Subject Line!");
 
         // 发送 HTML 消息, 可以插入html标签
         message.setContent("<h1>This is actual message</h1>",
                            "text/html" );
 
         // 发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compilez et exécutez ce programme pour envoyer un e-mail HTML :

$ java SendHTMLEmail
Sent message successfully....

Envoyer un e-mail avec pièce jointe

Voici un programme pour envoyer avec pièce jointe E -exemple de courrier. Supposons que votre hôte local soit connecté au réseau.

// 文件名 SendFileEmail.java
 
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendFileEmail
{
   public static void main(String [] args)
   {
     
      // 收件人电子邮箱
      String to = "abcd@gmail.com";
 
      // 发件人电子邮箱
      String from = "web@gmail.com";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象。
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象。
         MimeMessage message = new MimeMessage(session);
 
         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));
 
         // Set To: 头部头字段
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Set Subject: 头字段
         message.setSubject("This is the Subject Line!");
 
         // 创建消息部分
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // 消息
         messageBodyPart.setText("This is message body");
        
         // 创建多重消息
         Multipart multipart = new MimeMultipart();
 
         // 设置文本消息部分
         multipart.addBodyPart(messageBodyPart);
 
         // 附件部分
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // 发送完整消息
         message.setContent(multipart );
 
         //   发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compilez et exécutez votre programme pour envoyer un e-mail avec une pièce jointe.

$ java SendFileEmail
Sent message successfully....

Section d'authentification de l'utilisateur

Si vous devez fournir le nom d'utilisateur et le mot de passe au serveur de messagerie pour l'authentification de l'utilisateur, vous pouvez le compléter via les paramètres suivants :

 props.put("mail.smtp.auth", "true");
 props.setProperty("mail.user", "myuser");
 props.setProperty("mail.password", "mypwd");

Les autres mécanismes d'envoi d'e-mail restent les mêmes que ci-dessus.

Un exemple d'envoi d'un e-mail nécessitant une vérification du nom d'utilisateur et du mot de passe :

Cet exemple utilise le serveur de messagerie QQ comme exemple. Vous devez vous connecter à l'arrière-plan de la boîte aux lettres QQ et activer le POP3. /SMTP dans les "Paramètres" = "Compte", comme indiqué dans la figure ci-dessous :

qqmail-set2.jpg

Le code Java est le suivant :

// 需要用户名密码邮件发送实例
//文件名 SendEmail2.java
//本实例以QQ邮箱为例,你需要在qq后台设置

import java.util.Properties;

import javax.mail.Authenticator;
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.MimeMessage;

public class SendEmail2
{
   public static void main(String [] args)
   {
      // 收件人电子邮箱
      String to = "xxx@qq.com";

      // 发件人电子邮箱
      String from = "xxx@qq.com";

      // 指定发送邮件的主机为 localhost
      String host = "smtp.qq.com";  //QQ 邮件服务器

      // 获取系统属性
      Properties properties = System.getProperties();

      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);

      properties.put("mail.smtp.auth", "true");
      // 获取默认session对象
      Session session = Session.getDefaultInstance(properties,new Authenticator(){
	    public PasswordAuthentication getPasswordAuthentication()
	    {
	     return new PasswordAuthentication("xxx@qq.com", "qq邮箱密码"); //发件人邮件用户名、密码
	    }
	   });

      try{
         // 创建默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);

         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));

         // Set To: 头部头字段
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: 头部头字段
         message.setSubject("This is the Subject Line!");

         // 设置消息体
         message.setText("This is actual message");

         // 发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....from w3cschool.cc");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}