第25章 Spring的其他高级技术
25.4 实例:发送E-mail
在Spring中通过org.springframework.mail.javamail.JavaMailSenderImpl类可以发送电子邮件。但在使用这个类之前需要做以下准备:
q JavaMailSenderImpl类除了需要spring.jar外,还需要activation.jar和mail.jar(这两个文件都在Spring的发行包中)。
q 如果使用MyEclipse6.x开发程序,MyEclipse自身带的javaee.jar中的某些类和mail.jar、activation.jar中的相应类冲突。因此,在本节将另建立一个Mailer工程,并只加入和Spring相关的jar包。读者也可以将javaee.jar从MyEclipse中删除。如果Web程序需要HttpServlet、Filter等类时,可以将Tomcat中的相应包加入 工程。
在做完上面的准备工作后,下面来开发一个简单的E-Mail发送程序。为了完成这个程序,需要如下三步。
(1)装配SimpleMailMessage类。在发送E-mail之前,需要指定一些必要的信息。这些信息包括收件人邮箱,发件人邮箱、标题和正文。而这些信息是通过装配SimpleMailMessage类指定的,代码如下:
<bean id="mailMessage" class="org.springframework.mail.SimpleMail Message">
<!-- 收件人邮箱 -->
<property name="to">
<value>
[email protected]</value>
</property>
<!-- 发件人邮箱 -->
<property name="from">
<value>
[email protected]</value>
</property>
<!-- 邮件主题 -->
<property name="subject">
<value>标题</value>
</property>
<!-- 邮件内容 -->
<property name="text">
<value>正文</value>
</property>
</bean>
读者可以将上面的相应信息修改成其他内容。
(2)装配JavaMailSenderImpl类。可以通过JavaMailSenderImpl类的send方法来发送邮件,但发送邮件之前,需要先装配这个类,代码如下:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMail SenderImpl">
<!-- 配置126的smtp服务器地址 -->
<property name="host">
<value>smtp.126.com</value>
</property>
<!-- 配置邮箱密码 -->
<property name="password">
<value>password</value>
</property>
<!-- 配置邮箱登录用户名 -->
<property name="username">
<value>user</value>
</property>
</bean>
在装配JavaMailSenderImpl类时设置了3个属性,host、password和username。其中host属性指定了SMTP服务器的域名(126的SMTP服务器是smtp.126.com)。password和username是为了进行SMTP验证而设置的。目前大多数邮件服务器都要求SMTP验证,也就是说,在发邮件时也得提供身份验证,以防止利用SMTP服务器发送大量垃圾邮件。关于上述3个属性的值,读者可以根据需要,指定自己E-mail所在的SMTP服务器、用户和密码。
(3)编写发送邮件的程序。这个发送邮件的程序需要SimpleMailMessage和JavaMail SenderImpl的对象实例。这两个对象实例可以使用getBean方法从装配文件中获得,代码如下。
package chapter25.mail;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplication Con- text;
import org.springframework.mail.SimpleMailMessage;
public class SendMail
{
public static void main(String[] args) throws Exception
{
ApplicationContext context = new FileSystemXmlApplicationContext ("src\\mail.xml");
JavaMailSenderImpl mailSender = (JavaMailSenderImpl)context.getBean ("mailSender");
SimpleMailMessage mailMessage = (SimpleMailMessage)context.getBean ("mailMessage");
mailSender .getJavaMailProperties().put("mail.smtp.auth", "true"); // 进行SMTP身份验证
mailSender .send(mailMessage); // 开发发送邮件
}
}
在编写上面代码时应注意,必须将mail.smtp.auth属性设为true,否则程序不会进行SMTP身份验证。经笔者测试发现,对于使用刚注册的126邮箱发邮件时,可能会抛出MailAuthenticationException异常,这可能是126的SMTP服务器的原因。读者在运行SendMail时应注意这一点,也可以使用其他的邮件服务器来测试这个程序。
原文:http://www1.huachu.com.cn/read/readbookinfo.asp?sectionid=1000001872