一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java使用Spring發送郵件的實現代碼

Java使用Spring發送郵件的實現代碼

2020-08-24 10:34weknow619 Java教程

本篇文章主要介紹了使用Spring發送郵件的實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Spring Email抽象的核心是MailSender接口,MailSender的實現能夠通過連接Email服務器實現郵件發送的功能,如下圖:

Java使用Spring發送郵件的實現代碼

Spring自帶一個MailSender的實現就是JavaMailSenderImpl,它也是使用JavaMail API來發送Email,在使用之前,必須先將JavaMailSenderImpl裝配為Spring應用上下文中的一個bean,如下所示:

?
1
2
3
4
5
6
@Bean
public MailSender mailSender (Environment env) {
  JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
  mailSender.setHost(env.getProperty("mailserver.host")); 
  return mailSender;
}

默認情況下,JavaMailSenderImpl假設郵件服務器監聽25端口,如果郵件服務器監聽不同的端口,可以使用port屬性指定其端口號,在上面的mailSender()方法中添加:

?
1
mailSender.setPort(env.getProperty("mailserver.port"));

如果郵件服務器需要認證的話,還需要設置username和password:

?
1
2
mailSender.setUsername(env.getProperty("mailserver.username"));
mailSender.setPassword(env.getProperty("mailserver.password"));

這樣JavaMailSenderImpl已經配置完成,到此可以創建自己的郵件會話,如果已經在JNDI中配置了javax.mail.MailSession的話就沒有必要為JavaMailSenderImpl配置詳細的服務器細節了,可以配置它使用JNDI中已就緒的MailSession。

使用JndiObjectFactoryBean,可以在如下的@Bean方法中配置一個bean,它會從JNDI中查找MailSession:

?
1
2
3
4
5
6
7
8
@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>來創建一個bean,它引用了JNDI中的郵件會話:

 

復制代碼 代碼如下:

<jee:jndi-lookup id="mailSession" jndi-name="mail/Session" resource-ref="true">

 

郵件會話準備好后,就可以將其裝配到mailSender bean中了:

?
1
2
3
4
5
6
@Bean
public MailSender mailSender (MailSession mailSession) {
  JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
  mailSender.setSession(mailSession); 
  return mailSender;
}

通過將郵件會話裝配到JavaMailSenderImpl的session屬性中,就完全替換了原來的服務器配置,現在郵件會話完全通過JNDI進行配置和管理,JavaMailSenderImpl就可以專注于發送郵件而不必自己處理郵件服務器了。

接著需要將mailSender裝配到我們的業務層實現類中(假設為SpitterEmailServiceImpl類),如下:

?
1
2
@Autowired
JavaMailSender mailSender;

接著想要給Spitter用戶發送Email提示他的朋友寫了新的Spittle,這時需要一個方法來發送Email,這個方法要接受Email地址和Spittle對象信息,如下方法就是使用郵件發送器完成該功能:

?
1
2
3
4
5
6
7
8
9
public void sendSimpleSpittleEmail (Stirng to, Spittle spittle) {
  SimpleMailMessage message = new SimpleMailMessage();
  String spitterName = spittle.getSpitter().getFullName();
  message.setFrom("[email protected]"); // email地址
  message.setTo(to);
  message.setSubject("New spittle from " + spitterName);
  message.setText(spitterName + "says: " + spittle.getText());
  mailSender.send(message);
}

上面代碼中最后一步將消息傳遞給郵件發送器的send()方法,這樣郵件就發送出去了。

發送帶附件的Email

消息發送成功了,現在嘗試發送帶有附件的Email,要發送附件先要創建multipart類型的消息,Email由多個部分組成,其中一部分是Email體,其他部分就是附件。要發送multipart類型的Email,需要創建一個MIME的消息,可以從郵件發送器的createMimeMessage( )方法開始:

?
1
MimeMessage message = mailSender.createMimeMessage();

不過這里使用javax.mail.internet.MimeMessage的API相對有點繁瑣,可以使用Spring提供的MimeMessageHelper簡便操作,實例化它時將MimeMessage傳給它。

 

復制代碼 代碼如下:

MimeMessageHelper helper = new MimeMessageHelper(message, true);  // true表示是multipart類型

 

得到MimeMessageHelper實例后,就可以開始組裝Email消息了:

?
1
2
3
4
5
String spitterName = spittle.getSpitter().getFullName();
helper.setForm("[email protected]");
helper.setTo(to);
helper.setSubject("New spittle from " + spitterName);
helper.setText(spitterName + " says: " +spittle.getText());

下面添加附件,以圖片為例,只要將這個資源傳遞給helper的addAttachment方法即可:

?
1
2
FileSystemResource image = new FileSystemResource("/file/test.png");
helper.addAttachment("test.png", image);

這里使用Spring的FileSystemResource來加載位于類路徑下的test.png,再調用addAttachment(),第一個參數是要添加到Email中附件的名稱,第二個參數是資源文件。

到這里multipart類型的Email已經構建完成,現在就要使用MimeMessageHelper發送帶有附件的Email,完整代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
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("[email protected]");
  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);
}

到此就成功發送一個帶有附件的Email了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/weknow619/p/6500764.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 小早川怜子亚洲综合中文字幕 | 秀婷程仪公欲息肉婷在线观看 | 成人小视频在线观看 | 91久久福利国产成人精品 | 99精品国产综合久久久久 | 毛片免费网站 | 五月最新商场女厕所高跟嘘嘘 | 精品国产一区二区三区久久影院 | 国产第一福利影院 | 麻豆网站在线观看 | 色综合色狠狠天天久久婷婷基地 | 饭冈加奈子黑人解禁在线播放 | 爆操美女在线观看 | 日本高清在线不卡 | 欧美色fx性乌克兰 | 国产精品久久久 | 青青青青青国产免费手机看视频 | 美女福利视频网站 | 国产91精品久久久久久 | 范冰冰上面好大下面好紧 | 欧美一区二区三区高清不卡tv | 视频一区二区在线 | 天天射寡妇射 | 色啪久久婷婷综合激情 | 日韩视频在线精品视频免费观看 | 色批网站www | 日本天堂影院在线播放 | 亚洲激情视频在线 | 校园纯肉H教室第一次 | 男生和女生搞逼逼 | 久久精品国产亚洲AV天美18 | 亚洲欧美天堂综合久久 | 国产精品亚洲片夜色在线 | 2012在线观看免费视频大全 | 波多野结衣女教师在线观看 | 四虎影院免费视频 | 婚前试爱免费观看 | www.麻豆| 亚洲第成色999久久网站 | 精品亚洲麻豆1区2区3区 | yy111111免费观看 |