posts - 28,  comments - 15,  trackbacks - 0

          ???發送郵件需要通過驗證,我們需要建立一個帶有實現了Authenticator的Session.我們應該了解,在用Java編寫JavaMail時是需要使用的驗證的,但是,在Spring中沒有提供注入驗證實現的功能(即注入Authenticator的實現).但是我們可以用以下方式加以實現,下面就以gmail郵件為例說明:
          ???在Spring中的配置信息如下:

          <?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.0.xsd">
          
                  <!-- our Authenticator implementation -->
          	<bean id="smtpAuthenticator"
          		class="forums.mailtest.SmtpAuthenticator">
          		<constructor-arg value="yourname@gmail.com" />
          		<constructor-arg value="password" />
          	</bean>
          
                  <!-- now setup an authenticated session -->
          	<bean id="mailSession" class="javax.mail.Session"
          		factory-method="getInstance">
          		<constructor-arg>
          			<props>
          				<prop key="mail.smtp.auth">true</prop>
          				<prop key="mail.smtp.socketFactory.port">465</prop>
          				<prop key="mail.smtp.socketFactory.class">
          					javax.net.ssl.SSLSocketFactory
          				</prop>
          				<prop key="mail.smtp.socketFactory.fallback">
          					false
          				</prop>
          			</props>
          		</constructor-arg>
          		<constructor-arg ref="smtpAuthenticator" />
          	</bean>
          
                  <!-- and configure the MailSender with the authenticated session -->
          	<bean id="mailSender"
          		class="org.springframework.mail.javamail.JavaMailSenderImpl">
          		<property name="host" value="smtp.gmail.com" />
          		<property name="session" ref="mailSession" />
          	</bean>
          
          	<!-- this is a template message that we can pre-load with default state -->
          	<bean id="templateMessage"
          		class="org.springframework.mail.SimpleMailMessage">
          		<property name="from" value="yourname@gmail.com" />
          		<property name="subject" value="Testing" />
          	</bean>
          
          	<bean id="mailTest" class="forums.mailtest.MailTest">
          		<constructor-arg ref="mailSender" />
          		<constructor-arg ref="templateMessage" />
          	</bean>
          </beans>

          實現我們自己的驗證實現
          package forums.mailtest;
          
          import javax.mail.Authenticator;
          import javax.mail.PasswordAuthentication;
          
          public class SmtpAuthenticator extends Authenticator {
          	private String username;
          	private String password;
          	
          	public SmtpAuthenticator(String username, String password) {
          		super();
          		this.username = username;
          		this.password = password;
          	}
          
          	public PasswordAuthentication getPasswordAuthentication() {
                          return new PasswordAuthentication(username, password);
          	}
          }
          ???編寫測試類發送郵件:
          package forums.mailtest;
          
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.mail.MailException;
          import org.springframework.mail.MailSender;
          import org.springframework.mail.SimpleMailMessage;
          
          public class MailTest {
          	private MailSender mailSender;
          	private SimpleMailMessage templateMessage;
          	public MailTest(MailSender mailSender, SimpleMailMessage templateMessage) {
          		super();
          		this.mailSender = mailSender;
          		this.templateMessage = templateMessage;
          	}
          	
          	public void sendMeMail() {
          		SimpleMailMessage msg = new SimpleMailMessage(templateMessage);
          		msg.setTo("test@example.com");
          		msg.setText("This is a test.\nGo Spring!\n");
          		try {
          			this.mailSender.send(msg);
          		} catch (MailException e) {
          			System.err.println("Didn't work.");
          			e.printStackTrace();
          		}
          	}
          	
          	public static final void main(String[] args) {
          		ApplicationContext appCtx = new ClassPathXmlApplicationContext(new String[] {
          				"forums/mailtest/application-config.xml"
          		});
          		
          		MailTest tester = (MailTest) appCtx.getBean("mailTest");
          		tester.sendMeMail();
          	}
          }

          ???對于gmail端口的設置可以參考:http://mail.google.com/support/bin/a...y?answer=13287,個人認為yahoo和 gmail 都希望我們使用驗證,并且我們可以為每個郵件服務器設置不同的端口.如果沒有采用驗證,與gmail的連接將會拋出一個沒有驗證信息的異常!
          posted on 2006-06-08 19:05 zhangxl 閱讀(475) 評論(0)  編輯  收藏 所屬分類: Spring
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(17)

          隨筆檔案(28)

          文章分類(30)

          文章檔案(30)

          相冊

          收藏夾(2)

          hibernate

          java基礎

          mysql

          xml

          關注

          壓力測試

          算法

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 96415
          • 排名 - 601

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 太仓市| 临桂县| 临武县| 平昌县| 安陆市| 台山市| 靖远县| 阜新市| 乌兰察布市| 江源县| 前郭尔| 随州市| 英超| 息烽县| 和林格尔县| 马鞍山市| 乐东| 阿尔山市| 成都市| 班玛县| 南靖县| 大化| 浦江县| 高州市| 姚安县| 福海县| 宣武区| 静安区| 株洲市| 永川市| 齐河县| 南昌县| 涟水县| 江西省| 西安市| 板桥市| 确山县| 集安市| 桃园市| 寻乌县| 喀喇沁旗|