English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di Base Java

Controllo di flusso Java

Array Java

Java orientato agli oggetti (I)

Orientamento ad oggetti Java (II)

Orientamento ad oggetti Java (III)

Gestione delle Eccezioni Java

List Java

Queue Java (coda)

Map di Java

Set di Java

Input/Output (I/O) Java

Reader/Writer Java

Altri argomenti Java

Invio email Java

Inviare email con un'applicazione Java è molto semplice, ma prima dovresti installare JavaMail API e Java Activation Framework (JAF) sul tuo computer.

  • Puoi scaricare l'ultima versione disponibile dal sito Java JavaMailApri la pagina di destra, c'è Downloads Clicca su di esso per scaricarlo.

  • Puoi scaricare l'ultima versione disponibile dal sito Java JAF (versione 1.1.1).

Puoi anche utilizzare i link di download forniti dal sito:

Scarica e decomprimi questi file, nel nuovo directory superiore creato, troverai alcuni file jar delle applicazioni. Devi aggiungere mail.jar e activation.jar Aggiungi il file al tuo CLASSPATH.

Se utilizzi un server di posta terzo come il server SMTP di QQ, puoi vedere un esempio completo di autenticazione all'articolo in fondo.

Inviare una email semplice

Di seguito è un esempio di invio di una email semplice. Supponiamo che il tuo host locale sia connesso alla rete.

// Nome del file 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 = "[email protected]";
 
      // 发件人电子邮箱
      String from = "[email protected]";
 
      // Specifica che l'host di invio dell'email è 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));
 
         // Imposta l'intestazione del destinatario: campo di intestazione
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Imposta l'intestazione del soggetto: campo di intestazione
         message.setSubject("Questo è l'intestazione del soggetto!");
 
         // Imposta il corpo del messaggio
         message.setText("Questo è il messaggio effettivo");
 
         // Invio messaggio
         Transport.send(message);
         System.out.println("Messaggio inviato con successo....");
      }catch(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compila ed esegui questo programma per inviare una semplice email:

$ java SendEmail
Messaggio inviato con successo....

Se desideri inviare una email a più destinatari, utilizza il seguente metodo per specificare più ID destinatari:

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

Di seguito è la descrizione dei parametri:

  • type:Deve essere impostato come TO, CC o BCC, dove CC rappresenta copia inoltro e BCC rappresenta copia inoltro segreta. Esempio:Message.RecipientType.TO

  • addresses: Questo è l'array dell'ID email. Quando si specifica un ID email, è necessario utilizzare il metodo InternetAddress().

Invia una E-mail HTML

Di seguito è riportato un esempio di invio di una E-mail HTML. Supponiamo che il tuo host locale sia già connesso alla rete.

È molto simile all'precedente esempio, eccetto che dobbiamo utilizzare il metodo setContent() con il secondo parametro "text/html" per impostare il contenuto e specificare il contenuto HTML da inviare.

// Nome del file 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 = "[email protected]";
 
      // 发件人电子邮箱
      String from = "[email protected]";
 
      // Specifica che l'host di invio dell'email è localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // Ottieni l'oggetto Session di default.
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // Crea l'oggetto MimeMessage di default.
         MimeMessage message = new MimeMessage(session);
 
         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));
 
         // Imposta l'intestazione del destinatario: campo di intestazione
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Imposta Subject: campo dell'intestazione
         message.setSubject("Questo è l'intestazione del soggetto!");
 
         // Invia un messaggio HTML, è possibile inserire tag HTML
         message.setContent("<h1>This is actual message</h1>",
                            "text/html");
 
         // Invio messaggio
         Transport.send(message);
         System.out.println("Messaggio inviato con successo....");
      }catch(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compila ed esegui questo programma per inviare una e-mail HTML:

$ java SendHTMLEmail
Messaggio inviato con successo....

Invio di una E-mail con allegato

Di seguito è riportato un esempio di invio di una E-mail con allegato. Supponiamo che il tuo host locale sia già connesso alla rete.

// Nome del file FileSendEmail.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 = "[email protected]";
 
      // 发件人电子邮箱
      String from = "[email protected]";
 
      // Specifica che l'host di invio dell'email è localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // Ottieni l'oggetto Session di default.
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // Crea l'oggetto MimeMessage di default.
         MimeMessage message = new MimeMessage(session);
 
         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));
 
         // Imposta l'intestazione del destinatario: campo di intestazione
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Imposta Subject: campo dell'intestazione
         message.setSubject("Questo è l'intestazione del soggetto!");
 
         // Creazione della parte del messaggio
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // Messaggio
         messageBodyPart.setText("Questo è il corpo del messaggio");
        
         // creazione messaggio multiparte
         Multipart multipart = new MimeMultipart();
 
         // impostazione parte messaggio di testo
         multipart.addBodyPart(messageBodyPart);
 
         // parte allegato
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // invio messaggio completo
         message.setContent(multipart );
 
         // invio del messaggio
         Transport.send(message);
         System.out.println("Messaggio inviato con successo....");
      }catch(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compila ed esegui il tuo programma per inviare una email con allegato.

$ java SendFileEmail
Messaggio inviato con successo....

用户认证部分

如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成:

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

e-mail其他的发送机制和上述保持一致。

需要用户名密码验证邮件发送示例:

本示例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:

QQ 邮箱通过生成授权码来设置密码:

Java 代码如下:

// 需要用户名密码邮件发送示例
//文件名 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 = "[email protected]";
 
      // 发件人电子邮箱
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 smtp.qq.com
      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("[email protected]", "qq邮箱授权码"); // 发件人邮件用户名、授权码
        }
       });
 
      try{
         // 创建默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
 
         // Set From: 头部头字段
         message.setFrom(new InternetAddress(from));
 
         // Imposta l'intestazione del destinatario: campo di intestazione
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Imposta l'intestazione del soggetto: campo di intestazione
         message.setSubject("Questo è l'intestazione del soggetto!");
 
         // Imposta il corpo del messaggio
         message.setText("Questo è il messaggio effettivo");
 
         // Invio messaggio
         Transport.send(message);
         System.out.println("Messaggio inviato con successo... da oldtoolbag.com");
      }catch(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}