[英]unable to send mails at certain time using @Scheduled
当我尝试使用调度程序发送邮件时,电子邮件在执行时触发,但未按计划触发。 预计它会在每周五下午 6:00 触发邮件。 在我的代码中,我将 @scheduler 中的 cronjob 设置为 // @Scheduled(cron = "0 0 18 ? 1/1 FRI#3 *") 和 // @Scheduled(cron = "0 0 18 ? 1/1 FRI#1 *")。
package com.example.Filter;h
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
@SpringBootApplication
@EnableScheduling
public class FilterApplication {
private static Connection getConnection() throws SQLException {
return DriverManager.getConnection(
"jdbc:mysql://localhost:3306/dealinsights?useSSL=false&allowPublicKeyRetrieval=true", "*****",
"******");
}
private static JSONObject parseMapToJSONObject(HashMap<String, HashMap<String, JSONArray>> map) {
JSONObject jsonObject = new JSONObject();
try {
for (String key : map.keySet()) {
HashMap<String, JSONArray> innerMap = map.get(key);
JSONObject innerJSON = new JSONObject();
for (String innerKey : innerMap.keySet()) {
JSONArray jsonArray = innerMap.get(innerKey);
innerJSON.put(innerKey, jsonArray);
}
jsonObject.put(key, innerJSON);
}
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
private static HashMap<String, HashMap<String, JSONArray>> parseResultSetToMap(ResultSet result, String[] parse) {
HashMap<String, HashMap<String, JSONArray>> map = new LinkedHashMap<String, HashMap<String, JSONArray>>();
try {
while (result.next()) {
String bu = result.getString("bu") != null ? result.getString("bu") : "";
String bidManager = result.getString("bid_manager") != null ? result.getString("bid_manager") : "";
String report = result.getString("report") != null ? result.getString("report") : "";
String total = result.getString("total") != null ? result.getString("total") : "";
String bidManagerMail = result.getString("bid_manager_mail") != null
? result.getString("bid_manager_mail") : "";
HashMap<String, JSONArray> innerMap = map.get(bu) != null ? map.get(bu)
: new HashMap<String, JSONArray>();
HashMap<String, JSONArray> Map = map.get(bidManagerMail) != null ? map.get(bidManagerMail)
: new HashMap<String, JSONArray>();
JSONArray jsonArray = innerMap.get(bidManager) != null ? innerMap.get(bidManager) : new JSONArray();
JSONArray jsonArrayMail = innerMap.get(bidManagerMail) != null ? innerMap.get(bidManagerMail)
: new JSONArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("report", report);
jsonObject.put("total", total);
jsonObject.put("bid_manager_mail", bidManagerMail);
jsonArray.put(jsonObject);
innerMap.put(bidManager, jsonArray);
map.put(bu, innerMap);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
// @Scheduled(cron = "0 0 18 ? 1/1 FRI#1 *")
// @Scheduled(cron = "0 0 18 ? 1/1 FRI#3 *")
// @Scheduled(cron = "0 45 10 ? 1/1 FRI#4 *")
@Scheduled(cron = "0/10 * * * * ?")
private static void sendEmail(Session session, String fromAddress, String[] toAddress, String[] ccAddress,
String[] bccAddress, String subject, String body) throws AddressException, MessagingException {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
for (String to : toAddress)
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
for (String cc : ccAddress)
message.addRecipient(Message.RecipientType.CC, new InternetAddress(cc));
for (String bcc : bccAddress)
message.addRecipient(Message.RecipientType.BCC, new InternetAddress(bcc));
message.setSubject(subject);
message.setContent(body, "text/html");
Transport.send(message);
long now = System.currentTimeMillis() / 1000;
System.out.println("schedule tasks using cron jobs - " + now);
}
public static void main(String[] args) throws AddressException, MessagingException, ClassNotFoundException {
String host = "*******";
String port = "25";
final String user = "*******";
final String password = "******";
String to = "******";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});
String msg = "yes";
String report = "";
String total1 = null;
// try {
// String technologyText = " ";
// String commsmediaText = " ";
// String totalDynamicKey = null;
// String myDriver = "com.mysql.cj.jdbc.Driver";
// Class.forName(myDriver);
// Connection connection = getConnection();
// CallableStatement callableStatement = connection
// .prepareCall("{call get_pursuit_quality_report_filter_data()}");
// ResultSet result = callableStatement.executeQuery();
// String[] parse = { "report", "bu", "bid_manager", "total",
// "bid_manager_mail" };
// HashMap<String, HashMap<String, JSONArray>> map =
// parseResultSetToMap(result, parse);
// JSONObject jsonObject = parseMapToJSONObject(map);
// JSONObject Technology = jsonObject.getJSONObject("Technology");
// JSONObject commsmedia = jsonObject.getJSONObject("CommsMedia");
// Iterator keys = Technology.keys();
// while (keys.hasNext()) {
// totalDynamicKey = (String) keys.next();
// // System.out.println("keys:" + totalDynamicKey);
// JSONArray totalDynamicValue =
// Technology.getJSONArray(totalDynamicKey);
// JSONObject objMail = totalDynamicValue.getJSONObject(0);
// String bidMail = objMail.optString("bid_manager_mail");
// technologyText += "This is " + totalDynamicKey
// + "'s Report for any furthur queries please reach out to " + bidMail
// + "<br/>";
// technologyText += "<table width='100%' border='1' align='center'>" +
// "<tralign='center'>"
// + "<td><b> Report <b></td>" + "<td><b> Total <b></td>" + "</tr>";
//
// for (int j = 0; j < totalDynamicValue.length(); j++) {
// JSONObject obj = totalDynamicValue.getJSONObject(j);
// total1 = obj.getString("total");
// report = obj.getString("report");
//
// technologyText += "<tralign='center'>" + "<td>" + report + "</td>" +
// "<td>" + total1 + "</td>"
// + "</tr>";
// }
// technologyText += "</table>" + "<br/>" + "<br/>";
// }
// technologyText += "Thank You" + "<br/>" + "DealInsights Portal Tool
// Team.";
// Iterator keyss = commsmedia.keys();
// while (keyss.hasNext()) {
// totalDynamicKey = (String) keyss.next();
// JSONArray totalDynamicValue =
// commsmedia.getJSONArray(totalDynamicKey);
// JSONObject objMail = totalDynamicValue.getJSONObject(0);
// String bidMail = objMail.optString("bid_manager_mail");
// commsmediaText += "This is " + totalDynamicKey
// + "'s Report for any furthur queries please reach out to " + bidMail
// + "<br/>";
// commsmediaText += "<table width='100%' border='1' align='center'>" +
// "<tralign='center'>"
// + "<td><b> Report <b></td>" + "<td><b> Total <b></td>" + "</tr>";
//
// for (int i = 0; i < totalDynamicValue.length(); i++) {
// JSONObject obj = totalDynamicValue.getJSONObject(i);
// total1 = obj.getString("total");
// report = obj.getString("report");
//
// commsmediaText += "<tralign='center'>" + "<td>" + report + "</td>" +
// "<td>" + total1 + "</td>"
// + "</tr>";
// }
// commsmediaText += "</table>" + "<br/>" + "<br/>";
// }
// commsmediaText += "Thank You" + "<br/>" + "DealInsights Portal Tool
// Team.";
// String[] toAddress = { "******" };
// String[] ccAddress = { "****" };
// String[] bccAddress = {};
// sendEmail(session, user, toAddress, ccAddress, bccAddress, "Data
// quality reports for Technology",
// technologyText);
// System.out.println(" Technology message sent successfully...");
//
// String[] tocommsAddress = { "******" };
// String[] cccommsAddress = { "****",
// ****" };
// String[] bcccoAddress = {};
// sendEmail(session, user, tocommsAddress, cccommsAddress,
// bcccoAddress,
// "Data quality reports for CommsMedia", commsmediaText);
// System.out.println(" Commsmedia message sent successfully...");
//
// }
//
// catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
String body = "HI";
String[] toAddress = { ****** };
String[] ccAddress = { ******};
String[] bccAddress = {};
sendEmail(session, user, ccAddress, ccAddress, bccAddress, "Scheduler Testing", body);
System.out.println("Mail successfully sent");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
您的主机必须是 smtp.office365.com。 此外,您必须确保至少使用 TLSv1.2。
final Properties config = new Properties();
config.put("mail.smtp.auth", "true");
config.put("mail.smtp.starttls.enable", "true");
config.put("mail.smtp.starttls.required", "true");
config.put("mail.smtp.ssl.protocols", "TLSv1.2");
config.put("mail.smtp.port", "587");
config.put("mail.smtp.host", "smtp.office365.com");
微软在这里写了这个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.