SMTPでJavaMail(1.4.5)を使用して電子メール通知を送信するメールデーモンがあります。sendMessage()
staticの代わりにinstanceメソッドを使用することをお勧めしますTransport.send()
。だから私はをisConnected()
呼び出す前にとの接続をテストしていますsendMessage()
。ISPのSMTPサーバーを備えた自宅のコンピューターで正常に動作します。ただし、仕事用のコンピューターで同じコードをテストすると、はるかに遅くなります。(私の仕事用コンピューターは自宅用コンピューターよりもはるかに高速です。)したがって、唯一の違いは、会社のExchangeサーバーと通信することだと思います。誰かが同様の問題を経験しましたか?
-ISPを備えた家庭用コンピュータ:isConnected()
10〜100ミリ秒かかります
-Exchangeを使用するコンピューターの作業:isConnected()
5秒かかります。
-スタティックを使用してTransport.send()
メッセージを送信する場合(接続をテストする必要はありません)、仕事用のコンピューターで約300ミリ秒かかります。
サンプルコードは次のとおりです。
public class TestMail {
static Session session;
static InternetAddress fromAddr;
static InternetAddress[] toAddr;
static int n = 1;
public static void main(String[] args) throws MessagingException {
String to = "yourname@gmail.com"; //System.getProperty("user.name") + "@aaaa.com"
String from = "yourname@gmail.com"; //System.getProperty("user.name") + "@aaaa.com"
Properties props = new Properties();
props.put("mail.smtp.host", "mail.optonline.net");
// props.put("mail.smtp.host", "mail.aaaa.com");
session = Session.getInstance(props);
fromAddr = new InternetAddress(from);
toAddr = new InternetAddress[] { new InternetAddress(to) };
Transport bus = session.getTransport("smtp");
bus.connect();
String body = "This is the body of the email.\n";
for (int i = 1; i <= n; ++i) {
Message msg = createMessage(i + "th email", body);
long stime = System.currentTimeMillis();
if (!bus.isConnected()) {
System.out.println("Connecting ....");
bus.connect();
}
long etime = System.currentTimeMillis();
long isConnectedTime = etime - stime;
stime = etime;
bus.sendMessage(msg, toAddr);
// Transport.send(msg);
etime = System.currentTimeMillis();
long sendTime = etime - stime;
System.out.printf("IsConnected: %d, Sending: %d\n", isConnectedTime, sendTime);
}
bus.close();
}
public static Message createMessage(String subject, String body)
throws MessagingException {
Message msg = new MimeMessage(session);
msg.setFrom(fromAddr);
msg.setRecipients(Message.RecipientType.TO, toAddr);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(body);
msg.saveChanges();
return msg;
}
}