SMTP:简单邮件传输协议,用于发送电子邮件的传输协议.
POP3:用于接收电子邮件的标准协议.
IMAP:互联网消息访问协议,是POP3的替代协议.
这三种协议都有对应的SSL加密传输协议,分别是SMTPS,POP3S,IMAPS
javaMail的基础就不说了,来看看spring简化的发邮件的办法
1、发送简单的文本的邮件
1 private JavaMailSender sender;
2
3 public void setSender(JavaMailSender sender) {
4 this.sender = sender;
5 }
6 public void sendSimpleMail(int userId) {
7 SimpleMailMessage msg = new SimpleMailMessage();
8 msg.setFrom("wuguangcheng@gmail.com");
9 msg.setTo("wuguangcheng@gmail.com");
10 msg.setReplyTo("wuguangcheng@gmail.com");
11 msg.setCc("wuguangcheng@163.com");
12 msg.setSubject("注册成功");
13 msg.setText("您在javaeye已经注册成功!您的用户ID为:" + userId);
14 sender.send(msg);
15 }
设置一下简单的配置文件,如下:
1 <bean id="sender"
2 class="org.springframework.mail.javamail.JavaMailSenderImpl">
3 <property name="host" value="smtp.gmail.com.cn" />
4 <property name="username" value="wuguangcheng" />
5 <property name="password" value="spring" />
6 <property name="javaMailProperties">
7 <props>
8 <prop key="mail.smtp.auth">true</prop>
9 </props>
10 </property>
11 </bean>
注意一下:<prop key="mail.smtp.auth">true</prop>该属性必须设置,否则服务器不会对客户端行进行认证。
2、发送HTML类型的邮件
1 public void sendHtmlMail(int userId) throws MessagingException {
2 MimeMessage msg = sender.createMimeMessage();
3 MimeMessageHelper helper = new MimeMessageHelper(msg, false, "utf-8");
4 helper.setFrom("wuguangcheng@gmail.com");
5 helper.setTo("wuguangcheng@gmail.com");
6 helper.setSubject("注册成功");
7 String htmlText = "<html><head>"
8 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"
9 + "</head><body>" + "您在javaeye已经注册成功!您的用户ID为:"
10 + "<font size='20' size='30'>" + userId + "</font>"
11 + "<body></html>";
12 helper.setText(htmlText, true);
13 sender.send(msg);
14 }
配置文件和上面的雷同,没有什么差别。
MimeMessageHelper helper = new MimeMessageHelper(msg, false, "utf-8"); 指定编码为utf-8,同时标识为非maritipart
1 public void sendAttachmentMail() throws Exception {
2 MimeMessage msg = sender.createMimeMessage();
3 MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");//第二个参数为true,标识为maritipart类型,可以发送附件
4 helper.setFrom("wuguangcheng@gmail.com");
5 helper.setTo("wuguangcheng@gmail.com");
6 helper.setSubject("注册成功");
7 helper.setText("欢迎访问javaeye!");
8 ClassPathResource file1 = new ClassPathResource("bbt.zip");
9 helper.addAttachment("file01.zip", file1.getFile());
10 ClassPathResource file2 = new ClassPathResource("file.doc");
11 helper.addAttachment("file02.doc", file2.getFile());
12 sender.send(msg);
13 }
4、可以采用异步的方式来发送邮件
spring提供了TaskExecutor,它的很多实现类可以异步任务执行的功能。简单的配置如下。
14 <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
15 <property name="corePoolSize" value="10"/>
16 <property name="maxPoolSize" value="30"/>
17 </bean>
18 <bean id="mailService"
19 class="com.baobaotao.service.MailService">
20 <property name="sender" ref="sender" />
21 <property name="freeMarkerConfigurer" ref="freeMarkerConfigurer"/>
22 <property name="taskExecutor" ref="taskExecutor"/>
相对应的代码如下:
23 private TaskExecutor taskExecutor;
24 public void setTaskExecutor(TaskExecutor taskExecutor) {
25 this.taskExecutor = taskExecutor;
26 }
27 public void sendAsyncMail(final int userId) {
28 taskExecutor.execute(new Runnable() {
29 public void run() {
30 try {
31 sendTemplateMail(userId);
32 System.out.println("邮件发送成功!");
33 } catch (Exception e) {
34 System.out.println("邮件发送失败!,异常信息:" + e.getMessage());
35 }
36 }
37 });
38 }
5、发送邮件的开发经验:
对一个web应用系统来说,一般情况下,我们不推荐使用内嵌文件的邮件,用户大可将这些资源文件放在一台web资源服务器上,然后简单地通过URL引用这一些文件。
在实际的应用系统中,如何构造邮件内容以及如何进行邮件发送是两个特别值得关注的问题。一般可以可以通过模板技术和异步发送的方式来解决这两个问题。