Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想用java发送邮件而不延迟_Java_Jakarta Mail - Fatal编程技术网

我想用java发送邮件而不延迟

我想用java发送邮件而不延迟,java,jakarta-mail,Java,Jakarta Mail,我正在使用javaMail API发送邮件,我的代码运行良好,但问题是发送邮件需要时间(延迟时间接近15到20秒),这就是我的应用程序失败的原因。我希望在发送邮件时不占用任何时间发送邮件。请给出一个想法 这是我的密码: public class sendMail { public static void main(String[] args) { Properties props = new Properties(); props=System.getProperties();

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

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

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

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

您可能会在自己的线程中运行该方法,从而使主程序继续执行其他操作:

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

ps:您需要将
tr
消息
设置为最终版本,并且需要在运行方法中添加一些错误处理。

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


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

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


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

非常感谢,我已经尝试了上面的建议,但发送邮件仍然需要时间。非常感谢,我已经试过上面你的建议,但它仍然需要时间发送邮件。