javamail 发送邮件同时带附件和邮件正文问题.

genius131421 2008-09-19 10:38:53
我用javamail做了一个邮件发送的应用,可是当有附件的时候就没有正文了。
代码:<%
//String host = "smtp.qq.com";
String host = "mail.sinosoft.com.cn";
String[] to = request.getParameter("to").split("&");
String from = request.getParameter("from");
String subject = request.getParameter("subject");
String messageText = request.getParameter("body");
boolean sessionDebug = false;

Properties props = System.getProperties();
Session mailSession = Session.getInstance(props, null);
props.put("mail.smtp.host ", host);
props.put("mail.smtp.auth", "true");
props.put("mail.transport.protocol", "smtp");

Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
MimeBodyPart mbp2 = new MimeBodyPart();
MimeBodyPart mbp3 = new MimeBodyPart();
FileDataSource fds1 = new FileDataSource(request.getParameter("file1"));
FileDataSource fds2 = new FileDataSource(request.getParameter("file2"));
mbp1.setDataHandler(new DataHandler(fds1));
mbp2.setDataHandler(new DataHandler(fds2));
mbp3.setText(messageText);
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
mp.addBodyPart(mbp3);
mbp1.setFileName(fds1.getName());
mbp2.setFileName(fds2.getName());
mailSession.setDebug(sessionDebug);

Message msg = new MimeMessage(mailSession);

msg.setFrom(new InternetAddress(from));
//InternetAddress[] address = {new InternetAddress(to)};
//msg.setRecipients(Message.RecipientType.TO, address);
InternetAddress[] address = new InternetAddress[to.length];
for(int i=0; i<to.length; i++){
System.out.println(to[i]);
address[i] = new InternetAddress(to[i]);
}
msg.addRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
msg.setSentDate(new Date());

//这里这两句只有后写的一句生效。。。
msg.setContent(mp);
msg.setText(messageText);

Transport transport = mailSession.getTransport("smtp");
transport.connect(host, "name", "password");
transport.sendMessage(msg,msg.getAllRecipients());

out.println("Mail was sent to " + to);
out.println(" from " + from);
out.println(" using host " + host + ".");

%>
...全文
306 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
veggiehui 2011-09-05
  • 打赏
  • 举报
回复
加上判断有无附件:
if (this.attachment!=null) {
msg.setContent(mp);
}else{
msg.setContent( message, "text/html;charset=utf-8" );
}

veggiehui 2011-09-05
  • 打赏
  • 举报
回复
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
mp.addBodyPart(mbp3);
mbp1.setFileName(fds1.getName());
mbp2.setFileName(fds2.getName());


后面两句放在前面。
veggiehui 2011-09-05
  • 打赏
  • 举报
回复
//这里这两句只有后写的一句生效。。。
msg.setContent(mp);
msg.setText(messageText);

这样就是只有文本没有附件了么?
yhy1987 2011-09-05
  • 打赏
  • 举报
回复
问题解决了吗?怎么解决的呢?
Kit_LO 2008-09-19
  • 打赏
  • 举报
回复
正在学习中,但我解决不了你的问题,帮你顶
代码转载自:https://pan.quark.cn/s/c92fcacd5d38 JavaMail邮件发送完成后通过JavaMail进行邮件接收时可能遇到的格式问题JavaMail是Java应用程序中广泛应用的邮件处理库,具备发送及接收邮件的功能。 在实际操作中,邮件发送之后,可能需要借助JavaMail将其获取回来以进行解析,例如解析邮件中的图片、附件等要素。 然而,邮件发送过程中存在的格式问题可能会引发解析困难或失败。 本文将探讨JavaMail邮件发送之后通过JavaMail进行邮件接收时可能遇到的格式问题,主要关注邮件发送与接收的格式问题,以及如何准确地解析邮件中的图片、附件等要素。 一、JavaMail邮件发送JavaMail提供了多种途径来发送邮件,包括普通邮件、HTML邮件、含附件邮件等。 其中,HTML邮件和含附件邮件是最为复杂的邮件发送场景。 HTML邮件内含嵌入图片和附件,需要精确地设定邮件的MIME类型和编码格式。 二、JavaMail邮件接收JavaMail提供了多种途径来接收邮件,涵盖POP3、IMAP和SMTP等协议。 对于邮件的解析,JavaMail提供了Multipart类来解析邮件中的多部分内容。 三、邮件解析流程邮件解析流程主要包括以下步骤:1. 获取邮件内容:运用JavaMail的Multipart类来获取邮件的多部分内容。 2. 解析邮件头:借助JavaMail的Header类来解析邮件头,获取邮件的主题、发件人、收件人等详细信息。 3. 解析邮件主体:通过JavaMail的BodyPart类来解析邮件主体,获取邮件中的图片、附件等要素。 四、cid解析cid(Content-Id)是邮件中的一种特殊头信息,用于标识邮件中的图片、附件...

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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