Spring JavaMail傳送郵件
JavaMail的介紹
JavaMail,顧名思義,提供給開發者處理電子郵件相關的程式設計介面。它是Sun釋出的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。
雖然JavaMail是Sun的API之一,但它目前還沒有被加在標準的java開發工具包中(Java Development Kit),這就意味著你在使用前必須另外下載JavaMail檔案。除此以外,你還需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的執行很複雜,在這裡簡單的說就是JavaMail的執行必須得依賴於它的支援。在Windows 2000下使用需要指定這些檔案的路徑,在其它的作業系統上也類似。
1.郵件協議
主要包括:
SMTP協議:Simple Mail Transfer Protocol,即簡單郵件傳輸協議,用於傳送電子郵件
POP3協議:Post Office Protocol 3,即郵局協議的第三個版本,用於接收郵件
IMAP協議:Internet Message Access Protocol,即網際網路訊息訪問協議,是POP3的替代協議
2.搭建James郵件伺服器
James是Apache的一個開源專案,純Java實現
搭建James伺服器
1)下載apache-james-2.3.2.zip解壓
2)執行bin目錄下的run.bat即可啟動伺服器
3) 通過apps\james\SAR-INF\config.xml配置伺服器
一定注意:先到bin下run一道 放如非中文目錄 得再控制面板開啟Telnet客戶端
Telnet localhost 4555
3.安裝OutLook[郵件客戶端]
產品祕鑰:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT
建立使用者賬號
一、使用telnet連線James的Remote Administration Tool
二、以管理員身份登入
三、使用adduser命令新增使用者
4.配置outlook郵件客戶端
為了方便檢視,可以配置Microsoft Outlook郵件客戶端,保證James郵件伺服器是啟動狀態,啟動Microsoft Outlook.
選擇“工具”->“選項”,開啟“選項”面板。選擇“郵件設定”並點選“電子郵件賬戶”,開啟“賬號設定”面板。在“電子郵件”選項卡下新建郵件賬戶
5.案例[搭建James郵件伺服器]
需求說明:
在本機搭建James郵件伺服器,自定義伺服器的名稱。
建立兩個測試使用者。
在Microsoft Outlook中配置其中一個測試使用者為Outlook郵件賬戶
6.使用JavaMail傳送電子郵件(案例)
需求:
使用JavaMail技術,實現從A賬戶給B賬戶傳送一封電子郵件,標題為“會議通知”,郵件內容為“XX你好!請於明天下午16:00 準時到B01會議室召開技術討論會。”通過Outlook 客戶端檢視郵件程式傳送的郵件是否傳送成功
關鍵程式碼:
建立一個類EmailAuthenticator並繼承自Authenticator,並植入使用者名稱和密碼
View Code
建立Mail類設定郵件資訊:
View Code測試類:
View Code
傳送帶附件的Mail
MailWithAttachment:
View Code測試類:
View CodeapplicationContext.xml:大配置
View Code傳送帶圖片的mail
Mail.com
package cn.bdqn.pojo; import java.io.File; public class Mail { private String from; private String to; private String subject; private String content; private File file; private String fileName; public Mail(){} public Mail(String from, String to, String subject, String content, File file, String fileName){ this.from = from; this.to = to; this.subject = subject; this.content = content; this.file = file; this.fileName = fileName; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }
MailService:
package cn.bdqn.service; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import cn.bdqn.pojo.Mail; public class MailService { private JavaMailSender mailSender; public void setMailSender(JavaMailSender mailSender) { this.mailSender = mailSender; } public void sendMail(Mail mail){ try{ MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); helper.setFrom("[email protected]"); helper.setTo(mail.getTo()); helper.setSubject(mail.getSubject()); helper.setText(mail.getContent()); //(1)要直接使用帶字尾的檔名全稱, (2)需要處理中文亂碼問題 helper.addAttachment(MimeUtility.encodeWord(mail.getFileName()),mail.getFile()); mailSender.send(mimeMessage); }catch(Exception e){ e.printStackTrace(); } } }
SendMailAction:
View CodeapplicationContext.xml:大配置
<?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.1.xsd"> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="192.168.8.71"></property><!-- 伺服器 --> <property name="port" value="25"></property><!-- 埠 --> <property name="username" value="jpp"></property><!-- 使用者名稱 --> <property name="password" value="jpp"></property><!-- 密碼 --> <property name="protocol" value="smtp" ></property><!-- 協議 --> <property name="defaultEncoding" value="utf-8"></property><!-- 預設編碼 --> <property name="javaMailProperties"> <props> <!-- 設定SMTP伺服器需要使用者驗證 --> <prop key="mail.smtp.auth">true</prop> </props> </property> </bean> <bean id="mailService" class="cn.bdqn.service.MailService"> <property name="mailSender" ref="mailSender"></property> </bean> </beans>
struts.xml
View Codeweb.xml
View Codeindex.jsp
View Codesendmail_success.jsp
View Code