java-如何使用服务发送电子邮件?

时间:2019-04-09 04:29:57

标签: java

我有一个简单的Web应用程序,不同的用户可以在其中登录。重要功能之一是用户可以访问文档,并将其内容的电子邮件发送给第三方等外部人员。以下是该电子邮件的想法:

enter image description here

这很容易解释,如果要在显示的字段框中像abc@example.com,efg@hotmail.com,...一样发送给多个用户。所有这些,我使用Java Mail API使其起作用,并点击了send按钮,它直接发送给收件人。根本没有问题。

现在,我想通过将此电子邮件功能作为服务来进行修改。这意味着当我发送电子邮件时,填写的内容和信息将存储在MYSQL和服务的表中(在后台运行)将从表格中提取并进行发送。

这是我的功能:

public void sendEmail(String recipient, String subject, String content,
                      String host, String port, final String senderaddress, 
                      final String password) {
    try {
        System.out.println("Please Wait, sending email...");

        /*Setup mail server */
        Properties props = new Properties();
        props.put("mail.smtp.host", host); //SMTP Host
        props.put("mail.smtp.port", port); //TLS Port
        props.put("mail.smtp.auth", "true"); //enable authentication
        props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
        //create Authenticator object to pass in Session.getInstance argument
        Authenticator auth = new Authenticator() {
            //override the getPasswordAuthentication method
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(senderaddress, password);
            }
        };
        Session session = Session.getInstance(props, auth);
        session.setDebug(true);

        // Define message
        MimeMessage message = new MimeMessage(session);
        // Set From: header field of the header.
        message.setFrom(new InternetAddress(senderaddress));
        message.addRecipients(Message.RecipientType.TO,
                              InternetAddress.parse(recipient));
        // Set Subject: header field
        message.setSubject(subject);

        // Now set the actual message
        message.setText(content);
        try {
            Transport.send(message);
        } catch (AddressException addressException) {
            addressException.printStackTrace();
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

因为我不确定如何使它工作,所以可以按照我想要的方式进行吗?

1 个答案:

答案 0 :(得分:1)

1)从用户界面点击“发送邮件”按钮后,您需要调用一种方法,用于将收件人,主题,内容等数据保存在数据库中

2)编写电子邮件发件人服务,该服务从数据库表中检索未送达/待处理邮件,并通过Java Mail API进行发送

3)借助ScheduledExecutorService计划的电子邮件发件人服务