【问题标题】:Delivery Confirmation For Sent Mail已发送邮件的送达确认
【发布时间】:2014-02-01 02:01:18
【问题描述】:

我的要求是为我们的客户发送电子邮件警报给不同的客户,我们计划为此使用 JavaMail API。但是,一旦发送了邮件,我们需要根据邮件的状态将 DB 中的状态更新为 Sent/Delivered/Failure。请告诉我我们如何获得邮件到达收件人的邮件服务器的递送通知。不必确保此人是否已阅读邮件,但是,如果我们能够知道这一点,那就太好了。必须检查的是交货。我们如何获得状态。我读到的是使用“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);
    }
}

【问题讨论】:

    标签: java notifications smtp jakarta-mail


    【解决方案1】:
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可能想查看http://www.ultrasmtp.com。此服务将在邮件被接收邮件服务器接受、延迟或拒绝后向收件人发送通知。还有一个选项可以为打开的消息设置警报。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 2015-02-02
        • 1970-01-01
        • 2011-11-01
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多