Spring Java Mail 教程

Spring 框架为发送和接收邮件提供了许多有用的接口和类。

org.springframework.mail 包是提供 Spring 框架中邮件支持的根包。

Spring Java Mail API

在 Spring 框架中,用于支持 Java 邮件的接口和类如下:

springmailapi.jpg

  1. MailSender 接口:它是根接口。提供发送简单邮件的基本功能。
  2. JavaMailSender 接口:它是 MailSender 的子接口。支持 MIME 消息。通常与 MimeMessageHelper 类一起使用,用于创建 JavaMail MimeMessage,包括附件等。Spring 框架建议使用 MimeMessagePreparator 机制来使用此接口。
  3. JavaMailSenderImpl 类:它提供了 JavaMailSender 接口的实现。支持 JavaMail MimeMessages 和 Spring SimpleMailMessages。
  4. SimpleMailMessage 类:用于创建包括发件人、收件人、抄送、主题和文本消息的简单邮件消息。
  5. MimeMessagePreparator 接口:这是用于准备 JavaMail MIME 消息的回调接口。
  6. MimeMessageHelper 类:用于创建 MIME 消息的辅助类。它支持内联元素,例如图像、典型的邮件附件和 HTML 文本内容。

在 Gmail 服务器中使用 Spring 发送邮件的示例

在此示例中,我们使用了两个 Spring 邮件类:

  1. SimpleMailMessage 用于创建消息。
  2. JavaMailSenderImpl 用于发送消息。

要通过 Spring 框架发送电子邮件,需要创建以下文件。

  1. MailMail.java
  2. applicationContext.xml
  3. Test.java

您需要加载 mail.jar 和 activation.jar 文件以运行此示例。

下载 mail.jar 和 activation.jar 或前往 Oracle 网站下载最新版本。


1) MailMail.java

这是一个简单的类,定义了 mailSender 属性。在运行时,将向此属性提供 MailSender 对象。

在 sendMail() 方法中,我们创建了 SimpleMailMessage 的实例,并将信息存储到该对象中,例如发件人、收件人、主题和消息。

在这里使用了 MailSender 接口的 send() 方法来发送简单邮件。

package cn.javatiku;  
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) {  
        //creating message  
        SimpleMailMessage message = new SimpleMailMessage();  
        message.setFrom(from);  
        message.setTo(to);  
        message.setSubject(subject);  
        message.setText(msg);  
        //sending message  
        mailSender.send(message);     
    }  
}  

2) applicationContext.xml

在此 XML 文件中,我们为 JavaMailSenderImpl 类创建了一个 bean。我们需要定义以下属性的值:

  1. host
  2. username
  3. password
  4. javaMailProperties

我们还为 MailMail 类创建了一个带有 mailSender 属性的 bean。现在,JavaMailSenderImpl 类的实例将设置在 MailMail 类的 mailSender 属性中。

<?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="yourgmailid@gmail.com" />  
    <property name="password" value="yourgmailpassword" />  
    <property name="javaMailProperties">  
       <props>  
              <prop key="mail.smtp.auth">true</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="cn.javatiku.MailMail">  
    <property name="mailSender" ref="mailSender" />  
</bean>  
</beans>  

3) Test.java

此类从 applicationContext.xml 文件获取 mailMail 的 bean,并调用 MailMail 类的 sendMail 方法。

package cn.javatiku;  
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 sender="sendergmailid@gmail.com";//write here sender gmail id  
String receiver="receiveremailid@gmail.com";//write here receiver id  
m.sendMail(sender,receiver,"hi","welcome");  
      
System.out.println("success");  
}  
}  

如何运行此示例

  • 加载用于核心和 Java 邮件的 Spring jar 文件
  • 加载 mail.jar 和 activation.jar
  • 在 applicationContext.xml 文件中更改用户名和密码属性,指定您的 Gmail ID 和密码。
  • 在 Test.java 文件中更改发件人 Gmail ID 和收件人邮箱。
  • 编译并运行 Test 类

在由主机提供的服务器中使用 Spring 发送邮件的示例

如果您拥有自己的网站,可以使用您自己的邮件服务器。MailMail.java 和 Test 类保持不变。您只需在 Test.java 文件中更改发件人邮箱 ID。在 applicationContext.xml 文件中需要进行一些更改。

在 applicationContext.xml 文件中,我们使用:

- mail.unitedsquaad.com 作为主机名。请更改它。
- [a@unitedsquaad.com](mailto:a@unitedsquaad.com) 作为用户名。请更改它。
- xxxxx 作为密码。请更改它。

<?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="a@unitedsquaad.com" />  
    <property name="password" value="xxxxx" />  
   
    <property name="javaMailProperties">  
       <props>  
              <prop key="mail.smtp.auth">true</prop>  
           </props>  
    </property>  
  
</bean>  
<bean id="mailMail" class="MailMail">  
    <property name="mailSender" ref="mailSender" />  
</bean>  
   
</beans>  

发送邮件给多个收件人

您可以通过使用 SimpleMailMessage 类的 setTo(String[] receivers) 方法来将邮件发送给多个收件人。让我们看一下简单的代码。

    ....  
public void sendMail(String from, String[] to, String subject, String msg) {  
       //creating message  
    SimpleMailMessage message = new SimpleMailMessage();  
        message.setFrom(from);  
    message.setTo(to);//passing array of recipients  
    message.setSubject(subject);  
    message.setText(msg);  
       //sending message  
    mailSender.send(message);     
}  
    ...  

Spring MimeMessagePreparator 示例

我们可以通过使用 MimeMessagePreparator 接口来发送 MIME 消息。它有一个方法 prepare(MimeMessage message)。

让我们看一下用于发送 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);  
    }  
}  

applicationContext.xml 和 Test.java 文件与上面给出的内容相同。


使用 Spring MimeMessageHelper 示例发送附件

我们可以通过 MimeMessageHelper 类来发送带有附件的 MIME 消息。与 MimeMessagePreparator 相比,建议使用 MimeMessageHelper。

让我们看一下带有附件(图像)的发送 MIME 消息的简单代码。

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);  
  
        // attach the file  
        FileSystemResource file = new FileSystemResource(new File("c:/rr.jpg"));  
        helper.addAttachment("mybrothermage.jpg", file);//image will be sent by this name  
  
        mailSender.send(message);  
        }catch(MessagingException e){e.printStackTrace();}  
    }  
}  

applicationContext.xml 和 Test.java 文件与上面给出的内容相同。

标签: spring, Spring教程, Spring技术, Spring语言学习, Spring学习教程, Spring下载, Spring框架, Spring框架入门, Spring框架教程, Spring框架高级教程, Spring面试题, Spring笔试题, Spring编程思想