用java 发送邮件 给女朋友 ,linux定时执行

版本2:
版本2的Url

突发奇想,就想发个邮件给女朋友,每天早上五点二十发,比较有仪式感
而作为一个程序员,怎么可能手动发呢?
一切为了最快达成目的,所以写得很简单
第一步,进入qq邮箱打开设置

在这里插入图片描述
开启POP3/SMTP服务,记住密码,后面配置文件要用
在这里插入图片描述

项目结构:
在这里插入图片描述

介绍:maven项目,email.properties放配置项

# 发件人
email.form=xxx@qq.com
# 收件人
email.to=xxx@qq.com
# 邮件发送的服务器
email.host=smtp.qq.com
# 授权给第三方登陆的密码
email.password=xxxxxx

日期处理类(计算在一起已经多久了):

package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;

/**
 * Description: 日期工具类
 */
public class MyDateUtil {

    /**
     * 将指定的日期字符串转换成日期
     *
     * @param dateStr 日期字符串
     * @param pattern 格式
     * @return 日期对象
     */
    public static Date parseDate(String dateStr, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return date;
    }

    
}

PropertiesUtil(读取配置文件):

public class PropertiesUtil {
    static Properties properties = new Properties();
 
    public static boolean loadFile(String fileName) {
        try {
            InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName);
            //传入一个输入流
            properties.load(in);
        }catch (IOException e) {
            e.printStackTrace();
            System.err.println("读取配置文件失败");
            return false;
        }
        return true;
    }

 
    public static String getPropertyValue(String key){
       String value = properties.getProperty(key);
       return value;
    }
}

SendEmail (发送邮件):

public class SendEmail {

    /** 设置发件人*/
    private  String from;

    /**设置收件人*/
    private  String to ;

    /**设置邮件发送的服务器,这里为QQ邮件服务器*/
    private  String host;

    /** 授权给第三方登陆的密码*/
    private  String password;

    {
    	// 加载配置项
        PropertiesUtil.loadFile("email.properties");
        from = PropertiesUtil.getPropertyValue("email.form");
        to = PropertiesUtil.getPropertyValue("email.to");
        host = PropertiesUtil.getPropertyValue("email.host");
        password = PropertiesUtil.getPropertyValue("email.password");
    }

    public void doSend(String text, long days){
        try {
            //获取系统属性
            Properties properties = System.getProperties();

            //SSL加密
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", "true");
            properties.put("mail.smtp.ssl.socketFactory", sf);

            //设置系统属性
            properties.setProperty("mail.smtp.host", host);
            properties.put("mail.smtp.auth", "true");

            //获取发送邮件会话、获取第三方登录授权码
            Session session = Session.getDefaultInstance(properties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(from, password);
                }
            });

            Message message = new MimeMessage(session);

            //防止邮件被当然垃圾邮件处理,披上Outlook的马甲
            message.addHeader("X-Mailer","Microsoft Outlook Express 6.00.2900.2869");

            message.setFrom(new InternetAddress(from));

            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            //邮件标题
            message.setSubject("在一起的第"+days+"天");

            BodyPart bodyPart = new MimeBodyPart();

            bodyPart.setText(text);

            Multipart multipart = new MimeMultipart();

            multipart.addBodyPart(bodyPart);

            //附件
            bodyPart = new MimeBodyPart();
//            String fileName = "文件路径";
//            DataSource dataSource = new FileDataSource(fileName);
//            bodyPart.setDataHandler(new DataHandler(dataSource));
//            bodyPart.setFileName("文件显示的名称");
//            multipart.addBodyPart(bodyPart);

            message.setContent(multipart);

            Transport.send(message);
            System.out.println("=============="+ new Date(System.currentTimeMillis())+"=======================");
            System.out.println(String.format("%d\n发送成功,内容:\n%s",days,text));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

WordConstant (放置土味情话库,随机读取一个)
我收集加上自己写的,有一百多一点,节省篇幅,就不放
上来了

public class WordConstant {
    String[] word = {
            "有趣的地方都想去​|比如你的世界",
            "我想在你那里买一块地|买什么地?|买你的死心塌地",
            "你知道你和星星有什么区别吗?|星星在天上|而你在我心里",
            "我十拿九稳|就只差你一吻了",
            "可爱不是长久之计|可爱你是",
            "你知道什么是重要吗?|就是你无论多重|我都要你!"
    };
    public String getWord(){
        int ran = (int) (Math.random()*(word.length));
        return word[ran].replace("|","\n");
    }

主类,这里是最简单得

public class doMain {
    static long getDate(){
        // 在一起的那一天
        String dateStr1 = "2019-08-01 00:00:00";
         // 获取日期
        Date date1 = MyDateUtil.parseDate(dateStr1, "yyyy-MM-dd HH:mm:ss");
        
        //现在的时间
        Date date2 = new Date(System.currentTimeMillis());
        
        // 获取相差的天数
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date1);
        long timeInMillis1 = calendar.getTimeInMillis();
        calendar.setTime(date2);
        long timeInMillis2 = calendar.getTimeInMillis();

        return  (timeInMillis2 - timeInMillis1) / (1000L * 60L * 60L * 24L);
    }

    public static void main(String[] args) {
        SendEmail sendEmail = new SendEmail();
        long days = getDate();
        String text = new WordConstant().getWord() + "\n"
                + "                                              --xxx";
        if (days%100 ==0){
            text =  "今天是我们的第 "+ days + "天啦\n" +
                    "接下来也要一起好好努力哟!!";
        }else if ( days % 365 == 0){
            text = "今天是我们的第 "+ days / 365 + "周年啦\n" +
                    "时间真的过得很快呢哎哟喂!!\n" +
                    "我们长长久久又进了一步啦";
        }
        sendEmail.doSend(text, days);
    }
}

然后打包成jar包

略,大家都懂的,不懂也网上很多教程

配置linux添加定时计划

crontab -e

按a进入编辑模式,在最后添加命令

:wq保存
20代表20分,5代表早上五点
每天会执行一次,记得路径不要写错

java命令那里要加上路径,不然会出现命令找不到的情况,应该是环境没配置的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值