gpt4 book ai didi

第一行附件前的 JavaMail Content-Disposition

转载 作者:行者123 更新时间:2023-12-04 05:21:13 25 4
gpt4 key购买 nike

我正在尝试将多个文件附加到电子邮件中。

除了文本文件缺少第一行之外,它工作正常。

注意:为了可读性,删除了所有错误处理。此外,假设正确设置了收件人/发件人/主题等(电子邮件发送完美 - 除了附件问题)。

首先,这是我正在使用的代码:

MimeMessage oMessage = new MimeMessage(oSession);
// Create a multipart message
Multipart oMultiPart = new MimeMultipart();

// Create the message part
BodyPart oMessageBodyPart = new MimeBodyPart();

// Set the Message Body
String strFormat = oEmail.getFormat();
String strBody = oEmail.getBody();

oMessageBodyPart.setContent(strBody,strFormat);
oMultiPart.addBodyPart(oMessageBodyPart);


List<String> oAttachmentNames = oEmail.getAttachments();
for (String strAttachmentName : oAttachmentNames)
{
// Parse file from URL
URL oURL = new URL(strAttachmentName);

MimeBodyPart oAttachmentPart = new MimeBodyPart(oURL.openStream());

oAttachmentPart.setFileName(strAttachmentName);
oMultiPart.addBodyPart(oAttachmentPart);
}
// Add all contents (body + attachments)
oMessage.setContent(oMultiPart);

顺便提一下文本文件如下:
This is the Test file
(intentional line break)
Line 1
Line 2

这是调试输出:
Content-Type: multipart/mixed; 
boundary="----=_Part_0_29194312.1354442889470"

------=_Part_0_29194312.1354442889470
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Plain Text Email.

------=_Part_0_29194312.1354442889470
This is the Test file
Content-Disposition: attachment;
filename="http://mysite.com/temp/Test.txt"

Line 1
Line 2

------=_Part_0_29194312.1354442889470--
.
250 OK id=1Tf6T5-0004E9-Nn
QUIT

最佳答案

根据我在几个涉及电子邮件消息的项目中的经验,无论是否带有附件,我知道以下内容可以完美地工作。我一直使用 Java Activation 框架在我的代码和用于编写电子邮件的各种数据源之间提供一个额外的抽象层。几年前,该框架已集成到标准 Java 发行版中,因此您已经拥有它。您可以在下面找到对其用法的一些简要介绍的链接,因此我不会解释其工作原理,而只是向您展示我最近一个涉及发送多部分电子邮件的项目的摘录。鉴于 Notification 对象中提供的电子邮件规范,这里是配置空 MimeMessage 的代码。通知对象有一个附件对象数组。附件对象提供了一个字节数组和一些元数据,以帮助在电子邮件中创建文件附件。

private void configureMessage(Message message, Notification notification) throws MessagingException {
DataHandler messageDataHandler = new DataHandler(notification.getMessage(), "text/plain; charset=\"UTF-8\"");
if (notification.getAttachments() != null && !notification.getAttachments().isEmpty()) {
log.debug("configureMessage: Adding attachments.");
MimeMultipart multipart = new MimeMultipart();

// een body part voor de tekstuele boodschap
BodyPart mainBodyPart = new MimeBodyPart();
mainBodyPart.setDataHandler(messageDataHandler);
multipart.addBodyPart(mainBodyPart);

for (Attachment attachment : notification.getAttachments()) {
log.debugv("configureMessage: Adding attachment {0}.", attachment);
// een body part voor de attachment
MimeBodyPart attachmentPart = new MimeBodyPart();
ByteArrayDataSource attachmentDataSource =
new ByteArrayDataSource(attachment.getBytes(), attachment.getMimeType());
attachmentPart.setDataHandler(new DataHandler(attachmentDataSource));
attachmentPart.setDisposition(Part.ATTACHMENT);
attachmentPart.setFileName(attachment.getFileName());
multipart.addBodyPart(attachmentPart);
}
message.setContent(multipart);
} else {
log.debug("configureMessage: No attachments.");
message.setDataHandler(messageDataHandler);
}
}

如您所见,进入消息的所有数据首先包装在 DataHandler 中。文本消息进入这样的数据处理程序:
  DataHandler messageDataHandler = new DataHandler(notification.getMessage(), "text/plain; charset=\"UTF-8\"");

如果正文部分的输入不仅仅是字符串,而是其他形式,那么您可以使用 DataSource,特定于您拥有的输入类型。如果你有一个 URL,那么使用 URLDataSource;如果您有文件,则使用 FileDataSource。
在这个例子中,我们只处理其数据是在其他地方生成的字节数组的附件。因此数据源是一个ByteArrayDataSource。

这是一个简单的 introduction进入激活框架。

关于第一行附件前的 JavaMail Content-Disposition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com