Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 已发送邮件的送达确认_Java_Notifications_Smtp_Jakarta Mail - Fatal编程技术网

Java 已发送邮件的送达确认

Java 已发送邮件的送达确认,java,notifications,smtp,jakarta-mail,Java,Notifications,Smtp,Jakarta Mail,我的要求是为我们的客户向各种客户发送电子邮件警报,为此,我们计划使用JavaMail API。然而,一旦邮件被发送,我们需要根据邮件的状态将数据库中的状态更新为已发送/已交付/失败。请告诉我,对于到达收件人的邮件服务器的邮件,我们如何获得传递通知。没有必要确定此人是否读过邮件,但是,如果我们能够知道这一点,那就太好了。必须检查的是交货。我们怎样才能得到状态。我读到的是,使用“SMTPMessage”我们可以获得状态,但是,我找不到如何读取通知的代码示例。我把我的代码,这是非常样本,我所做的到现在

我的要求是为我们的客户向各种客户发送电子邮件警报,为此,我们计划使用JavaMail API。然而,一旦邮件被发送,我们需要根据邮件的状态将数据库中的状态更新为已发送/已交付/失败。请告诉我,对于到达收件人的邮件服务器的邮件,我们如何获得传递通知。没有必要确定此人是否读过邮件,但是,如果我们能够知道这一点,那就太好了。必须检查的是交货。我们怎样才能得到状态。我读到的是,使用“SMTPMessage”我们可以获得状态,但是,我找不到如何读取通知的代码示例。我把我的代码,这是非常样本,我所做的到现在为止。请让我知道我如何才能实现我们正在努力实现的目标

public class MailSender {
    private int port = 25;
    private String host = "testmailsrvr";
    private String from = "test@test.com";
    private boolean auth = true;
    private String username = "test";
    private String password = "test@123";
    private Protocol protocol = Protocol.SMTP;
    private boolean debug = true;


    public void sendEmail(String strMailID, String strSubject, String strBody) throws MessagingException{
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", port);
        switch (protocol) {
        case SMTPS:
            props.put("mail.smtp.ssl.enable", true);
            break;
        case TLS:
            props.put("mail.smtp.starttls.enable", true);
            break;
        case SMTP:
            props.put("mail.smtp.ssl.enable", false);
            break;
        }

        Authenticator authenticator = null;
        if (auth) {
            props.put("mail.smtp.auth", true);
            authenticator = new Authenticator() {
                private PasswordAuthentication pa = new PasswordAuthentication(username, password);
                @Override
                public PasswordAuthentication getPasswordAuthentication() {
                    return pa;
                }
            };
        }

        Session session = Session.getInstance(props, authenticator);
        session.setDebug(debug);

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));

        InternetAddress[] toAddress = {new InternetAddress(strMailID)};
        message.setRecipients(Message.RecipientType.TO, toAddress);

        message.setSubject(strSubject);
        message.setSentDate(new Date());

        message.setText(strBody);
        Transport.send(message);
    }
}

您需要阅读以下JavaMail常见问题解答条目:


然后阅读javadocs中的和软件包,了解交付状态通知。

您必须以不同的方式处理此问题。如果向任何收件人发送时遇到问题,Transport.send()方法将抛出SendFailedException。异常将为您提供有关哪些收件人地址失败的信息。您应该捕获该异常,获取失败的地址并记录它们。

您可能需要查看。接收邮件服务器接受、延迟或拒绝邮件时,此服务将向收件人发回通知。还有一个选项可以设置已打开邮件的警报