???發送郵件需要通過驗證,我們需要建立一個帶有實現了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 閱讀(473)
評論(0) 編輯 收藏 所屬分類:
Spring