现在我们有这样一个需求,就是当我们系统出现问题或bug的时候,让系统通过邮件发送日志信息给相关人员,那么此时,我们就需要实现一个让系统发送邮件的功能
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.1</version> </dependency>
application-mail.xml配置
<?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.xsd "> <!--配置发送邮件的核心对象--> <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <!--邮件发送协议--> <property name="host" value="smtp.qq.com"/> <!--这里的邮箱是你要发送邮件的邮箱--> <property name="username" value="xxxxxx@qq.com"/> <!--这里的密码用的是授权码--> <property name="password" value="xxxxxxx"/> <property name="defaultEncoding" value="UTF-8"/> <property name="javaMailProperties"> <props> <!--这里是需要认证才能进行发送,防止随意发送--> <prop key="mail.smtp.auth">true</prop> <!-- SMTP加密方式:连接到一个TLS保护连接 --> <prop key="mail.smtp.starttls.enable">true</prop> </props> </property> </bean>
</beans>
其实就是将发送邮件的xml配置文件引入到spring的配置文件中
<!--配置导入配置文件,位置为当前目录平级的plugs文件夹下面的所有.xml文件--> <import resource="classpath:plugins/*.xml"/>
这里需要说明一下,classpath后面是跟的我的一个关于实现这些功能专门的配置文件的文件夹,然后通配文件夹里面所有.xml的配置文件,当然,也可以这样写
<import resource="classpath:plugins/applicationContext-mail.xml"/>
这样配置也完全没有任何问题,看个人喜好哈,只是我喜欢把这些相关的配置文件同一放在一个文件夹里面,然后统一一起引入
需要说明一下,邮件分为两种,一种是普通邮件,即文本信息,不含html代码或附件,另一个种就是包含html代码和附件的,这两种方式相同的是都需要在发送邮件的类里面引入发送邮件的核心对象
@Autowired private JavaMailSender javaMailSender;
需要注意的是这里发送邮件的地址必须是applicaiton-mail.xml中所配置的username
//获取邮箱对象 SimpleMailMessage message = new SimpleMailMessage(); //设置由哪个邮箱发出 这里自己定义 message.setFrom("xxxxxx@qq.com"); //设置标题 message.setSubject("测试来了哦"); //设置发送内容 message.setText("我来了,你来了没"); //设置发送地址 -- 发给谁 message.setTo("xxxx@icloud.com"); //发送邮件 javaMailSender.send(message);
//创建一个空邮件对象 MimeMessage mimeMessage = javaMailSender.createMimeMessage(); //创建发送复杂邮件的工具类,并传入空邮件,设置是否有附件为true和编码集 MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); //设置发送邮件的邮箱地址,必须和xml里面配置一致 messageHelper.setFrom("xxxxxx@qq.com"); //设置邮件标题 messageHelper.setSubject("复杂邮件标题,就是我"); //设置邮件里面的普通内容 messageHelper.setText("我是复杂邮件,我又来了"); //设置复杂邮件的html代码,并设置是否为html为true messageHelper.setText("<h2>我是复杂邮件的html代码,能实现不?</h2>",true); //添加发送邮件的附件,是一个图片 messageHelper.addAttachment("hah.png",new File("img/1.png")); //添加附件文件 messageHelper.addAttachment("mf文件",new File("s/login.jsp")); //抄送给谁 这里的参数可以是数组,即多个接收对象 messageHelper.setCc("mmmm@qq.com"); //发送给谁 这里的参数可以是数组,即多个接收对象 messageHelper.setTo("xxxx@icloud.com"); //发送邮件 javaMailSender.send(mimeMessage);
注意,大家不要以为现在就可以直接发送了,还需要大家花一毛钱才行,这个钱不是给我哈,也不是给邮箱或浏览器,而是给到运营商
,这里就以QQ邮箱为例:
第一步,点击邮箱首页左上角的设置
第二步,选中设置里面的账户设置
第三步,往下翻,翻到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
第四步,会让你发送短信,这时候就可以直接发送短信,这里就到了收钱的地方,看吧,不是我收哈
最后,当发送成功之后,就会收到一个授权码,记住它,然后填入你的application-mail.xml里面的password栏中,然后再运行我们的测试方法即可