版本1:
版本1的Url
就是发完给女朋友,突然想给自己也发一下,然后自己给自己发土味情话不是腻得慌??
所以只能给自己发励志短文了
结构如下:
改动的地方:
WordConstant:
老规矩,语录自己写。。
package util;
import org.junit.jupiter.api.Test;
/**
* @author chy
* @create 2020-12-15-11:51
*/
public class WordConstant {
String[] loveWords = {
"有趣的地方都想去|比如你的世界",
"我想在你那里买一块地|买什么地?|买你的死心塌地",
"你知道你和星星有什么区别吗?|星星在天上|而你在我心里",
"我十拿九稳|就只差你一吻了",
"可爱不是长久之计|可爱你是"
};
String[] fighterWords = {
"生命太短暂|不要去做根本没人想要的东西",
"如果你没有把握做到|最好就不要承诺|你什么也不承诺|至少别人不会看不起你",
"程序员可以让步|却不可以退缩|可以羞涩|却不可以软弱|总之|程序员必须是勇敢的",
"一本好书|就像高级武功秘籍一样|哪怕只是从里面领悟到一招半式|功力提升起来都是惊人的"
};
public String getWords(int id){
String[] words = id ==1 ? loveWords : id ==2 ?fighterWords : new String[]{"请选择正确的语录"};
int ran = (int) (Math.random()*(words.length));
return words[ran].replace("|","\n");
}
@Test
public void test(){
WordConstant word = new WordConstant();
System.err.println(word.getWords( 2));
System.err.println(word.fighterWords.length);
}
}
SendEmail:
初始化的时候根据参数选择不同的配置文件
/** 设置发件人*/
private String from;
/**设置收件人*/
private String to ;
/**设置邮件发送的服务器,这里为QQ邮件服务器*/
private String host;
/** 授权给第三方登陆的密码*/
private String password;
public SendEmail(int id){
if(id ==1){
PropertiesUtil.loadFile("love.properties");
}else {
PropertiesUtil.loadFile("strive.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();
}
}
}
doMain:
import util.MyDateUtil;
import util.SendEmail;
import util.WordConstant;
import java.util.Calendar;
import java.util.Date;
/**
* @author chy
* @create 2020-12-15-11:04
*/
public class doMain {
static long getDate(){
// 日期字符串
String dateStr1 = "2019-08-01 00:00:00";
Date date2 = new Date(System.currentTimeMillis());
// 获取日期
Date date1 = MyDateUtil.parseDate(dateStr1, "yyyy-MM-dd HH:mm:ss");
// 获取相差的天数
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) {
int id = Integer.parseInt(args[0]);
SendEmail sendEmail = new SendEmail(id);
long days = getDate();
String text = new WordConstant().getWords(id) + "\n";
if (id == 1){
text += " --XXX";
if (days%100 ==0){
text = "今天是我们的第 "+ days + "天啦\n" +
"接下来也要一起好好努力哟!!";
}else if ( days % 365 == 0){
text = "今天是我们的第 "+ days / 365 + "周年啦\n" +
"时间真的过得很快呢哎哟喂!!\n" +
"我们长长久久又进了一步啦";
}
}else if(id == 2){
text += " --致自己";
}
sendEmail.doSend(text, days);
}
}
看到这一句,基本大家都知道什么意思了吧,所以我上面都是废话,大家直接看着一句就行了
int id = Integer.parseInt(args[0]);
提供个思路,欢迎大家探讨
linux 使用方式:
20 5 * * * /usr/local/jdk1.8/bin/java -jar /opt/email_timing/script-1.0-SNAPSHOT.jar 1 >> /opt/email_timing/log.txt 2>&1
20 5 * * * /usr/local/jdk1.8/bin/java -jar /opt/email_timing/script-1.0-SNAPSHOT.jar 2 >> /opt/email_timing/log.txt 2>&1
2020/12/18
又更新了一个版本
步骤都差不多
这次增加了每日英语和天气预报,英语是爬下来的,天气预报是通过免费的接口拿的,没什么作用,就图个好玩
原理大家都懂就不赘述了,在这里放张图就好了
收到的邮件内容就是这样子: