隨筆-126  評論-247  文章-5  trackbacks-0

          前言:當然,發 email 不一定要用 Spring,直接用 javax.mail 的API 就能實現。但是由于 Spring 提供了一個發送電子郵件的高級抽象層,
          它向用戶屏蔽了底層郵件系統的一些細節,同時負責低層次的代表客戶端的資源處理。所以用 Spring 來發送 email 會省事很多和讓發郵件變的簡單許多。
          Spring郵件抽象層的主要包為org.springframework.mail。它包括了發送電子郵件的主要接口MailSender和封裝了簡單郵件屬性的值對象SimpleMailMessage。

          環境:
          Spring     2.5.6 
          Javamail  1.4.4 
          Maven     3.0.4 
          Myeclipse 8.6.1

          項目結構:


          spring-smtp-mail.xml
          <beans xmlns=http://www.springframework.org/schema/beans  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation
          ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
            
              
          <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
                 
          <!-- 服務器 -->
                  
          <property name="host" value="smtp.yeah.net" />
                  
          <!-- 端口號 -->
                  
          <property name="port" value="25" />
                  
          <!-- 用戶名 -->
                  
          <property name="username" value="fancydeepin@yeah.net" />
                  
          <!--  密碼   -->
                  
          <property name="password" value="********" />
                  
          <!-- SMTP服務器驗證 -->
                  
          <property name="javaMailProperties">
                      
          <props>
                          
          <!-- 驗證身份 -->
                         
          <prop key="mail.smtp.auth">true</prop>
                     
          </props>
                  
          </property>
              
          </bean>
              
          <!-- 
                 目前我用過的EMAIL賬號都是網易的,下面列出網易的SMTP服務器名和端口號:
                  網易郵箱          SMTP服務器     SMTP端口     POP3服務器       POP3端口
                  @126.com     smtp.126.com      25          pop3.126.com      110
                  @163.com     smtp.163.com      25          pop3.163.com      110
                  @yeah.net    smtp.yeah.net      25          pop3.yeah.net     110
              
          -->
              
              
          <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">
                 
          <!-- 發件人email -->
                  
          <property name="from" value="fancydeepin@yeah.net" />
                  
          <!-- 
                   收件人email
                  <property name="to" value="to@yeah.net" />
                  email主題(標題)
                  <property name="subject" value="Subject" />
                  email主題內容
                  <property name="text">
                    <value>ContentText</value>
                  </property>
                  
          -->
              
          </bean>
              
              
          <bean id="simpleMail" class="com.fancy.util.Email">
                  
          <property name="mailSender" ref="mailSender" />
                  
          <property name="simpleMailMessage" ref="simpleMailMessage" />
              
          </bean>
              
          </beans>

          Email.java
          package com.fancy.util;

          import org.springframework.mail.MailSender;
          import org.springframework.mail.SimpleMailMessage;
          /**
           * -----------------------------------------
           * @文件: Email.java
           * @作者: fancy
           * @郵箱: fancydeepin@yeah.net
           * @時間: 2012-6-11
           * @描述: 發送Email工具類
           * -----------------------------------------
           
          */

          public class Email {
              
              
          private MailSender mailSender;
              
          private SimpleMailMessage simpleMailMessage;
              
            
          /**
               * @方法名: sendMail 
               * @參數名:
          @param subject  郵件主題
               * @參數名:
          @param content 郵件主題內容
               * @參數名:
          @param to         收件人Email地址
               * @描述語: 發送郵件
               
          */

              
          public void sendMail(String subject, String content, String to) {
                  
                  simpleMailMessage.setSubject(subject); 
          //設置郵件主題
                  simpleMailMessage.setTo(to);             //設定收件人
                  simpleMailMessage.setText(content);  //設置郵件主題內容
                  mailSender.send(simpleMailMessage); //發送郵件
              }

               
          //Spring 依賴注入
              public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
                  
          this.simpleMailMessage = simpleMailMessage;
              }

               
          //Spring 依賴注入
              public void setMailSender(MailSender mailSender) {
                  
          this.mailSender = mailSender;
              }

          }


          Junit Test:EmailTest.java
          package com.fancy.test;

          import junit.framework.TestCase;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import com.fancy.util.Email;
          /**
           * -----------------------------------------
           * @文件: EmailTest.java
           * @作者: fancy
           * @郵箱: fancydeepin@yeah.net
           * @時間: 2012-6-11
           * @描述: Junit測試,運行將發送一封email
           * -----------------------------------------
           
          */

          public class EmailTest extends TestCase {

              
          public void testSendMail() {
                  ApplicationContext context 
          = new ClassPathXmlApplicationContext("spring-smtp-mail.xml");
                  Email mail 
          = (Email)context.getBean("simpleMail");
                  mail.sendMail(
          "Spring SMTP Mail Subject""Spring SMTP Mail Text""fancydeepin@yeah.net");
                  
          //mail.sendMail("標題", "內容", "收件人郵箱");
              }


          }


          EmailAppTest.java 也是一個測試類,跟 Junit 的 EmailTest.java 是幾乎一樣的,這里就不貼出來了,再來看下 Maven:

          pom.xml
          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation
          ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            
          <modelVersion>4.0.0</modelVersion>
            
          <groupId>com.fancy</groupId>
            
          <artifactId>spring-mail-example</artifactId>
            
          <version>1.0</version>
            
          <packaging>jar</packaging>
            
          <name>spring-mail-example</name>
            
          <url>http://maven.apache.org</url>
            
          <properties>
              
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            
          </properties>

            
          <dependencies>
            
              
          <!-- Spring framework -->
              
          <dependency>
                
          <groupId>org.springframework</groupId>
                
          <artifactId>spring</artifactId>
                
          <version>2.5.6</version>
              
          </dependency>
              
              
          <!-- Javamail API -->
              
          <dependency>
                
          <groupId>javax.mail</groupId>
                
          <artifactId>mail</artifactId>
                
          <version>1.4.4</version>
              
          </dependency>
              
              
          <dependency>
                
          <groupId>junit</groupId>
                
          <artifactId>junit</artifactId>
                
          <version>3.8.1</version>
                
          <scope>test</scope>
              
          </dependency>
              
            
          </dependencies>
          </project>

          Run 一下 EmailTest.java,稍等一會就能收到一封 Email






          OK,郵件發送成功。另外,在用網易郵箱測試的時候,發現不進行 SMTP驗證 郵件也能發送成功,曾在 Shopxx 中提到,
          如果是 Gmail 就必須配置SMTP服務器驗證,否則拋出異常,發送會失敗。



            
          posted on 2012-06-11 20:48 fancydeepin 閱讀(8240) 評論(2)  編輯  收藏

          評論:
          # re: Spring 2014-08-22 20:58 | wanglong
          ---------------------------------------------------------------------------------------------------------------------------------------  回復  更多評論
            
          # re: Spring郵件服務:Maven + Spring SMTP Mail[未登錄] 2016-04-11 13:58 | qq
          java.lang.AssertionError
          at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2120)
          at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1912)
          at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
          at javax.mail.Service.connect(Service.java:248)
          at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
          at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:306)
          at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:296)
          at com.sinoprof.fancy.util.Email.sendMail(Email.java:27)
          at com.sinoprof.test.mybatis.test.EmailTest.testSendMail(EmailTest.java:29)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
          at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
          at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
          at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
          at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
          at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
          at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
          at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
          at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
          at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
          at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
          at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
          at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
          at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
          at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
          at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
          at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
          at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
          不知道出現這個錯誤是什么原因  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 自治县| 高台县| 凤凰县| 通山县| 虹口区| 门源| 重庆市| 图片| 读书| 古浪县| 长寿区| 遂平县| 蒙阴县| 徐汇区| 徐水县| 瑞丽市| 栖霞市| 和林格尔县| 衡山县| 灌云县| 神木县| 灵川县| 孝义市| 宜州市| 财经| 福贡县| 兴隆县| 滁州市| 青龙| 双峰县| 大悟县| 张家港市| 和田市| 武安市| 临漳县| 南昌县| 凭祥市| 桐梓县| 兴安县| 兴隆县| 承德市|