我试图找到解决方案,运气好,所以我决定在这里发布。
问题是,当我用javaMail发送消息时,它会自动生成一个Message-Id(我存储到我的数据库中的那个,然后识别对此消息的回复)但是它由于某种原因被smpt服务器更改了当邮件被发送时,我将无法跟踪与此邮件相关的任何信息。
例如
我首先通过gmail向我的邮件客户端发送的一个帐户发送邮件,然后我用我的邮件客户端检查邮件,一切正常,Message-Id是
<CAPDSfCN1qPAhBCRmFK-zwP=MM=KjgpYuvhVRFAPwz1PjOqtnFA@mail.gmail.com>
然后我通过我的消息客户端发送此消息的回复,javaMail生成的id是
<1907960987.0.1322086080735.JavaMail.root@smtp.live.com>
最后,当我在我的电子邮件帐户中查看回复时,其标题中包含以下值
Message-ID: <BLU0-SMTP33091BE2B32A7F46E370665C2C90@phx.gbl>
失败
In-Reply-To: <CAPDSfCN1qPAhBCRmFK-zwP=MM=KjgpYuvhVRFAPwz1PjOqtnFA@mail.gmail.com>
好的
如您所见,Message-Id已更改,我原以为
<1907960987.0.1322086080735.JavaMail.root@smtp.live.com>
为什么会这样?
我感谢任何帮助
谢谢大家
- 编辑
根据sugestions我使用javaMail中的smtpsend演示进行测试(我实现了MimeMessage的子类来生成我自己的Message-Id)。
java -jar -Dmail.smtp.starttls.enable=true -Dmail.smtp.port=587 SMTPSend.jar -d -M smtp.live.com -U myaccount@hotmail.com -P mypass -o myaccount@hotmail.com -A anotheraccount@gmail.com
在发送消息时,在smtpsend输出之间,生成了Message-Id
<60eea6ae-2657-41bd-b475-3a57eff885ac@mydomain.com>
但是,当我在anotheraccount@gmail.com上查看此消息时,Message-Id不同
<BLU0-SMTP109215E6BB99B93FC106B1E88B00@phx.gbl>
为什么它会动态改变我的Message-Id ......我不明白
- 编辑2
我注意到,当我从hotmail帐户发送邮件时,问题就出现了 当我从gmail帐户发送邮件时,message-id不再改变(我认为实现我自己的Message-Id生成方法有助于解决这个问题)
感谢您的回复
答案 0 :(得分:1)
我知道这是一个老话题,但这个答案仍然可以帮助别人。
你需要在MimeMessage中否决updateMessageID(),因为它在每次发送电子邮件之前都会被调用。
class MyMessage extends MimeMessage {
public MyMessage(Session session) {
super(session);
}
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "<your-message-id@domain.nl>");
}
}
如果您想为每个MyMessage传递唯一ID ...
class MyMessage extends MimeMessage {
String uniqueMessageId;
public MyMessage(Session session, String uniqueMessageId) {
super(session);
this.uniqueMessageId = uniqueMessageId;
}
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "<" + uniqueMessageId + ">");
}
}
然后调用它,例如:
MyMessage message = new MyMessage(session, "201610131428_newsletter1@domain.nl");
答案 1 :(得分:0)
您的邮件服务器坏了。它不应该更改Message-ID标头。 将问题报告给邮件服务器的所有者。