1. 程式人生 > >Spring JavaMail傳送郵件

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下使用需要指定這些檔案的路徑,在其它的作業系統上也類似。

   JavaMail是可選包,因此如果需要使用的話你需要首先從java.sun.com下載。目前最新版本是JavaMail1.4,使用JavaMail的時候需要Javabean Activation Framework的支援,因此你也需要下載JAF。安裝JavaMail只是需要把他們加入到CLASSPATH中去,如果你不想修改CLASSPATH的話,可以直接把他們的jar包直接copy到JAVA_HOME/lib/ext下。這樣JavaMail就安裝好了。     JavaMail包中用於處理電子郵件的核心類是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定義了一個基本的郵件會話,它需要從Properties中讀取類似於郵件伺服器,使用者名稱和密碼等資訊

 

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 Code

applicationContext.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 Code

applicationContext.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 Code

web.xml

  View Code

index.jsp

  View Code

sendmail_success.jsp

  View Code