我想用java发送邮件而没有延迟

时间:2012-08-13 10:06:48

标签: java javamail

我正在使用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);
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

ps:您需要将trmessage设为final,并且需要在run方法中添加一些错误处理。

答案 1 :(得分:2)

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

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