admin管理员组文章数量:1646326
开始之前需要做一些准备工作
1.导入依赖的jar包 —> activation.jar 和 mail.jar
2.在QQ邮箱中设置开启获取第三方登录授权码
- 打开QQ邮箱,如下图,跟着步骤走
* 下拉选择IMAP/SMTP
- 接着手机验证后得到授权码,记着后面代码要使用
准备工作完成就可以开始编码了
说一下实现功能思路:
首先需要一个监听器对发邮件进行监听,生命周期伴随服务器,那么就需要写一个监听器类,跟一个发邮件的类
1.创建监听器(注释都写得很清楚就不多做解释了)
package day22.com.chenjiangang.demotwo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Timer;
/**
* 邮件监听
* 服务器启动时监听器开始监听,生命周期伴随服务器
*/
public class MyTimerTask implements ServletContextListener {
// 初始化定时器
private Timer timer = null;
//监听器生命周期方法,死亡
public void contextDestroyed(ServletContextEvent event)
{
timer.cancel();
event.getServletContext().log("定时器销毁");
}
//监听器生命周期方法,出生
public void contextInitialized(ServletContextEvent event)
{
//初始化监听器
timer = new Timer(true);
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
//调用exportHistoryBean,每隔5秒发送一封邮件,60*60*24*1000为一天
timer.schedule(new SendEmail(event.getServletContext()),0,5*1000);
}
}
2.发邮件类
package day22.com.chenjiangang.demotwo;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.ServletContext;
import java.io.File;
import java.util.Properties;
import java.util.TimerTask;
/**
* 定时发送邮件
*/
public class SendEmail extends TimerTask {
//创建ServletContext域对象
private ServletContext context = null;
//赋值
public SendEmail(ServletContext context) {
this.context = context;
}
@Override
public void run() {
System.out.println("正在发送邮件");
/*
* 1. 得到session
*/
Properties props = new Properties(); //参数之一props
props.setProperty("mail.host", "smtp.qq"); //设置服务器主机名
props.setProperty("mail.smtp.auth", "true"); //认证
//这是一个内部类
Authenticator auth = new Authenticator() { //参数之一auth
@Override
protected PasswordAuthentication getPasswordAuthentication() {
/**
* 使用QQ发送,需要在QQ邮件中设置获取第三方登录授权码
* 第一个参数是你的QQ号码,注意第二个参数不是你的QQ密码,是你的QQ邮箱第三方登录授权码
*/
return new PasswordAuthentication("1037540258", "elvopofjiynkbead");
}
};
Session session = Session.getInstance(props, auth);
/*
* 2. 创建MimeMessage
*/
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("1037540258@qq"));//设置发件人
msg.setRecipients(MimeMessage.RecipientType.TO, "98342@qq");//设置收件人
msg.setSubject("每天定时自动发送测试邮件");//邮件的标题
/*
* 当发送包含附件的邮件时,邮件体就为多部件形式!
* 1. 创建一个多部件的部件内容!MimeMultipart
* MimeMultipart就是一个集合,用来装载多个主体部件!
* 2. 需要创建两个主体部件,一个是文本内容的,另一个是附件的。
* 主体部件叫MimeBodyPart
* 3. 把MimeMultipart设置给MimeMessage的内容
*/
MimeMultipart list = new MimeMultipart();//创建多部分内容
// 创建MimeBodyPart
MimeBodyPart part1 = new MimeBodyPart();
// 设置主体部件的内容,处理乱码问题
part1.setContent("这个是邮箱主体内容", "text/html;charset=utf-8");
// 把主体部件添加到集合中
list.addBodyPart(part1);
// 创建MimeBodyPart
MimeBodyPart part2 = new MimeBodyPart();
//添加附件,这里我放的是一张猫的图片
part2.attachFile(new File("C:\\u=720442" +
"583,2314713918&fm=26&gp=0.jpg"));
//设置显示的附件名称,其中encodeText用来处理中文乱码问题
part2.setFileName(MimeUtility.encodeText("一只猫.png"));
list.addBodyPart(part2);// 把附件部分添加到集合中
msg.setContent(list);//把它设置给邮件作为邮件的内容。
//发送
Transport.send(msg);
}catch (Exception e){
//异常转换
throw new RuntimeException(e);
}
}
}
3.最后在web.xml中配置监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp/xml/ns/javaee"
xmlns:xsi="http://www.w3/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp/xml/ns/javaee http://xmlns.jcp/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 配置监听器,范围是整个服务器 -->
<listener>
<listener-class>day22.com.chenjiangang.demotwo.MyTimerTask</listener-class>
</listener>
</web-app>
成功效果图
随便打开一封
————————
创作不易,如觉不错,随手三连点赞,收藏,关注,谢谢~~
版权声明:本文标题:如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729446599a1201465.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论