版本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命令那里要加上路径,不然会出现命令找不到的情况,应该是环境没配置的问题