2

我正在使用 javaMail API 发送邮件我的代码工作正常但问题是在发送邮件时发送邮件需要时间(延迟时间接近 15 到 20 秒),这就是我的应用程序出现故障的原因。我想在发送邮件时不花任何时间发送邮件。请给出一个想法

这是我的代码:

public class sendMail {

public static void main(String[] args) {
    Properties props = new Properties();
    props=System.getProperties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "587");

    String mail="XYZ@gmail.com";


    Session session = Session.getDefaultInstance(props,
        new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("abc@gmail.com","********");
            }
        });

    try {
    String emails="xyz@gmail.com"+","+"xyz.kannoju@vxyz.com";
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("xyz.rajender@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(emails));
        message.setSubject("Testing Subject");
        message.setText("Dear Rejender," +
                "\n\n Please find the like!");

    //Transport.send(message);
        Transport tr=session.getTransport("smtp");
        //tr.sendMessage(message, message.getRecipients(message.));
        tr.send(message);
        tr.close();
//Transport         

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
}
4

2 回答 2

3

您可以在自己的线程中运行需要太多时间的方法,从而允许您的主程序继续执行其他操作:

new Thread(new Runnable() {
    public void run() {
        tr.send(message);
        tr.close();
    }
}).start();

ps:你需要 maketrmessagefinal 并且你需要在 run 方法中添加一些错误处理。

于 2012-08-13T10:10:06.267 回答
2

发送电子邮件不提供有关交货时间的任何保证或期望。JavaMail API 不会对进程强加或添加任何延迟,它会立即将电子邮件发送到指定的 SMTP 服务器。从那里到电子邮件被转发到实际收件人的邮箱需要多长时间,这是您无法控制的。根据具体情况,消息可能必须通过多个中间服务器,并且可能会或可能不会在传输过程中的多个点进行处理(病毒检查等)。

如果您有特定的要求,即您的消息必须在一定时间内送达,那么电子邮件是一个非常糟糕的传输选择。我的建议是,重新考虑您的架构以接受可变的、非确定性的交付时间,或者考虑使用其他提供同步通信的消息传递方法是否可行。

于 2012-08-13T11:18:42.183 回答