【问题标题】:How to reply to a message using Gmail API in java?如何在 java 中使用 Gmail API 回复邮件?
【发布时间】:2018-11-14 22:33:42
【问题描述】:

我正在尝试使用 gmail api 回复消息,并且在设置 In-Reply-To 和引用标头时感到困惑,我不确定将值设置为什么以及如何设置值。请在下面找到我的代码:

public static Message createMessageWithEmail(MimeMessage emailContent) throws Exception {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    emailContent.addRecipient(javax.mail.Message.RecipientType.TO, emailContent.getFrom()[0]);
    emailContent.setReplyTo(emailContent.getFrom());
    emailContent.setHeader("In-Reply-To", emailContent.getMessageID());
    emailContent.setHeader("References",emailContent.getMessageID());
    emailContent.setText("hi thank you");
    emailContent.writeTo(buffer);
    byte[] bytes = buffer.toByteArray();
    String encodedEmail = Base64.encodeBase64URLSafeString(bytes);
    Message message = new Message();
    message.setRaw(encodedEmail);
    return message;
  }




private static Message replyMessage(Gmail service, String userId, MimeMessage emailContent,Message messages) throws Exception {
    Message message = createMessageWithEmail(emailContent);
    message.setThreadId(messages.getThreadId());
    message.setId(messages.getId());
    message = service.users().messages().send(userId, message).execute();
    System.out.println("Message id: " + message.getId());
    System.out.println(message.toPrettyString());
    return message;
  }

【问题讨论】:

    标签: java gmail gmail-api


    【解决方案1】:

    这两个标头都来自RFC2822

    与您的问题相关的部分包含在第 23-24 页(我的重点和格式):

    创建消息回复时,“In-Reply-To:”和 结果消息的“参考:”字段构造为 如下:

    • “In-Reply-To:”字段将包含作为回复的邮件(“父邮件”)的“Message-ID:”字段的内容。如果有多个父消息,则“In-Reply-To:”字段将包含所有父消息的“Message-ID:”字段的内容。如果任何父消息中没有“Message-ID:”字段,则新消息将没有“In-Reply-To:”字段。
    • “References:”字段将包含父级“References:”字段(如果有)的内容,然后是父级“Message-ID:”字段(如果有)的内容。如果父消息不包含“References:”字段但确实有一个“In-Reply-To:”字段 > 包含单个消息标识符,则“References:”字段将包含父级的“In-回复:”字段后跟父级的“消息 ID:”字段(如果有)的内容。如果父级没有“References:”、“In-Reply-To:”或“Message-ID:”字段,则新消息将没有“References:”字段。

    【讨论】:

    • 包含“Message-ID:”的内容是什么意思,如果是这种情况,我认为我想在这里添加它 emailContent.setHeader("In-回复", emailContent.getMessageID()); emailContent.setHeader("参考",emailContent.getMessageID());
    • @user2987322 是的,您正确设置了此值。这些标头的要点是链接消息,例如在同一个线程中,尽管GMail also uses Subject field for that purpose.
    • 我不确定我是否理解。对不起!
    • @user2987322 让您有 id 为 42 的消息 A,然后有人用消息 B 回复该消息。该消息 B 应该在您询问的两个标题中设置 42,以便发送邮件客户端能够正确链接消息(即了解两者来自同一个线程)。
    猜你喜欢
    • 2016-11-25
    • 2016-06-03
    • 1970-01-01
    • 2018-07-17
    • 2021-01-17
    • 2016-10-01
    • 2016-01-20
    • 2020-01-25
    • 2014-12-14
    相关资源
    最近更新 更多