Spring框架提供了許多用于發(fā)送和接收郵件的有用接口和類(lèi)。
org.springframework.mail 軟件包是在Spring框架中提供郵件支持的根軟件包。
spring框架中Java郵件支持的接口和類(lèi)如下:
MailSender接口: 它是根接口。它提供了發(fā)送簡(jiǎn)單郵件的基本功能。 JavaMailSender接口: 它是MailSender的子接口。它支持MIME消息。它主要與 MimeMessageHelper 類(lèi)一起使用,以創(chuàng)建JavaMail MimeMessage ,以及附件等。spring框架推薦使用 MimeMessagePreparator 機(jī)制來(lái)使用此接口。 JavaMailSenderImpl類(lèi): 它提供JavaMailSender接口的實(shí)現(xiàn)。它支持JavaMail MimeMessages和Spring SimpleMailMessages。 SimpleMailMessage類(lèi): 用于創(chuàng)建簡(jiǎn)單的郵件,包括從,到,抄送,主題和文本郵件。 MimeMessagePreparator接口: 它是用于準(zhǔn)備JavaMail MIME消息的回調(diào)接口。 MimeMessageHelper類(lèi): 它是用于創(chuàng)建MIME消息的幫助器類(lèi)。它支持內(nèi)聯(lián)元素,例如圖像,典型的郵件附件和HTML文本內(nèi)容。
使用兩個(gè)Spring郵件類(lèi):
SimpleMailMessage 用于創(chuàng)建消息。 JavaMailSenderImpl 用于發(fā)送消息。
您需要?jiǎng)?chuàng)建以下文件以通過(guò)Spring框架發(fā)送電子郵件。
MailMail.java applicationContext.xml Test.java 您需要加載mail.jar和activation.jar文件才能運(yùn)行此示例。
下載mail.jar和Activation.jar 或訪問(wèn)Oracle網(wǎng)站以下載最新版本。
1)MailMail.java
這是定義mailSender屬性的簡(jiǎn)單類(lèi)。在運(yùn)行時(shí)將向該屬性提供MailSender對(duì)象。
在sendMail()方法中,我們正在創(chuàng)建SimpleMailMessage的實(shí)例,并將信息(例如,從,到,主題和消息)存儲(chǔ)到該對(duì)象中。
這里使用MailSender接口的send()方法發(fā)送簡(jiǎn)單郵件。
package com.nhooo; 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文件中,我們?yōu)镴avaMailSenderImpl類(lèi)創(chuàng)建了一個(gè)bean。我們需要定義以下屬性的值:
主機(jī) 用戶(hù)名 密碼 javaMailProperties
我們還將使用mailSender屬性為MailMail類(lèi)創(chuàng)建bean?,F(xiàn)在,將在MailMail類(lèi)的mailSender屬性中設(shè)置JavaMailSenderImpl類(lèi)的實(shí)例。
<?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.nhooo.MailMail"> <property name="mailSender" ref="mailSender" /> </bean> </beans>
3)Test.java
該類(lèi)從applicationContext.xml文件獲取mailMail的bean,并調(diào)用MailMail類(lèi)的sendMail方法。
package com.nhooo; 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文件中更改用戶(hù)名和密碼屬性,并指定您的gmail ID和密碼。 在Test.java文件中更改發(fā)件人gmail ID和Receivermail ID。 編譯并運(yùn)行Test類(lèi)
如果您有自己的站點(diǎn),則可以使用郵件服務(wù)器。 MailMail.java和Test類(lèi)將相同。您只需要在Test.java文件中更改發(fā)件人電子郵件ID。在applicationContext.xml文件中需要進(jìn)行一些更改。
在applicationContext.xml文件中,我們正在使用:
mail.unitedsquaad.com作為主機(jī)名。更改它。 a@unitedsquaad.com作為用戶(hù)名。更改它。 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類(lèi)將郵件發(fā)送到多個(gè)收件人。 SimpleMailMessage類(lèi)的 setTo(String []接收者)方法用于將消息發(fā)送到多個(gè)接收者。讓我們看一下簡(jiǎn)單的代碼。
.... 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); } ...
我們可以借助MimeMessagePreparator接口發(fā)送mime消息。它有一個(gè)方法prepare(MimeMessage message)。
讓我們看一下發(fā)送mime消息的簡(jiǎn)單代碼。
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文件與上面給出的相同。
我們可以在MimeMessageHelper類(lèi)的幫助下在Spring發(fā)送帶有附件的mime消息。推薦使用MimeMessagePreparator。
讓我們看一下發(fā)送帶有附件(圖像)的mime消息的簡(jiǎn)單代碼。
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文件與上面給出的相同。