商务综合管理-day6 javaMail,spring整合javaMail

时间:2022-11-02 05:43:49

概念和协议

SMTP:Simple Message Transfer Protocal发送协议 默认端口:25
POP:Post Office Protocal邮局协议。接收协议 默认端口:110


1.   邮件发送的过程

商务综合管理-day6 javaMail,spring整合javaMail

2.   邮件发送的相关API

3.   邮件发送的工具类MailUtil的提取

public class MailUtil {


/**
* 发送电子邮件
* @param addr 收件人地址
* @param subject 主题
* @param text 内容
* @throws MessagingException
*/
public static void sendMail(String addr,String subject,String text) throws MessagingException{
Properties props=new Properties();
props.put("mail.smtp.host","smtp.sina.com");
props.put("mail.smtp.auth","true");
Session session=Session.getInstance(props);
//构造信息体 
MimeMessage message =new MimeMessage(session);
//发件地址 
Address address = new InternetAddress("wwwitcastcn@sina.com");
message.setFrom(address);
//收件地址 
Address toAddress = new InternetAddress(addr);
message.setRecipient(MimeMessage.RecipientType.TO, toAddress);
//主题 
message.setSubject(subject);
//正文 
message.setText(text);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("smtp.sina.com", "wwwitcastcn@sina.com", "itcast"); //发送 
transport.sendMessage(message, message.getAllRecipients());
transport.close();

}

}


4.   Spring对javaMail的支持

Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和其对象SimpleMailMessage,它封装了简单邮件的属性如fromto,ccsubject,text。 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象。 要获得关于邮件异常层次的更丰富的信息。


为了使用JavaMail中的一些特色, 比如MIME类型的信件, spring提供了MailSender的一个子接口, 即org.springframework.mail.javamail.JavaMailSender。Spring还提供了一个回调接口org.springframework.mail.javamail.MimeMessagePreparator, 用于准备JavaMail的MIME信件。

这里简单的介绍了如何使用spring发送各种形式的邮件以及配置。

商务综合管理-day6 javaMail,spring整合javaMail

1、在src目录下建立mail.properties文件里边包含一下内容

mail.host=smtp.qq.com

mail.username=你的邮箱名
mail.password=你的邮箱密码
mail.from=发送方的邮箱

2、使用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"

          xmlns:p="http://www.springframework.org/schema/p"

          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

 

 <!-- 加载Properties文件 --> 

    <beanid="configurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

        <propertyname="locations"> 

            <list> 

                <value>classpath:mail.properties</value> 

            </list> 

        </property> 

    </bean> 

    <beanid="mailMessage"class="org.springframework.mail.SimpleMailMessage"> 

        <propertyname="from"> 

            <value>${mail.from}</value> 

        </property> 

        <!--查看SimpleMailMessage源码还可以注入标题,内容等 --> 

    </bean> 

    <!-- 申明JavaMailSenderImpl对象 --> 

    <beanid="mailSender"class="org.springframework.mail.javamail.JavaMailSenderImpl"> 

        <propertyname="defaultEncoding"value="UTF-8"/> 

        <propertyname="host"value="${mail.host}"/> 

        <propertyname="username"value="${mail.username}"/> 

        <propertyname="password"value="${mail.password}"/> 

        <propertyname="javaMailProperties"> 

            <props> 

                <!--设置认证开关 --> 

                <propkey="mail.smtp.auth">true</prop> 

                <!--启动调试开关 --> 

                <propkey="mail.debug">true</prop> 

                <!--设置发送延时 -->

                <propkey="mail.smtp.timeout">0</prop>

            </props> 

        </property> 

    </bean> 

</beans>

 

 

5.   发送简单邮件

importjavax.mail.MessagingException;
 
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.mail.MailSender;
importorg.springframework.mail.SimpleMailMessage;
 
/**
 * 本类测试邮件发送Html形式
 * 
 * @author Eternity_._
 * 
 */
public class SingleMailSend {
 
 
      static ApplicationContext actx = new ClassPathXmlApplicationContext(
                         "applicationContext.xml");
      static MailSender sender = (MailSender) actx.getBean("mailSender");
      static SimpleMailMessage mailMessage = (SimpleMailMessage) actx.getBean("mailMessage");
      public static voidmain(String args[]) throws MessagingException {          
               mailMessage.setSubject("你好");
               mailMessage.setText("这个是一个通过Spring框架来发送邮件的小程序");
               mailMessage.setTo("9197****1@qq.com");
               sender.send(mailMessage);
      }
}

 

 

6.   发送带有图片的邮件,以嵌入HTML的方式

importjava.io.File;
 
importjavax.mail.MessagingException;
importjavax.mail.internet.MimeMessage;
 
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.core.io.FileSystemResource;
importorg.springframework.mail.javamail.JavaMailSenderImpl;
importorg.springframework.mail.javamail.MimeMessageHelper;
 
public class SpringAttachedImageMail {
 
      public static voidmain(String[] args) throws MessagingException {
 
               ApplicationContext ctx = new ClassPathXmlApplicationContext(
                                  "applicationContext.xml");
               JavaMailSenderImpl sender = (JavaMailSenderImpl) ctx
                                  .getBean("mailSender");
               MimeMessage mailMessage = sender.createMimeMessage();
               MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
               messageHelper.setFrom("9197****1@qq.com");
               messageHelper.setTo("9197****1@qq.com");
 
               messageHelper.setSubject("测试邮件中嵌套图片!");
               // true 表示启动HTML格式的邮件
               messageHelper.setText(
                                  "<html><head></head><body><h1>hello!!spring image html mail</h1>"
                                            +"<a href=http://www.baidu.com>baidu</a>"  + "<img src=cid:image/></body></html>", true);
 
                FileSystemResource img = new FileSystemResource(new File(".png"));
 
               messageHelper.addInline("image", img);//cid一致
 
               sender.send(mailMessage);
               System.out.println("邮件发送成功...");
 
      }
}

 

 

7.   发送带附件的邮件

importjava.io.File;
 
importjavax.mail.MessagingException;
importjavax.mail.internet.MimeMessage;
 
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.core.io.FileSystemResource;
importorg.springframework.mail.javamail.JavaMailSenderImpl;
importorg.springframework.mail.javamail.MimeMessageHelper;
 
public class SpringAttachedImageMail {
 
      public static voidmain(String[] args) throws MessagingException {
 
               ApplicationContext ctx = new ClassPathXmlApplicationContext(
                                  "applicationContext.xml");
               JavaMailSenderImpl sender = (JavaMailSenderImpl) ctx
                                  .getBean("mailSender");
               MimeMessage mailMessage = sender.createMimeMessage();
               MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
               messageHelper.setFrom("9197****1@qq.com");
               messageHelper.setTo("9197****1@qq.com");
 
               messageHelper.setSubject("测试邮件中嵌套图片!");
               // true 表示启动HTML格式的邮件
               messageHelper.setText(
                                  "<html><head></head><body><h1>hello!!spring image html mail</h1>"
                                            +"<a href=http://www.baidu.com>baidu</a>"  + "<img src=cid:image/></body></html>", true);
 
               FileSystemResource img = new FileSystemResource(new File(".png"));
 
               messageHelper.addAttachment(".png", file);//添加到附件
 
               sender.send(mailMessage);
               System.out.println("邮件发送成功...");
 
      }
}

 

 

8.   用户注册时的邮件发送

public void saveOrUpdate(User entity) {

           if(UtilFuns.isEmpty(entity.getId())){

                 //说明是新增

                 String id = UUID.randomUUID().toString();

                 entity.setId(id);

                 entity.getUserInfo().setId(id);//基于一对一的主键关联

                

                 //引入Shiro后,进行密码的初始化

                 entity.setPassword(Encrypt.md5(SysConstant.DEFAULT_PASS, entity.getUserName()));

                

                

                 baseDao.saveOrUpdate(entity);

                

                 //发送邮件

                 mailMessage.setSubject("你好");

                 mailMessage.setText("尊敬的"+entity.getUserInfo().getName()+",您的用户名:"+entity.getUserName()+",初始密码为:123456");

                 mailMessage.setTo(entity.getUserInfo().getEmail());

                 mailSender.send(mailMessage);

           }else{

                 baseDao.saveOrUpdate(entity);

           }

            

      }

 

注意,在注册邮箱时,为了能发送成功,请进行如下调整。

商务综合管理-day6 javaMail,spring整合javaMail