vjame

          優化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數據加載中……

          使用greenmail測試發送郵件


          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、發郵件的接口類
          public interface AccountEmailService
          {
              
          /**
               *         發送郵件
               *          to為接收地址,subject為郵件主題,htmlText為郵件內容
                *   
          @author lanjh 上午10:51:45
                *   
          @return void
                *   
          @throws  拋出異常說明
               
          */
              
          void sendMail( String to, String subject, String htmlText )
                  
          throws AccountEmailException;
          }



          3、接口實現類
          public class AccountEmailServiceImpl
              
          implements AccountEmailService
          {
              
          //spring framework中幫助郵件發送工具類
              private JavaMailSender javaMailSender;

              
          private String systemEmail;

              
          public void sendMail( String to, String subject, String htmlText )
                  
          throws AccountEmailException
              {
                  
          try
                  {
                      
          //msg對應著將要發送的郵件
                      MimeMessage msg = javaMailSender.createMimeMessage();
                      
          //幫助設置郵件msg相關信息
                      MimeMessageHelper msgHelper = new MimeMessageHelper( msg );
                      
          //systemEmail 系統郵箱設置
                      msgHelper.setFrom( systemEmail );
                      msgHelper.setTo( to );
                      msgHelper.setSubject( subject );
                      
          //true表示郵件內容為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、相關配置文件

          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 閱讀(2647) 評論(1)  編輯  收藏 所屬分類: Java App

          評論

          # re: 使用greenmail測試發送郵件  回復  更多評論   

          我按照上述方法寫了測試方法,只是修改了郵箱地址
          運行后能夠給我的郵箱發送郵件,但是greenMail.getReceivedMessages();
          得到的messages[] 為0.。不知道是為什么?
          greenMail 只能接收自己個的郵件嗎?
          2012-04-01 15:32 | 禿B男勃丸
          主站蜘蛛池模板: 林西县| 沛县| 开原市| 靖宇县| 咸丰县| 弋阳县| 汤阴县| 石狮市| 孟津县| 砀山县| 阿克| 永善县| 济源市| 柳州市| 上虞市| 乌拉特前旗| 尉氏县| 准格尔旗| 安平县| 宜昌市| 山西省| 平邑县| 顺义区| 惠安县| 手游| 双城市| 汉寿县| 类乌齐县| 巨鹿县| 宿迁市| 上犹县| 新化县| 揭西县| 三都| 读书| 芜湖县| 彭水| 昌宁县| 大冶市| 浦江县| 五家渠市|