我一直在查看示例JavaMail发送和几个邮件服务器之间的网络聊天,并发现它做了一些额外的聊天。代码示例也可以在互联网上找到
package example;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Sender {
public static void main(String[] args) {
Properties props = new Properties();
//props.put("mail.smtp.host", "localhost"); // local james
props.put("mail.smtp.port", "25");
props.put("mail.smtp.from", "misterunsub@localhost");
props.put("mail.smtp.sendpartial", "false");
props.put("mail.smtp.ehlo", "false");
props.put("mail.debug", "true");
Session session = Session.getInstance(props,null);
try {
Message message = new MimeMessage(session);
//message.setFrom(new InternetAddress("misterunsub@localhost"));
message.addHeader("List-Unsubscribe", "<mailto:list-manager@localhost?subject=Unsubscribe>");
message.setSubject("Fancy mail from Unsub");
message.setText("Dear Mail Crawler,"
+ "\n\nNo spam to my email, please!");
message.saveChanges();
InternetAddress[] alice = InternetAddress.parse("alice@localhost");
Transport t = session.getTransport("smtp");
t.connect();
t.sendMessage(message, alice);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
我已经在我的localhost上安装了James来接收流量。 (注意james也使用JavaMail发送/转发邮件,但问题与JavaMail有关),James委托发送给JavaMail。因此也表现出了问题。但上面的样本足以证明我所看到的。
在wireshark中,流量看起来像这样
>> HELO localhost
<< 250 localhost Hello localhost (127.0.0.1 [127.0.0.1])
>> MAIL FROM:<misterunsub@localhost>
<< 250 2.1.0 Sender <misterunsub@localhost> OK
>> RCPT TO:<alice@localhost>
<< 250 2.1.5 Recipient <alice@localhost> OK
>> RSET
<< 250 2.0.0 OK
>> RSET
<< 250 2.0.0 OK
>> MAIL FROM:<misterunsub@localhost>
<< 250 2.1.0 Sender <misterunsub@localhost> OK
>> RCPT TO:<alice@localhost>
<< 250 2.1.5 Recipient <alice@localhost> OK
>> DATA
<< 354 ok send data ending with <CRLF>.<CRLF>
>> this is data
>> .
<< 250 2.6.0 Message recieved
>> QUIT
<< 221 2.0.0 localhost Service closing transmission channel
沟通的奇怪之处是第一个'MAIL FROM:','RCPT TO:','RSET'和'RSET' 特别是RSET RSET导致一堆开销。
有人知道如何避免这种情况吗?任何人都可以证实这种行为吗?
更新 该问题似乎与Windows上的vpn用法或loopback / localhost通信有关。 Linux根本没有这个问题。比尔香农建议使用反病毒或防火墙,很可能就是这样。因为反病毒确实注意到了流量。
感谢Bill的快速回复。
答案 0 :(得分:0)
在这些情况下,JavaMail不应该发出RSET。您使用的是哪个版本的JavaMail? JavaMail的调试输出显示了什么?