用Java實現(xiàn)每天給對象發(fā)情話
點擊上方?java項目開發(fā),選擇?設為星標
優(yōu)質文章,及時送達
--
來源:https://blog.csdn.net/qq_33758782
一、引言
最近看到一篇用js代碼實現(xiàn)表白的文章,深有感觸。
然后發(fā)現(xiàn)自己也可以用java代碼實現(xiàn),然后就開始寫代碼了,發(fā)現(xiàn)還挺有意思的,話不多說開搞
實現(xiàn)思路:
使用HttpClient遠程獲取彩虹屁生成器網(wǎng)站中的內(nèi)容 網(wǎng)站:https://chp.shadiao.app/
java Mail 實現(xiàn)發(fā)送郵件
SpringBoot 整合Scheduled 實現(xiàn)定時發(fā)送郵件
二、搭建項目
項目環(huán)境在SpringBoot框架基礎上,加入郵件發(fā)送mail、RPC遠程調用httpclient、Scheduled 的一個Maven項目,依賴如下:
<parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.3.2.RELEASEversion>parent><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-mailartifactId>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-context-supportartifactId>dependency><dependency><groupId>org.apache.httpcomponentsgroupId><artifactId>httpclientartifactId><version>4.5.12version>dependency>dependencies><build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId><configuration><fork>truefork>configuration>plugin>plugins>????build>
三、編寫配置
在編寫配置前需要,在瀏覽器登錄自己的郵箱在賬號安全中設置開啟POP3/SMTP服務

開始開啟POP3/SMTP服務需要輸入驗證碼
復制授權碼

勾選SMTP發(fā)信后保存到服務器,勾選這一項主要是可以看到自己發(fā)送了什么信息,不勾選此項。郵件消息發(fā)送成功后,郵箱內(nèi)看不到自己已發(fā)送的信息
根據(jù)授權碼編寫配置
spring:mail:username: [email protected] # 自己郵箱地址password: xxxxxxx # SMTP|POP3|IMAP協(xié)議授權碼host: smtp.qq.com # 服務器地址。參考郵箱服務運營商提供的信息。properties:mail:smtp:auth: true # 開啟smtp協(xié)議驗證port: 587# 發(fā)給誰的郵箱she::[email protected]
四、編寫SpringBoot啟動類
public class BiaoBaiApp {public static void main(String[] args) {SpringApplication.run(BiaoBaiApp.class,args);}
五、自動生成發(fā)送內(nèi)容
public class SendMessage {private JavaMailSender mailSender;("${spring.mail.username}")private String from;("${she.mail}")private String[] sheMail;public void sendMessage(String subject,String message) {try {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);helper.setFrom(from);//發(fā)送者郵件郵箱helper.setTo(sheMail);//收郵件者郵箱helper.setSubject(subject);//發(fā)件主題helper.setText(message);//發(fā)件內(nèi)容mailSender.send(helper.getMimeMessage());//發(fā)送郵件} catch (MessagingException e) {e.printStackTrace();}}/**遠程獲取要發(fā)送的信息*/public static String getOneS(){try {//創(chuàng)建客戶端對象HttpClient client = HttpClients.createDefault();/*創(chuàng)建地址 https://du.shadiao.app/api.php*/HttpGet get = new HttpGet("https://chp.shadiao.app/api.php");//發(fā)起請求,接收響應對象HttpResponse response = client.execute(get);//獲取響應體,響應數(shù)據(jù)是一種基于HTTP協(xié)議標準字符串的對象//響應體和響應頭,都是封裝HTTP協(xié)議數(shù)據(jù)。直接使用可能出現(xiàn)亂碼或解析錯誤HttpEntity entity = response.getEntity();//通過HTTP實體工具類,轉換響應體數(shù)據(jù)String responseString = EntityUtils.toString(entity, "utf-8");return responseString;} catch (IOException e) {throw new RuntimeException("網(wǎng)站獲取句子失敗");}}}
六、編寫定時任務
public class MyScheduled {private SendMessage sendMessage;/*定時執(zhí)行任務方法 每天5點20執(zhí)行該任務*/(cron ="0 20 17 * * *")public void dsrw(){String message = sendMessage.getOneS();sendMessage.sendMessage("來自清茶淡粥的消息!?",message);}}
七、打包運行
有條件的可以吧jar包放在運服務器上,沒有條件的可以在本地win10系統(tǒng)上添加定時任務,每天定時執(zhí)行jar包。
jar包放在服務器上需要放行端口:587 ,防火墻放行587端口
除了放行,還有放行 http 端口 和 https端口

然后在linux上后臺啟動jar包
nohup?java?-jar?jar包?>test.log?&win10 定時運jar 包 在任務計劃程序中創(chuàng)建任務

新建觸發(fā)器

新建操作,在程序或腳本輸入執(zhí)行的jar命令,點擊確定

然后可以看見,創(chuàng)建好的任務

八、總結
代碼還有很大的提升,也有很多不足之處。
由于時間原因,可優(yōu)化的地方還很多,比如:發(fā)送單純的文字內(nèi)容的郵件,不美觀,可以實現(xiàn)html方式發(fā)送郵件,使發(fā)送郵件內(nèi)容更加美觀。
public void sendHtmlMessage(String subject,String message){try {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);helper.setFrom(from);helper.setTo(sheMail);helper.setSubject(subject);helper.setText(message,true);//true 使用html 方式發(fā)送mailSender.send(helper.getMimeMessage());} catch (MessagingException e) {e.printStackTrace();????????}
最后附上我寫的源碼供大家參考:?
2. 在下面公眾號后臺,回復關鍵字「22」:
