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 com.yapf;
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。我们需要定义以下属性的值:
- 主机
- 用户名
- 密码
- 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="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="com.yapf.mailmail">
<property name="mailsender" ref="mailsender" />
</bean>
</beans>
3)test.java
该类从applicationcontext.xml文件获取mailmail的bean,并调用mailmail类的sendmail方法。
package com.yapf;
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");
}
}
如何运行此示例
- 为core和java邮件加载spring jar文件
- 加载mail.jar和activation.jar
- 在applicationcontext.xml文件中更改用户名和密码属性,并指定您的gmail id和密码。
- 在test.java文件中更改发件人gmail id和receivermail id。
- 编译并运行test类
由主机提供商提供的服务器在spring中发送邮件的示例
如果您有自己的站点,则可以使用邮件服务器。 mailmail.java和test类将相同。您只需要在test.java文件中更改发件人电子邮件id。在applicationcontext.xml文件中需要进行一些更改。
在applicationcontext.xml文件中,我们正在使用:
- mail.unitedsquaad.com作为主机名。更改它。
- 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类将邮件发送到多个收件人。 simplemailmessage类的 setto(string []接收者)方法用于将消息发送到多个接收者。让我们看一下简单的代码。
....
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类的帮助下在spring发送带有附件的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 name
mailsender.send(message);
}catch(messagingexception e){e.printstacktrace();}
}
}
applicationcontext.xml和test.java文件与上面给出的相同。


