通过Java Mail发送邮件时将替换Message-ID [英] Message-Id is being replaced when sending mail via JavaMail

查看:23
本文介绍了通过Java Mail发送邮件时将替换Message-ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直试图找到解决此问题的方法,所以我决定将其发布在这里。

问题是,当我使用javaMail发送邮件时,它会自动生成Message-ID(我将其存储到数据库中以识别对此邮件的回复),但在发送邮件时,SMPT服务器出于某种原因对其进行了更改,因此我无法跟踪与此邮件相关的任何内容。

例如

我首先通过Gmail向与我的邮件客户端同步的一个帐户发送消息,然后我用消息客户端检查消息,一切正常消息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>

为什么会发生这种情况?

感谢您的帮助

谢谢大家

--编辑

根据建议,我使用了来自javaMail的smtpend demo进行了测试(我实现了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

在发送消息时的smtpend输出之间,生成了消息ID

<60eea6ae-2657-41bd-b475-3a57eff885ac@mydomain.com>

但是,当我去查看这封邮件时,邮件ID不同

<BLU0-SMTP109215E6BB99B93FC106B1E88B00@phx.gbl>

为什么它在运行中更改我的消息ID...我不明白

--编辑2

当我从Hotmail帐户发送邮件时,我注意到现在发生了这个问题 当我从Gmail帐户发送邮件时,Message-ID不再改变(我认为实现我自己的Message-ID生成方法有助于解决这个问题)

感谢您的回复

推荐答案

我知道这是一个老帖子,但此答案仍然可能对人们有所帮助。

您需要在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");

这篇关于通过Java Mail发送邮件时将替换Message-ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆