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

Tutorial Básico de Java

Controle de fluxo do Java

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Queue (Fila)

Conjuntos Map do Java

Conjuntos Set do Java

Java Entrada e Saída (I/O/O)

Reader do Java/Writer

Outros tópicos do Java

Envio de e-mail Java

Enviar e-mail usando aplicativos Java-O JavaMail é muito simples, mas antes disso, você deve instalar o JavaMail API e o Java Activation Framework (JAF) no seu computador.

  • Você pode baixar a versão mais recente do Java do site Java: JavaMail,no lado direito da página há Downloads clique nele para baixar.

  • Você pode baixar a versão mais recente do Java do site Java: JAF (versão 1.1.1).

Você também pode usar os links de download fornecidos neste site:

Baixe e extraia esses arquivos, no diretório superior recém-criado, você encontrará alguns arquivos jar dessas aplicações. Você precisa adicionar mail.jar e activation.jar Adicione o arquivo ao seu CLASSPATH.

Se você usar um servidor de e-mail de terceiros, como o servidor SMTP do QQ, consulte o exemplo completo de autenticação no final do artigo.

Enviar um e-mail simples E-mail

A seguir está um exemplo de envio de e-mail的实例。假设你的本地主机已经连接到网络。

// Nome do arquivo SendEmail.java
 
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail
{
   public static void main(String [] args)
   {   
      // Endereço de e-mail do destinatário
      String to = "[email protected]";
 
      // Endereço de e-mail do remetente
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // Obter propriedades do sistema
      Properties properties = System.getProperties();
 
      // Configurar servidor de e-mail
      properties.setProperty("mail.smtp.host", host);
 
      // Obter objeto session padrão
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // Criar objeto MimeMessage padrão
         MimeMessage message = new MimeMessage(session);
 
         // Definir De: campo de cabeçalho
         message.setFrom(new InternetAddress(from));
 
         // Definir Para: campo de cabeçalho
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Definir Assunto: campo de cabeçalho
         message.setSubject("This is the Subject Line!");
 
         // Definir corpo da mensagem
         message.setText("This is actual message");
 
         // Enviar mensagem
         Transport.send(message);
         System.out.println("Mensagem enviada com sucesso...");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile e execute este programa para enviar um e-mail simples E-mail:

$ java SendEmail
Mensagem enviada com sucesso...

Se você quiser enviar um e-Se você deseja enviar e-mail para múltiplos destinatários, use o método a seguir para especificar múltiplos IDs de destinatários:

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

A seguir está a descrição dos parâmetros:

  • type:Deve ser configurado como TO, CC ou BCC, onde CC representa cópia, e BCC representa cópia oculta. Exemplo:Message.RecipientType.TO

  • addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。

发送一封 HTML E-mail

下面是一个发送 HTML E-mail 的实例。假设你的本地主机已经连接到网络。

和上一个实例很相似,除了我们要使用 setContent() 方法来通过第二个参数为 "text/html",来设置内容来指定要发送HTML 内容。

// 文件名 SendHTMLEmail.java
 
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendHTMLEmail
{
   public static void main(String [] args)
   {
     
      // Endereço de e-mail do destinatário
      String to = "[email protected]";
 
      // Endereço de e-mail do remetente
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // Obter propriedades do sistema
      Properties properties = System.getProperties();
 
      // Configurar servidor de e-mail
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象。
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象。
         MimeMessage message = new MimeMessage(session);
 
         // Definir De: campo de cabeçalho
         message.setFrom(new InternetAddress(from));
 
         // Definir Para: campo de cabeçalho
         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" );
 
         // Enviar mensagem
         Transport.send(message);
         System.out.println("Mensagem enviada com sucesso...");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

编译并运行此程序来发送HTML e-mail:

$ java SendHTMLEmail
Mensagem enviada com sucesso...

发送带有附件的 E-mail

下面是一个发送带有附件的 E-mail的实例。假设你的本地主机已经连接到网络。

// 文件名 SendFileEmail.java
 
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendFileEmail
{
   public static void main(String [] args)
   {
     
      // Endereço de e-mail do destinatário
      String to = "[email protected]";
 
      // Endereço de e-mail do remetente
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // Obter propriedades do sistema
      Properties properties = System.getProperties();
 
      // Configurar servidor de e-mail
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象。
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象。
         MimeMessage message = new MimeMessage(session);
 
         // Definir De: campo de cabeçalho
         message.setFrom(new InternetAddress(from));
 
         // Definir Para: campo de cabeçalho
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Set Subject: 头字段
         message.setSubject("This is the Subject Line!");
 
         // 创建消息部分
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // Mensagem
         messageBodyPart.setText("Esta é a mensagem do corpo");
        
         // Criar mensagem múltipla
         Multipart multipart = new MimeMultipart();
 
         // Configurar parte da mensagem de texto
         multipart.addBodyPart(messageBodyPart);
 
         // Parte do anexo
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // Enviar mensagem completa
         message.setContent(multipart);
 
         //   Enviar mensagem
         Transport.send(message);
         System.out.println("Mensagem enviada com sucesso...");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile e execute seu programa para enviar um e-mail com anexo.

$ java SendFileEmail
Mensagem enviada com sucesso...

Parte de autenticação do usuário

Se precisar fornecer nome de usuário e senha para e-Para alcançar o objetivo de autenticação do usuário no servidor de e-mail mail, você pode completar a configuração conforme a seguir:

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

e-Outros mecanismos de envio do mail seguem a mesma lógica.

Exemplo de envio de e-mail com verificação de nome de usuário e senha:

Este exemplo usa o servidor de e-mail QQ como exemplo, você precisa ativar o POP na conta do e-mail QQ no backend de login "Configurações" => Conta3/Serviço SMTP, conforme mostrado na figura a seguir:

O e-mail QQ configura a senha através da geração de um código de autorização:

Código Java conforme a seguir:

// Exemplo de envio de e-mail com nome de usuário e senha
//Nome do arquivo SendEmail2.java
//Este exemplo usa o e-mail QQ como exemplo, você precisa configurar no backend do 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)
   {
      // Endereço de e-mail do destinatário
      String to = "[email protected]";
 
      // Endereço de e-mail do remetente
      String from = "[email protected]";
 
      // Especificar o host principal para envio de e-mail como smtp.qq.com
      String host = "smtp.qq.com";  //Servidor de e-mail QQ
 
      // Obter propriedades do sistema
      Properties properties = System.getProperties();
 
      // Configurar servidor de e-mail
      properties.setProperty("mail.smtp.host", host);
 
      properties.put("mail.smtp.auth", "true");
      // Obter objeto session padrão
      Session session = Session.getDefaultInstance(properties, new Authenticator(){
        public PasswordAuthentication getPasswordAuthentication()
        {
         return new PasswordAuthentication("[email protected]", "Código de autorização do correio qq"); //Nome de usuário do e-mail do remetente, código de autorização
        }
       });
 
      try{
         // Criar objeto MimeMessage padrão
         MimeMessage message = new MimeMessage(session);
 
         // Definir De: campo de cabeçalho
         message.setFrom(new InternetAddress(from));
 
         // Definir Para: campo de cabeçalho
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Definir Assunto: campo de cabeçalho
         message.setSubject("This is the Subject Line!");
 
         // Definir corpo da mensagem
         message.setText("This is actual message");
 
         // Enviar mensagem
         Transport.send(message);
         System.out.println("Message sent successfully....from oldtoolbag.com));
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}