我有一个邮件守护程序,可以使用带有 SMTP 的 JavaMail (1.4.5) 发送电子邮件通知。建议使用实例方法sendMessage()
而不是静态方法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;
}
}