我的要求是为我们的客户向各种客户发送电子邮件警报,我们计划使用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);
}
}
答案 0 :(得分:0)
您需要阅读这些JavaMail FAQ条目:
然后阅读com.sun.mail.smtp和com.sun.mail.dsn软件包的javadoc以了解有关交付状态通知的信息。
答案 1 :(得分:0)
您必须以不同方式处理问题。如果发送到任何收件人时遇到问题,Transport.send()方法将抛出SendFailedException。该例外将为您提供有关哪些收件人地址失败的信息。您应该捕获该异常,获取失败的地址并记录它们。
答案 2 :(得分:0)
您可能需要查看http://www.ultrasmtp.com。在接收邮件服务器接受,推迟或拒绝邮件时,此服务将向收件人发送通知。还可以选择为已打开的消息设置警报。