我正在尝试将电子邮件发送到一个线程中,以使其看起来与通过Gmail网络用户界面发送电子邮件尽可能相似。
根据Gmail documentation,我在Kotlin上编写了下一个代码,该代码可以正常运行,但不能完全运行
val DEFAULT_CHARSET: String = Charsets.UTF_8.name()
// get headers from original email
val messageId = originalMessage.payload.headers.find { it.name.equals("Message-ID", true) }?.value
val subject = originalMessage.payload.headers.find { it.name.equals("Subject", true) }?.value
// creating message
val message = MimeMessage(Session.getDefaultInstance(Properties()))
message.setFrom(InternetAddress(emailFrom, senderNameFrom, DEFAULT_CHARSET))
message.addRecipient(javax.mail.Message.RecipientType.TO, InternetAddress(emailTo))
message.setSubject(subject, DEFAULT_CHARSET)
// this headers are required accoring to [RFC 2822][1] standard
message.setHeader("In-Reply-To", messageId)
message.setHeader("References", messageId)
message.setHeader("Subject", "Re:$subject")
// creates message part
val messageBodyPart = MimeBodyPart()
messageBodyPart.setContent(content, "text/html; charset=UTF-8")
// creates multi-part
val multipart = MimeMultipart()
multipart.addBodyPart(messageBodyPart)
// sets the multi-part as e-mail's content
message.setContent(multipart)
val buffer = ByteArrayOutputStream()
emailMessage.writeTo(buffer)
val requestMessage = Message()
requestMessage.raw = Base64.encodeBase64URLSafeString(buffer.toByteArray())
// this thread ID you should collect from the original message
requestMessage.threadId = threadId
// from the result variable you can collect id, threadId, labels, etc.
val result = gmail.users().messages().send("me", requestMessage).execute()
结果,电子邮件发送到一个线程中(收件箱看起来像这样),但是没有三个点“显示修剪的内容”隐藏了先前邮件的内容:
P.S。我也尝试过将电子邮件作为Gmail草稿发送,但这还是行不通的。
测试是通过java库完成的:
答案 0 :(得分:2)
我知道这个帖子有点老了,但我在同样的问题中偶然发现并设法使它起作用。
首先,您需要在 MimeMessage 对象中设置一个 Message-ID
标头,采用 Gmail 期望的确切格式(“X-Google-Original-Message-ID
标头中。
话虽如此,我也遇到了一个小问题,即在发送消息时 MimeMessage 类覆盖了 Message-ID
标头值,这需要我实现自己的扩展类,如 here 所述。
这是我的 Java 实现的样子:
public class MyMessage extends MimeMessage {
public MyMessage(Session session) {
super(session);
}
protected void updateMessageID() throws MessagingException {
setHeader("Message-ID", "<exampleid-myemail@gmail.com>");
}
}