Java輕鬆實現,每天給物件發情話!
阿新 • • 發佈:2021-09-16
一、引言
最近看到一篇用js程式碼實現表白的文章,深有感觸。
然後發現自己也可以用java程式碼實現,然後就開始寫程式碼了,發現還挺有意思的,話不多說開搞
實現思路:
-
使用HttpClient遠端獲取彩虹屁生成器網站中的內容 網站:https://chp.shadiao.app/
-
java Mail 實現傳送郵件
-
SpringBoot 整合Scheduled 實現定時傳送郵件
二、搭建專案
專案環境在SpringBoot框架基礎上,加入郵件傳送mail、RPC遠端呼叫httpclient、Scheduled 的一個Maven專案,依賴如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <!-- httpclient 依賴 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.12</version> </dependency> </dependencies> <!--打包外掛--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
三、編寫配置
在編寫配置前需要,在瀏覽器登入自己的郵箱在賬號安全中設定開啟POP3/SMTP服務
開始開啟POP3/SMTP服務需要輸入驗證碼
複製授權碼
勾選SMTP發信後儲存到伺服器,勾選這一項主要是可以看到自己傳送了什麼資訊,不勾選此項。郵件訊息傳送成功後,郵箱內看不到自己已傳送的資訊
根據授權碼編寫配置
spring: mail: username: [email protected] # 自己郵箱地址 password: xxxxxxx # SMTP|POP3|IMAP協議授權碼 host: smtp.qq.com # 伺服器地址。參考郵箱服務運營商提供的資訊。 properties: mail: smtp: auth: true # 開啟smtp協議驗證 port: 587 # 發給誰的郵箱 she: mail: xxxxxxx@163.com
五、編寫SpringBoot啟動類
@EnableScheduling @SpringBootApplication public class BiaoBaiApp {public static void main(String[] args) { SpringApplication.run(BiaoBaiApp.class,args); }
六、自動生成傳送內容
@Component public class SendMessage { @Autowired private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from; @Value("${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);//傳送者郵件郵箱 helper.setTo(sheMail);//收郵件者郵箱 helper.setSubject(subject);//發件主題 helper.setText(message);//發件內容 mailSender.send(helper.getMimeMessage());//傳送郵件 } catch (MessagingException e) { e.printStackTrace(); } } /**遠端獲取要傳送的資訊*/ public static String getOneS(){ try { //建立客戶端物件 HttpClient client = HttpClients.createDefault(); /*建立地址 https://du.shadiao.app/api.php*/ HttpGet get = new HttpGet("https://chp.shadiao.app/api.php"); //發起請求,接收響應物件 HttpResponse response = client.execute(get); //獲取響應體,響應資料是一種基於HTTP協議標準字串的物件 //響應體和響應頭,都是封裝HTTP協議資料。直接使用可能出現亂碼或解析錯誤 HttpEntity entity = response.getEntity(); //通過HTTP實體工具類,轉換響應體資料 String responseString = EntityUtils.toString(entity, "utf-8"); return responseString; } catch (IOException e) { throw new RuntimeException("網站獲取句子失敗"); } } }
七、編寫定時任務
@Component public class MyScheduled { @Autowired private SendMessage sendMessage; /*定時執行任務方法 每天5點20執行該任務*/ @Scheduled(cron ="0 20 17 * * *") public void dsrw(){ String message = sendMessage.getOneS(); sendMessage.sendMessage("來自南國以南i的訊息!❤",message); } }
八、打包執行
有條件的可以吧jar包放在運伺服器上,沒有條件的可以在本地win10系統上新增定時任務,每天定時執行jar包。
jar包放在伺服器上需要放行埠:587 ,防火牆放行587埠
除了放行,還有放行 http 埠 和 https埠
然後在linux上後臺啟動jar包
nohup java -jar jar包 >test.log &
win10 定時運jar 包 在任務計劃程式中建立任務
新建觸發器
新建操作,在程式或指令碼輸入執行的jar命令,點選確定
然後可以看見,建立好的任務
九、總結
程式碼還有很大的提升,也有很多不足之處。
由於時間原因,可優化的地方還很多,比如:傳送單純的文字內容的郵件,不美觀,可以實現html方式傳送郵件,使傳送郵件內容更加美觀。
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 方式傳送 mailSender.send(helper.getMimeMessage()); } catch (MessagingException e) { e.printStackTrace(); }
感謝博主:轉載原文連結