如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧

开始之前需要做一些准备工作

1.导入依赖的jar包 —> activation.jar 和 mail.jar
2.在QQ邮箱中设置开启获取第三方登录授权码

  • 打开QQ邮箱,如下图,跟着步骤走
    如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧_第1张图片* 下拉选择IMAP/SMTP
    如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧_第2张图片
  • 接着手机验证后得到授权码,记着后面代码要使用
    如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧_第3张图片

准备工作完成就可以开始编码了

说一下实现功能思路:

首先需要一个监听器对发邮件进行监听,生命周期伴随服务器,那么就需要写一个监听器类,跟一个发邮件的类

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.com");  //设置服务器主机名
        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("[email protected]"));//设置发件人
            msg.setRecipients(MimeMessage.RecipientType.TO, "[email protected]");//设置收件人

            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.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/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发一封暖心邮件吧_第4张图片

随便打开一封如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧_第5张图片

如何使用java每天定时自动发送邮件(可带附件),每天给女朋友QQ发一封暖心邮件吧_第6张图片

————————

创作不易,如觉不错,随手三连点赞,收藏,关注,谢谢~~

你可能感兴趣的:(java好玩的操作,java定时发送,java发送qq邮件,带附件邮件,java如何发送邮件,java发送邮件)