通过电子邮件发送的MySql查询

时间:2015-06-02 14:00:09

标签: mysql mysql-workbench

我有一个简单的查询,从几个不同的表中选择一些字段,我需要它每月运行一次。我知道我可以使用CREATE EVENT安排每月“工作”,但是,在查询运行后是否可以通过电子邮件将这些信息发送到某些地址?这样我就不需要登录服务器并查看新文件了吗?

4 个答案:

答案 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 ++中,手头上有所有必需的库。