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

Java Mail do Spring

O Spring framework oferece muitas interfaces e classes úteis para enviar e receber e-mails.

org.springframework.mail O pacote é o pacote raiz que fornece suporte ao e-mail no framework Spring.

API do Spring Java Mail

As interfaces e classes de suporte ao Java e-mail no spring framework são as seguintes:

Interface MailSender: É a interface raiz. Ela fornece funcionalidades básicas para enviar e-mails simples. Interface JavaMailSender: É uma subinterface de MailSender. Ele suporta mensagens MIME. Ele é principalmente usado com MimeMessageHelper classe juntamente para criar JavaMail MimeMessage , além de anexos etc. O spring framework recomenda usar MimeMessagePreparator Mecanismo para usar este interface. Classe JavaMailSenderImpl: Ela fornece uma implementação do interface JavaMailSender. Ela suporta MimeMessages do JavaMail e SimpleMailMessages do Spring. Classe SimpleMailMessage: Usado para criar e-mails simples, incluindo de, para, cópia, assunto e texto do e-mail. Interface MimeMessagePreparator: É uma interface de callback usada para preparar mensagens MIME do JavaMail. Classe MimeMessageHelper: É uma classe auxiliar usada para criar mensagens MIME. Ela suporta elementos inline, como imagens, anexos típicos de e-mail e conteúdo de texto HTML.

Exemplo de envio de e-mails pelo servidor Gmail no Spring

Usando duas classes de e-mail do Spring:

SimpleMailMessage Usado para criar mensagens. JavaMailSenderImpl Usado para enviar mensagens.

Você precisa criar os seguintes arquivos para enviar e-mails através do framework Spring.

MailMail.java applicationContext.xml Test.java Você precisa carregar os arquivos mail.jar e activation.jar para executar este exemplo.

Baixe o mail.jar e Activation.jar ou acesse o site da Oracle para baixar a versão mais recente.


1)MailMail.java

Esta é uma classe simples que define a propriedade mailSender. Durante a execução, um objeto MailSender será fornecido para essa propriedade.

No método sendMail(), estamos criando uma instância de SimpleMailMessage e armazenando as informações (por exemplo, de, para, assunto e mensagem) no objeto.

Aqui usamos o método send() da interface MailSender para enviar e-mails simples.

package com.w3codebox;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
 
public class MailMail{
  private MailSender mailSender;
 
  public void setMailSender(MailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(String from, String to, String subject, String msg) {
        //criando mensagem
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(msg);
        //enviando mensagem
    mailSender.send(message); 
  }
}

2)applicationContext.xml

Neste arquivo xml, criamos um bean para a classe JavaMailSenderImpl. Precisamos definir os seguintes valores das propriedades:

Mestre Nome de usuário Senha javaMailProperties

Também usaremos a propriedade mailSender para criar um bean para a classe MailMail. Agora, configuraremos a propriedade mailSender da classe MailMail com uma instância da classe JavaMailSenderImpl.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="smtp.gmail.com"} />
  <property name="username" value="[email protected]" />
  <property name="password" value="sua_senha_gmail" />
  <property name="javaMailProperties">
     <props>
              <prop key="mail.smtp.auth">true</prop>/prop>
              <prop key="mail.smtp.socketFactory.port">465</prop>
              <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
              <prop key="mail.smtp.port">465</prop>
        </props>
  </property>
</bean>
<bean id="mailMail" class="com.w3codebox.MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
</beans>

3)Test.java

Esta classe obtém o bean mailMail do arquivo applicationContext.xml e chama o método sendMail da classe MailMail.

package com.w3codebox;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test { 
public static void main(String[] args) {
  
Resource r = new ClassPathResource("applicationContext.xml");
BeanFactory b = new XmlBeanFactory(r);
MailMail m = (MailMail)b.getBean("mailMail");
String remetente = "[email protected]";//escreva aqui o ID do remetente Gmail
String destinatario = "[email protected]";//escreva aqui o ID do destinatário
m.sendMail(sender,receiver,"hi","welcome");
  
System.out.println("success");
}
}

Como executar este exemplo

Carregue o arquivo jar do spring para core e Java mail Carregue os arquivos mail.jar e activation.jar Altere as propriedades de nome de usuário e senha no arquivo applicationContext.xml e especifique seu ID de e-mail e senha do Gmail. Altere o ID de e-mail do remetente e o ID de e-mail do destinatário no arquivo Test.java. Compile e execute a classe Test


Exemplo de envio de e-mail no Spring fornecido pelo provedor de hospedagem

Se você tiver seu próprio site, você pode usar o servidor de e-mail. O arquivo MailMail.java e a classe Test serão os mesmos. Você só precisa alterar o ID de e-mail do remetente no arquivo Test.java. Algumas alterações precisam ser feitas no arquivo applicationContext.xml.

No arquivo applicationContext.xml, estamos usando:

mail.unitedsquaad.com como nome do host. Altere-o. [email protected] como nome de usuário. Altere-o. xxxxx como senha. Altere-a.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="mail.unitedsquaad.com" />
  <property name="username" value="[email protected]" />
  <property name="password" value="xxxxx" />
 
  <property name="javaMailProperties">
     <props>
              <prop key="mail.smtp.auth">true</prop>/prop>
           </props>
  </property>
</bean>
<bean id="mailMail" class="MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
 
</beans>

enviar e-mails para múltiplos destinatários

Você pode usar a classe SimpleMailMessage para enviar e-mails para múltiplos destinatários. A classe SimpleMailMessage setTo(String [] destinatários)O método é usado para enviar a mensagem para múltiplos destinatários. Vamos ver um exemplo simples de código.

      ....
  public void sendMail(String from, String[] to, String subject, String msg) {
        //criando mensagem
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);//passando array de destinatários
    message.setSubject(subject);
    message.setText(msg);
        //enviando mensagem
    mailSender.send(message); 
  }
     ...

Exemplo de MimeMessagePreparator do Spring

Podemos usar a interface MimeMessagePreparator para enviar mensagens MIME. Ela possui um método prepare(MimeMessage message).

Vamos ver um exemplo simples de código para enviar mensagens MIME.

  import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
      
    MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
          
                public void prepare(MimeMessage mimeMessage) throws Exception {
                   mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                   mimeMessage.setFrom(new InternetAddress(from));
                   mimeMessage.setSubject(subject);
                   mimeMessage.setText(msg);
                }
        };
        mailSender.send(messagePreparator);
  }
}

Os arquivos applicationContext.xml e Test.java são os mesmos que os fornecidos acima.


Enviando anexos por meio do exemplo do MimeMessageHelper do Spring

Podemos usar a classe MimeMessageHelper para enviar mensagens MIME com anexos no Spring. Recomenda-se usar MimeMessagePreparator.

Vamos ver um exemplo simples de código para enviar uma mensagem MIME com anexos (imagens).

import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
    try{
    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(msg);
    // anexar o arquivo
    FileSystemResource file = new FileSystemResource(new File("c:");/rr.jpg");
    helper.addAttachment("mybrothermage.jpg", file);//a imagem será enviada com este nome
    mailSender.send(message);
    catch(MessagingException e){e.printStackTrace();}
  }
}

Os arquivos applicationContext.xml e Test.java são os mesmos que os fornecidos acima.