我正在测试sendmail示例,如https://javaee.github.io/javamail/FAQ中所述。这是一个简单的邮件发送操作,没有SSL和没有附件。它在任何地方都能正常工作,但是在客户机上,当邮件api更新时,我们就有了脱脂性能。
服务器是windows,java 1.8.131,使用相同的邮件服务器和邮件帐户,在所有测试用例上使用相同的地址和java源。唯一的区别就是使用了mailapi。我运行这个程序时
java -cp javax.mail.1.X.X.jar;sendmailtesttool.jar SendMail我为每个邮件api尝试了100次,并获得了平均持续时间。
资料来源:
Properties properties = new Properties();
properties.put("mail.smtp.host", 192.168.0.X); // use default port25
Session session = Session.getInstance(properties);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(..);
msg.setSubject(..);
msg.setRecipients(..);
//no attachments
MultiPart mp = new MultiPart();
MimeBodyPart bp = new MimeBodyPart();
DataSource ds = ByteArrayDataSource("foo"..);
DataHandler dh = new DataHandler(ds);
bp.setDataHandler(dh);
mp.addBodyPart(bp);
msg.setContent(mp);
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
msg.saveChanges(); // is really needed ? (no reply/forward)
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();测试工具的输出
Java 1.4.0
Sending mail.....start
Setting port to:25
Setting host to:192.168.0.213
Set additional session prop host to prevent HELO
Set additional session prop from to prevent EHLO
Session generated with authenticator took:63
Message generated took:47
Parse from address took:0
Set from address to message took:0
Set recipients took:0
Get all recipients took:0
Set cc, bcc took:0
Parse subject took:16
Set subject to message took:0
Set body text took:0
Set content took:0
Set sent date took:15
Transport generated took:32
Connected to transport took:93
Save changes took:0
Message send took:94
Transport closed took:0
Message id fetched took:0
Sending mail.....completed in 391
Average took: *391.0*Java 1.5.6
Sending mail.....start
Setting port to:25
Setting host to:192.168.0.213
Set additional session prop host to prevent HELO
Set additional session prop from to prevent EHLO
Session generated with authenticator took:62
Message generated took:63
Parse from address took:0
Set from address to message took:16
Set recipients took:0
Get all recipients took:0
Set cc, bcc took:0
Parse subject took:0
Set subject to message took:0
Set body text took:0
Set content took:0
Set sent date took:15
Transport generated took:32
Connected to transport took:9126
Save changes took:0
Message send took:47
Transport closed took:0
Message id fetched took:0
Sending mail.....completed in 9423
Average took: *9423.0*jvm邮件调试输出
Java 1.4.0
DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.s
mtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "192.168.0.X", port 25, isSSL
false
220 mail.******.com ESMTP Postfix
DEBUG SMTP: connected to host "192.168.0.X", port: 25
EHLO WIN-0RL58R42TTN
250-mail.******.com
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "102400000"
DEBUG SMTP: Found extension "VRFY", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
DEBUG SMTP: Found extension "AUTH=PLAIN", arg "LOGIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
am9iaW4uZWxhbmppY2thbEBhbGNvbmVsZWN0cm9uaWNzLmNvbQ==
334 UGFzc3dvcmQ6
Sk9CSU5ANzc3TnM=
235 2.7.0 Authentication successful
DEBUG SMTP: use8bit false
MAIL FROM:<sender@******.com>
250 2.1.0 Ok
RCPT TO:<receiver@******.com>
250 2.1.5 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: receiver@******.com
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Thu, 14 Dec 2017 14:17:46 +0530 (IST)
From: sender@******.com
To: receiver@******.com
Message-ID: <396180261.01513241266298.JavaMail.sender@******
.com>
Subject: test3
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_2093176254.1513241266126"
------=_Part_0_2093176254.1513241266126
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
test
------=_Part_0_2093176254.1513241266126--
.
250 2.0.0 Ok: queued as 7E38D48F0411
QUIT
221 2.0.0 ByeJava 1.5.6
DEBUG: setDebug: JavaMail version 1.5.6
DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.s
mtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "192.168.0.X", port 25, isSSL
false
220 mail.******.com ESMTP Postfix
DEBUG SMTP: connected to host "192.168.0.X", port: 25
EHLO WIN-0RL58R42TTN
250-mail.******.com
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "102400000"
DEBUG SMTP: Found extension "VRFY", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
DEBUG SMTP: Found extension "AUTH=PLAIN", arg "LOGIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: protocolConnect login, host=192.168.0.X, user=sender@alc
onelectronics.com, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN
DIGEST-MD5 NTL
M XOAUTH2
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<sender@******.com>
250 2.1.0 Ok
RCPT TO:<receiver@******.com>
250 2.1.5 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: receiver@******.com
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Thu, 14 Dec 2017 14:18:03 +0530 (IST)
From: sender@******.com
To: receiver@******.com
Message-ID: <1109371569.1.1513241292669@******.com>
Subject: test3
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1349393271.1513241283434"
------=_Part_0_1349393271.1513241283434
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
test
------=_Part_0_1349393271.1513241283434--
.
250 2.0.0 Ok: queued as D894D48F0411
DEBUG SMTP: message successfully delivered to mail server
QUIT
221 2.0.0 Bye发布于 2017-12-14 08:40:59
我不相信只有一个理由让它变慢。您可能需要在示例下面更改一些默认值。
在邮件api的1.6文档中 for property mail.mime.address.usecanonicalhostname它声明:
使用InetAddress.getCanonicalHostName方法确定InternetAddress.getLocalAddress方法中的主机名。对于某些网络配置,InetAddress.getCanonicalHostName可能比较慢,或者可能返回地址而不是主机名。在这种情况下,将此系统属性设置为false将导致使用InetAddress.getHostName方法。默认值为真。
因此,如果使用false更改默认值,则可能会更改其性能。
我还建议您检查一下java邮件apis发布说明,找出一些线索。
发布于 2017-12-14 08:49:15
代码中有错误。传输对象是用session.getTransport而不是session.getInstance获得的;我们看不到在哪里初始化调用transport.connect(主机,..)中的主机;如果您设置正确的属性,并且没有任何DNS解决问题,那么连接(用户、密码)就足够了。
https://stackoverflow.com/questions/47807784
复制相似问题