Spring Java邮件教程入门详解

  1. Spring Java邮件教程
  2. 在Spring发送邮件的示例
Spring框架提供了许多有用的接口和类来发送和接收邮件。
org.springframework.mail软件包是在Spring框架中提供邮件支持的根软件包。
Spring Java Mail API Spring框架中Java邮件支持的接口和类如下:
Spring Java邮件教程入门详解

文章图片
  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 com.srcmini; 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. 主办
  2. 用户名
  3. 密码
  4. javaMailProperties
我们还使用mailSender属性为MailMail类创建bean。现在, 将在MailMail类的mailSender属性中设置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="http://www.srcmini.com/smtp.gmail.com" /> < property name="username" value="http://www.srcmini.com/yourgmailid@gmail.com" /> < property name="password" value="http://www.srcmini.com/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="com.srcmini.MailMail"> < property name="mailSender" ref="mailSender" /> < /bean> < /beans>

3) Test.java
此类从applicationContext.xml文件获取mailMail的bean, 并调用MailMail类的sendMail方法。
package com.srcmini; 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"); } }

如何运行这个例子
  • 加载spring jar文件以获取核心和Java邮件
  • 加载mail.jar和activation.jar
  • 更改applicationContext.xml文件中的username和password属性, 并指定你的gmail ID和密码。
  • 更改Test.java文件中的发件人gmail ID和Receivermail ID。
  • 编译并运行测试类
下载此示例(使用myeclipse IDE开发)
由主机提供商在服务器中在Spring中发送邮件的示例
如果你有自己的站点, 则可以使用邮件服务器。 MailMail.java和Test类将是相同的。你只需要在Test.java文件中更改发件人电子邮件ID。 applicationContext.xml文件中需要进行一些更改。
在applicationContext.xml文件中, 我们正在使用:
  • mail.unitedsquaad.com作为主机名。更改。
  • 用户名a@unitedsquaad.com。更改。
  • xxxxxx作为密码。更改。
< ?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="http://www.srcmini.com/mail.unitedsquaad.com" /> < property name="username" value="http://www.srcmini.com/a@unitedsquaad.com" /> < property name="password" value="http://www.srcmini.com/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>

下载此示例(使用myeclipse IDE开发)
向多个收件人发送邮件
你可以借助SimpleMailMessage类将邮件发送到多个收件人。 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消息)。
让我们看一下发送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示例发送附件
我们可以在Spring借助MimeMessageHelper类发送带有附件的mime消息。建议比MimeMessagePreparator使用。
让我们看一下发送带有附件(图像)的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 namemailSender.send(message); }catch(MessagingException e){e.printStackTrace(); } } }

【Spring Java邮件教程入门详解】applicationContext.xml和Test.java文件与上面给出的相同。

    推荐阅读