java电子邮件附件在正文中以纯文本形式发送
我在使用java邮件(1.4.6)通过java电子邮件发送附件时遇到问题。似乎当我附加任何类型的文档并发送它时,收件人会在正文中获得纯文本格式的文件。而不是,你猜到了,像你期望的那样发送整个文件,而不会干扰正文 代码java电子邮件附件在正文中以纯文本形式发送,java,email,jakarta-mail,Java,Email,Jakarta Mail,我在使用java邮件(1.4.6)通过java电子邮件发送附件时遇到问题。似乎当我附加任何类型的文档并发送它时,收件人会在正文中获得纯文本格式的文件。而不是,你猜到了,像你期望的那样发送整个文件,而不会干扰正文 代码 try { // Create a message MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddre
try
{
// Create a message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(Compose.to));
message.setSubject(Compose.subject);
//message.setText(Compose.body);
//If there are no CC's then skip it. This if seemed to decrease send time.
if(Compose.cc != null)
{
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(Compose.cc));
message.saveChanges();
}
else
message.saveChanges();
/*
* For adding the attached file to the email. This time the if
* statement is used to stop the email attachment process if there
* is none. Other wise due to the way I've set it up it'll try to
* send file path and file name as null, and we fail an otherwise valid email.
*/
if(Compose.filename != null)
{
String file = Compose.filepath;
String fileName = Compose.filename;
Multipart multipart = new MimeMultipart();
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
BodyPart messageBodyPart2 = new MimeBodyPart();
messageBodyPart2.setText(Compose.body);
multipart.addBodyPart(messageBodyPart2);
message.setContent(multipart);
}
else
{
message.setText(Compose.body);
message.saveChanges();
}
//Send the message by javax.mail.Transport .
Transport tr = session.getTransport("smtp"); // Get Transport object from session
tr.connect(smtphost, username, password); // We need to connect
tr.sendMessage(message, message.getAllRecipients()); // Send message
//Notify the user everything functioned fine.
JOptionPane.showMessageDialog(null, "Your mail has been sent.");
}
考虑到这一点,我记得FileDataSource()
是一个重载语句,使用字符串或文件类型作为参数,尝试了这两种方法,得到了相同的结果,但现在我将对文件类型进行更多的实验
编辑:经过更多测试后,我注意到有时文件不会与发送时正文中的内容一起出现。您将附件设置为正文的第一部分。它必须是身体的第二部分
也可以考虑升级和使用该方法来附加文件。
< p>对于身体和附件的每个部分。attachFile方法将为您执行此操作。避免使用JavaMail 1.4.6以支持最新版本,或者至少使用JavaMail 1.4.7,其中包含JavaMail 1.4.6已知问题的修复程序