Spring教程- Spring Java Mail 教程

Spring Java Mail 教程
Spring 框架为发送和接收邮件提供了许多有用的接口和类。
org.springframework.mail 包是提供 Spring 框架中邮件支持的根包。
Spring Java Mail API
在 Spring 框架中,用于支持 Java 邮件的接口和类如下:
- MailSender 接口:它是根接口。提供发送简单邮件的基本功能。
- JavaMailSender 接口:它是 MailSender 的子接口。支持 MIME 消息。通常与 MimeMessageHelper 类一起使用,用于创建 JavaMail MimeMessage,包括附件等。Spring 框架建议使用 MimeMessagePreparator 机制来使用此接口。
- JavaMailSenderImpl 类:它提供了 JavaMailSender 接口的实现。支持 JavaMail MimeMessages 和 Spring SimpleMailMessages。
- SimpleMailMessage 类:用于创建包括发件人、收件人、抄送、主题和文本消息的简单邮件消息。
- MimeMessagePreparator 接口:这是用于准备 JavaMail MIME 消息的回调接口。
- MimeMessageHelper 类:用于创建 MIME 消息的辅助类。它支持内联元素,例如图像、典型的邮件附件和 HTML 文本内容。
在 Gmail 服务器中使用 Spring 发送邮件的示例
在此示例中,我们使用了两个 Spring 邮件类:
- SimpleMailMessage 用于创建消息。
- JavaMailSenderImpl 用于发送消息。
要通过 Spring 框架发送电子邮件,需要创建以下文件。
- MailMail.java
- applicationContext.xml
- 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。我们需要定义以下属性的值:
- host
- username
- password
- 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 文件与上面给出的内容相同。