JavaMail 添加附件问题

jhg1204 2015-05-14 06:33:15
在使用JavaMail接口实现发邮件的过程中,如果使用传进去的路径添加,邮件将发送失败。
并提示如下入错:
IOException while sending email.

如果是采用显式地路径,则附件添加成功,邮件也发送成功。

添加附件代码如下:

public void addAttachToEmail(final Message message) {
MimeBodyPart dataAttach = new MimeBodyPart();
MimeBodyPart imageAttach = new MimeBodyPart();
MimeBodyPart emailContent = new MimeBodyPart();
try {
emailContent.setText(message.getContent().toString());
dataAttach.attachFile(new File(dataPath));
//dataAttach.attachFile(new File("/mnt/sdcard/backups/msgInfo20150514042114.csv"));
if (!flag) {
dataAttach.attachFile(new File(imagePath));
//imageAttach.attachFile(new File("/mnt/sdcard/Picture/20150514051848.jpg"));
}
dataAttach.setHeader("Content-Type", "text/plain; charset=\"utf-8\"; name=\"mail.txt\"");
} catch (IOException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}

MimeMultipart allMultipart = new MimeMultipart("mixed");
try {
allMultipart.addBodyPart(emailContent);
allMultipart.addBodyPart(dataAttach);
if (!flag) {
allMultipart.addBodyPart(imageAttach);
}

message.setContent(allMultipart);
message.saveChanges();
} catch (MessagingException e) {
e.printStackTrace();
}
}


PS:通过打印出来的Log信息,发现传入的路径是正确的,而且文件是存在的。
望各位前辈指点!
...全文
74 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
andre374 2015-05-15
  • 打赏
  • 举报
回复
引用 1 楼 andre374 的回复:
好久没写过了,不过找了一段以前的代码,你试试看
// 附件部分
			String[] attachFileNames = mailInfo.getAttachFileNames();
			for (int i = 0; i < attachFileNames.length; i++) {
				MimeBodyPart appendixBody = new MimeBodyPart();
				// 设置数据源(即数据的来源)
				DataSource dataSource = new FileDataSource(attachFileNames[i]);
				DataHandler dataHandler = new DataHandler(dataSource);
				// 设置附件的句柄给这个附件对象
				appendixBody.setDataHandler(dataHandler);
				// 设置附件的名称
				try {
					appendixBody.setFileName(MimeUtility.encodeText(dataSource.getName()));
				}
				catch (UnsupportedEncodingException e) {
					LOGGER.error("附件名称转码异常", e);
				}
				mainPart.addBodyPart(appendixBody);
			}
如果没记错的话这个是通用的多附件的代码,最上面一行是附件名的数组。
andre374 2015-05-15
  • 打赏
  • 举报
回复
好久没写过了,不过找了一段以前的代码,你试试看
// 附件部分
			String[] attachFileNames = mailInfo.getAttachFileNames();
			for (int i = 0; i < attachFileNames.length; i++) {
				MimeBodyPart appendixBody = new MimeBodyPart();
				// 设置数据源(即数据的来源)
				DataSource dataSource = new FileDataSource(attachFileNames[i]);
				DataHandler dataHandler = new DataHandler(dataSource);
				// 设置附件的句柄给这个附件对象
				appendixBody.setDataHandler(dataHandler);
				// 设置附件的名称
				try {
					appendixBody.setFileName(MimeUtility.encodeText(dataSource.getName()));
				}
				catch (UnsupportedEncodingException e) {
					LOGGER.error("附件名称转码异常", e);
				}
				mainPart.addBodyPart(appendixBody);
			}

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧