使用java编写一个定期发送邮件通知的工具类

本文介绍如何使用QQ邮箱通过Java编程实现定时自动发送带有附件的邮件。具体步骤包括开启SMTP服务、配置邮件属性、身份验证等,并利用Timer组件实现定时发送功能。

这里我们使用qq邮箱为例来进行定时自动发送邮件的编写

首先我们需要打开发送方qq邮箱的pop3/SMTP服务

然后会收到一个16位的SMTP口令,记住很有用


首先我们会用到两个jar包来完成:

1.mail.jar编辑自动发送mail

2.actvation.jar添加邮件的附件进行仪器发送

一.配置所需要的相关的信息(一般使用properties来进行配置信息的存放):

//创建Properties类用于记录邮箱的一些属性
        final Properties props = new Properties();
        //表示使用SMTP发送邮件,必须进行身份验证
        props.put("mail.smtp.auth", "true");
        //此处填写SMTP服务器
        props.put("mail.smtp.host", "smtp.qq.com");
        //端口号587或465
        props.put("mail.smtp.port", "587");
        //此处填写你的账号
        props.put("mail.user", "19......045@qq.com");
        //此处填写前面说到的16 位SMTP口令

        props.put("mail.password", "口令");

3.身份验证

//构建授权信息用于SMTP进行身份验证,密码,账号验证
        Authenticator authenticator = new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                //用户名,密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }

        };


4.使用配置信息和,授权信息创建邮件会话

//使用环境属性和授权信息,创建邮件会话

        Session mailSession = Session.getInstance(props, authenticator);

5.创建邮件消息,及发件人,收件人

//创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        //设置发件人
        InternetAddress form = new InternetAddress(props.getProperty("mail.user"));
        message.setFrom(form);
        //设置收件人的邮箱
        InternetAddress to = new InternetAddress("15。。。。@163.com");

        message.setRecipient(RecipientType.TO, to);


6.内容

//设置邮件标题
        message.setSubject("您好,我的第一份邮件");
        
        //设置邮件的内容

        message.setContent("加油,兄弟","text/html;charset=UTF-8");

7.添加邮件的附件actvation

Multipart mp = new MimeMultipart();
        BodyPart part = new MimeBodyPart();
        // 获取附件地址

        Properties filePro = new Properties();

//引入地址信息

        filePro.load(this.getClass().getClassLoader().getResourceAsStream("propertiesFile/config.properties"));
        //附件的地址
        DataSource source = new FileDataSource(filePro.getProperty("filePath"));
        //DataSource source = new FileDataSource("D:\\123.png");
        System.out.println();

        part.setDataHandler(new DataHandler(source));

//设置附件的名

        part.setFileName("123.png");

//添加附件到附件载体中

        mp.addBodyPart(part);

//将附件加入邮件信息

        message.setContent(mp);


8.发送邮件

Transport.send(message);
        System.out.println("发送完成》》》》》》》》》》》》》》》》》》");
       

9.至于定时发送,则是在该工具类的基础上,使用timer或者aquartz来实现定时调用即可

final static int Day_Month =  19;//每月19号
    final static int Hour_Date = 8;//八点
    final static int Minute_Hour = 8;//8分
    final static int Second_Minute = 8;
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.DAY_OF_MONTH,Day_Month);
        c.set(Calendar.HOUR_OF_DAY, Hour_Date);
        c.set(Calendar.MINUTE, Minute_Hour);
        c.set(Calendar.SECOND, Second_Minute);
        
        final Date time = c.getTime();
        final AutoSendMailUtil autoSendMailUtil = new AutoSendMailUtil();
        System.out.println("开始执行任务");
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
                    try {
                        autoSendMailUtil.sendEmail();
                        System.out.println("发送成功");
                    } catch (MessagingException | IOException e) {
                        // TODO Auto-generated catch block
                        System.out.println("发送邮件失败,呼叫彬哥!");
                        e.printStackTrace();
                    }
                
                
                
            }
        }, time, 1000*60*60*24);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值