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 に答える