vjame

          優(yōu)化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數(shù)據(jù)加載中……

          使用greenmail測試發(fā)送郵件


          1、自定義異常類AccountEmailException
          public class AccountEmailException
              
          extends Exception
          {
              
          private static final long serialVersionUID = -4817386460334501672L;

              
          public AccountEmailException( String message )
              {
                  
          super( message );
              }

              
          public AccountEmailException( String message, Throwable throwable )
              {
                  
          super( message, throwable );
              }
          }

          2、發(fā)郵件的接口類
          public interface AccountEmailService
          {
              
          /**
               *         發(fā)送郵件
               *          to為接收地址,subject為郵件主題,htmlText為郵件內(nèi)容
                *   
          @author lanjh 上午10:51:45
                *   
          @return void
                *   
          @throws  拋出異常說明
               
          */
              
          void sendMail( String to, String subject, String htmlText )
                  
          throws AccountEmailException;
          }



          3、接口實(shí)現(xiàn)類
          public class AccountEmailServiceImpl
              
          implements AccountEmailService
          {
              
          //spring framework中幫助郵件發(fā)送工具類
              private JavaMailSender javaMailSender;

              
          private String systemEmail;

              
          public void sendMail( String to, String subject, String htmlText )
                  
          throws AccountEmailException
              {
                  
          try
                  {
                      
          //msg對應(yīng)著將要發(fā)送的郵件
                      MimeMessage msg = javaMailSender.createMimeMessage();
                      
          //幫助設(shè)置郵件msg相關(guān)信息
                      MimeMessageHelper msgHelper = new MimeMessageHelper( msg );
                      
          //systemEmail 系統(tǒng)郵箱設(shè)置
                      msgHelper.setFrom( systemEmail );
                      msgHelper.setTo( to );
                      msgHelper.setSubject( subject );
                      
          //true表示郵件內(nèi)容為html格式
                      msgHelper.setText( htmlText, true );

                      javaMailSender.send( msg );
                  }
                  
          catch ( MessagingException e )
                  {
                      
          throw new AccountEmailException( "Faild to send mail.", e );
                  }
              }

              
          public JavaMailSender getJavaMailSender()
              {
                  
          return javaMailSender;
              }

              
          public void setJavaMailSender( JavaMailSender javaMailSender )
              {
                  
          this.javaMailSender = javaMailSender;
              }

              
          public String getSystemEmail()
              {
                  
          return systemEmail;
              }

              
          public void setSystemEmail( String systemEmail )
              {
                  
          this.systemEmail = systemEmail;
              }
          }


          4、測試類

          public class AccountEmailServiceTest
          {
              
          private GreenMail greenMail;

              @Before
              
          public void startMailServer()
                  
          throws Exception
              {
                  greenMail 
          = new GreenMail( ServerSetup.SMTP );
                  greenMail.setUser( 
          "lanjh""******" );
                  greenMail.start();
              }

              @Test
              
          public void testSendMail()
                  
          throws Exception
              {
                  ApplicationContext ctx 
          = new ClassPathXmlApplicationContext( "account-email.xml" );
                  AccountEmailService accountEmailService 
          = (AccountEmailService) ctx.getBean( "accountEmailService" );

                  String subject 
          = "Test Subject";
                  String htmlText 
          = "<h3>Test</h3>";
                  accountEmailService.sendMail( 
          "275581963@qq.com", subject, htmlText );

                  greenMail.waitForIncomingEmail( 
          20001 );

                  Message[] msgs 
          = greenMail.getReceivedMessages();
                  assertEquals( 
          1, msgs.length );
                  assertEquals( 
          "lanjh@chinalmtc.com", msgs[0].getFrom()[0].toString() );
                  assertEquals( subject, msgs[
          0].getSubject() );
                  assertEquals( htmlText, GreenMailUtil.getBody( msgs[
          0] ).trim() );
              }

              @After
              
          public void stopMailServer()
                  
          throws Exception
              {
                  greenMail.stop();
              }
          }

          5、相關(guān)配置文件

          account-mail.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"
              xsi:schemaLocation
          ="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
          >

              
          <bean id="propertyConfigurer"
                  class
          ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                  
          <property name="location" value="classpath:account-service.properties" />
              
          </bean>

              
          <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
                  
          <property name="protocol" value="${email.protocol}" />
                  
          <property name="host" value="${email.host}" />
                  
          <property name="port" value="${email.port}" />
                  
          <property name="username" value="${email.username}" />
                  
          <property name="password" value="${email.password}" />
                  
          <property name="javaMailProperties">
                      
          <props>
                          
          <prop key="mail.${email.protocol}.auth">${email.auth}</prop>
                      
          </props>
                  
          </property>
              
          </bean>

              
          <bean id="accountEmailService"
                  class
          ="com.juvenxu.mvnbook.account.email.AccountEmailServiceImpl">
                  
          <property name="javaMailSender" ref="javaMailSender" />
                  
          <property name="systemEmail" value="${email.systemEmail}" />
              
          </bean>
          </beans>

          account-service.properties

          email.protocol=smtp
          email.host=localhost
          email.port=25
          email.username=lanjh
          email.password=*****
          email.auth=true
          email.systemEmail=lanjh@chinalmtc.com


          greenmail  api參考
          http://www.icegreen.com/greenmail/javadocs/overview-summary.html

          posted on 2011-08-14 11:15 lanjh 閱讀(2648) 評論(1)  編輯  收藏 所屬分類: Java App

          評論

          # re: 使用greenmail測試發(fā)送郵件  回復(fù)  更多評論   

          我按照上述方法寫了測試方法,只是修改了郵箱地址
          運(yùn)行后能夠給我的郵箱發(fā)送郵件,但是greenMail.getReceivedMessages();
          得到的messages[] 為0.。不知道是為什么?
          greenMail 只能接收自己個(gè)的郵件嗎?
          2012-04-01 15:32 | 禿B男勃丸
          主站蜘蛛池模板: 淮北市| 洛阳市| 孝感市| 东山县| 武冈市| 威信县| 花莲县| 文成县| 潮安县| 富平县| 应用必备| 泉州市| 洛浦县| 同江市| 家居| 古丈县| 绥芬河市| 富源县| 喀喇沁旗| 防城港市| 西盟| 晋城| 三河市| 嘉义县| 庆元县| 阳城县| 邵东县| 织金县| 砚山县| 永德县| 满洲里市| 驻马店市| 刚察县| 辽宁省| 饶河县| 乌拉特前旗| 宿州市| 青神县| 调兵山市| 大港区| 东辽县|