Spring Email抽象的核心是MailSender接口,MailSender的實現(xiàn)能夠通過連接Email服務器實現(xiàn)郵件發(fā)送的功能,如下圖:
創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務三沙,十載網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108

Spring自帶一個MailSender的實現(xiàn)就是JavaMailSenderImpl,它也是使用JavaMail API來發(fā)送Email,在使用之前,必須先將JavaMailSenderImpl裝配為Spring應用上下文中的一個bean,如下所示:
@Bean
public MailSender mailSender (Environment env) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(env.getProperty("mailserver.host"));
return mailSender;
} 默認情況下,JavaMailSenderImpl假設郵件服務器監(jiān)聽25端口,如果郵件服務器監(jiān)聽不同的端口,可以使用port屬性指定其端口號,在上面的mailSender()方法中添加:
mailSender.setPort(env.getProperty("mailserver.port")); 如果郵件服務器需要認證的話,還需要設置username和password:
mailSender.setUsername(env.getProperty("mailserver.username"));
mailSender.setPassword(env.getProperty("mailserver.password")); 這樣JavaMailSenderImpl已經(jīng)配置完成,到此可以創(chuàng)建自己的郵件會話,如果已經(jīng)在JNDI中配置了javax.mail.MailSession的話就沒有必要為JavaMailSenderImpl配置詳細的服務器細節(jié)了,可以配置它使用JNDI中已就緒的MailSession。
使用JndiObjectFactoryBean,可以在如下的@Bean方法中配置一個bean,它會從JNDI中查找MailSession:
@Bean
public JndiObjectFactoryBean mailSession ( ) {
JndiObjectFactoryBean jndi = new JndiObjectFactoryBean();
jndi.setJndiName("mail/Session");
jndi.setProxyInterface(MailSession.class);
jndi.setResourceRef(true);
return jndi;
}
接著可以使用Spring的<jee:jndi-lookup>元素從JNDI中獲取對象,這里可以使用<jee:jndi-lookup>來創(chuàng)建一個bean,它引用了JNDI中的郵件會話:
郵件會話準備好后,就可以將其裝配到mailSender bean中了:
@Bean
public MailSender mailSender (MailSession mailSession) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setSession(mailSession);
return mailSender;
} 通過將郵件會話裝配到JavaMailSenderImpl的session屬性中,就完全替換了原來的服務器配置,現(xiàn)在郵件會話完全通過JNDI進行配置和管理,JavaMailSenderImpl就可以專注于發(fā)送郵件而不必自己處理郵件服務器了。
接著需要將mailSender裝配到我們的業(yè)務層實現(xiàn)類中(假設為SpitterEmailServiceImpl類),如下:
@Autowired JavaMailSender mailSender;
接著想要給Spitter用戶發(fā)送Email提示他的朋友寫了新的Spittle,這時需要一個方法來發(fā)送Email,這個方法要接受Email地址和Spittle對象信息,如下方法就是使用郵件發(fā)送器完成該功能:
public void sendSimpleSpittleEmail (Stirng to, Spittle spittle) {
SimpleMailMessage message = new SimpleMailMessage();
String spitterName = spittle.getSpitter().getFullName();
message.setFrom("...@spitter.com"); // email地址
message.setTo(to);
message.setSubject("New spittle from " + spitterName);
message.setText(spitterName + "says: " + spittle.getText());
mailSender.send(message);
}
上面代碼中最后一步將消息傳遞給郵件發(fā)送器的send()方法,這樣郵件就發(fā)送出去了。
發(fā)送帶附件的Email
消息發(fā)送成功了,現(xiàn)在嘗試發(fā)送帶有附件的Email,要發(fā)送附件先要創(chuàng)建multipart類型的消息,Email由多個部分組成,其中一部分是Email體,其他部分就是附件。要發(fā)送multipart類型的Email,需要創(chuàng)建一個MIME的消息,可以從郵件發(fā)送器的createMimeMessage( )方法開始:
MimeMessage message = mailSender.createMimeMessage();
不過這里使用javax.mail.internet.MimeMessage的API相對有點繁瑣,可以使用Spring提供的MimeMessageHelper簡便操作,實例化它時將MimeMessage傳給它。
得到MimeMessageHelper實例后,就可以開始組裝Email消息了:
String spitterName = spittle.getSpitter().getFullName();
helper.setForm("...@spitter.com");
helper.setTo(to);
helper.setSubject("New spittle from " + spitterName);
helper.setText(spitterName + " says: " +spittle.getText()); 下面添加附件,以圖片為例,只要將這個資源傳遞給helper的addAttachment方法即可:
FileSystemResource image = new FileSystemResource("/file/test.png");
helper.addAttachment("test.png", image); 這里使用Spring的FileSystemResource來加載位于類路徑下的test.png,再調用addAttachment(),第一個參數(shù)是要添加到Email中附件的名稱,第二個參數(shù)是資源文件。
到這里multipart類型的Email已經(jīng)構建完成,現(xiàn)在就要使用MimeMessageHelper發(fā)送帶有附件的Email,完整代碼如下:
public void sendSpittleEmailWithAttachment (Stirng to, Spittle spittle) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
String spitterName = spittle.getSpitter().getFullName();
helper.setForm("...@spitter.com");
helper.setTo(to);
helper.setSubject("New spittle from " + spitterName);
helper.setText(spitterName + " says: " +spittle.getText());
FileSystemResource image = new FileSystemResource("/file/test.png");
helper.addAttachment("test.png", image);
mailSender.send(message);
}
到此就成功發(fā)送一個帶有附件的Email了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
新聞名稱:Java使用Spring發(fā)送郵件的實現(xiàn)代碼
文章網(wǎng)址:http://chinadenli.net/article14/piedge.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站維護、網(wǎng)站設計、定制網(wǎng)站、品牌網(wǎng)站建設、微信小程序
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)