简体   繁体   English

如何使用 Javax.mail.Transport 注册 Trasport 侦听器以听取 email 从 email 服务器发送的状态

[英]How to register Trasport Listener with Javax.mail.Transport to hear back email sent status from email server

I am trying to capture email status from email server, For that I have configured TransportListener.我正在尝试从 email 服务器捕获 email 状态,为此我配置了 TransportListener。 But the TransportListener event not triggered after sending email using Transport.send().但是在使用 Transport.send() 发送 email 后未触发 TransportListener 事件。 I came to know Transport.send() will create new instance but we need to register Transport instance with TransportListener.我知道 Transport.send() 将创建新实例,但我们需要使用 TransportListener 注册 Transport 实例。 I did not find the way how to register Transport instance with TransportListener to trigger the methods messageDelivered(), messageNotDelivered() of TransportListener.我没有找到如何用TransportListener注册Transport实例来触发TransportListener的方法messageDelivered()、messageNotDelivered()。

Can any one please suggest how I can register my Transport with TransportListener to know the status of my emails from email server.谁能建议我如何使用 TransportListener 注册我的 Transport 以了解来自 email 服务器的电子邮件的状态。

==Below code snippet to capture delivery status code from mail server==== ==下面的代码片段从邮件服务器捕获传递状态代码====

SMTPTransport transport = (SMTPTransport)session.getTransport("smtp");





        transport.connect("host","Port","Username","password");

        transport.sendMessage(message, message.getAllRecipients());
        //transport.simpleCommand(cmd);
        String response = transport.getLastServerResponse();
        boolean s = transport.getReportSuccess();
        int code = transport.getLastReturnCode();
        System.out.println("response is:" + response);
        System.out.println("report is:" + s);
        System.out.println("Code is:" + code);
        transport.close();

Note that TransportListener will only tell you if your mail server rejects your message, which is that same information you get from an except from Transport.send.请注意,如果您的邮件服务器拒绝您的邮件,TransportListener 只会告诉您,这与您从 Transport.send 中获得的信息相同。 If you want to know whether the message was ultimately delivered to the recipient, you need to learn about Delivery Status Notifications, but see this JavaMail FAQ entry .如果您想知道邮件最终是否已传递给收件人,您需要了解传递状态通知,但请参阅此 JavaMail FAQ 条目

You can add transport listener to get back the status您可以添加传输侦听器以获取状态

        transport.addTransportListener(new TransportListener() {
        @Override
        public void messagePartiallyDelivered(TransportEvent e) {
            // TODO Auto-generated method stub
        }
        
        @Override
        public void messageNotDelivered(TransportEvent e) {
            // TODO Auto-generated method stub
        }
        
        @Override
        public void messageDelivered(TransportEvent e) {
            // TODO Auto-generated method stub
        }
    });
     transport.connect(smtpServer, port, userid, password);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM