我有一个简单的查询,从几个不同的表中选择一些字段,我需要它每月运行一次。我知道我可以使用CREATE EVENT安排每月“工作”,但是,在查询运行后是否可以通过电子邮件将这些信息发送到某些地址?这样我就不需要登录服务器并查看新文件了吗?
答案 0 :(得分:1)
是否可以通过电子邮件将这些信息发送到某些地址 查询运行后?
如果您正在寻找MySQL
内置解决方案,那么可能否。这个特殊应该在应用程序端处理。
因此,如果您在Windows中的linux(OR)cron job
中将查询安排为batch job
,那么您可以配置cron
(或)batch
来发送电子邮件查询完成后收件人列表。
如何配置cron
发送邮件可以查看HERE
答案 1 :(得分:1)
Mysql不支持该功能。
您可以使用cron作业(Quartz)每月安排一份工作,
您可以在此处获取数据并拍摄包含数据的电子邮件。
请参阅以下石英作业链接:
http://www.mkyong.com/java/example-to-run-multiple-jobs-in-quartz/
答案 2 :(得分:1)
我认为Mysql不支持电子邮件发送。
在这种情况下,您可以开发一个辅助程序来发送创建的文件,并使用 - scheduled task,Cron ...执行它(这取决于您正在使用的服务器的操作系统)。 / p>
辅助程序可以像this code一样添加你要附加的文件(attachFiles变量)。
public class EmailAttachmentSender {
public static void sendEmailWithAttachments(String host, String port,
final String userName, final String password, String toAddress,
String subject, String message, String[] attachFiles)
throws AddressException, MessagingException {
// sets SMTP server properties
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.user", userName);
properties.put("mail.password", password);
// creates a new session with an authenticator
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
};
Session session = Session.getInstance(properties, auth);
// creates a new e-mail message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
msg.setRecipients(Message.RecipientType.TO, toAddresses);
msg.setSubject(subject);
msg.setSentDate(new Date());
// creates message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/html");
// creates multi-part
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// adds attachments
if (attachFiles != null && attachFiles.length > 0) {
for (String filePath : attachFiles) {
MimeBodyPart attachPart = new MimeBodyPart();
try {
attachPart.attachFile(filePath);
} catch (IOException ex) {
ex.printStackTrace();
}
multipart.addBodyPart(attachPart);
}
}
// sets the multi-part as e-mail's content
msg.setContent(multipart);
// sends the e-mail
Transport.send(msg);
}
/**
* Test sending e-mail with attachments
*/
public static void main(String[] args) {
// SMTP info
String host = "smtp.gmail.com";
String port = "587";
String mailFrom = "your-email-address";
String password = "your-email-password";
// message info
String mailTo = "your-friend-email";
String subject = "New email with attachments";
String message = "I have some attachments for you.";
// attachments
String[] attachFiles = new String[3];
attachFiles[0] = "e:/Test/Picture.png";
attachFiles[1] = "e:/Test/Music.mp3";
attachFiles[2] = "e:/Test/Video.mp4";
try {
sendEmailWithAttachments(host, port, mailFrom, password, mailTo,
subject, message, attachFiles);
System.out.println("Email sent.");
} catch (Exception ex) {
System.out.println("Could not send email.");
ex.printStackTrace();
}
}
答案 3 :(得分:0)
我自己没有这样做,但我认为没有理由不这样做:创建一个接收电子邮件参数并发送电子邮件的UDF(用户定义函数)。你可以编写UDF,例如在C ++中,手头上有所有必需的库。