javamail发送带图片的html信件,图片怎么显示不出来?

liugg 2005-10-12 09:11:46
javamail发送带图片的html信件,图片怎么显示不出来?

用foxmail发送的邮件到163.com,图片就可以显示出来,为什么用javamail就不行呢?邮件也收到了,图片也是附件,就是看到邮件内容的html图片显示不出来。
代码如下:

import java.util.Properties;
import java.util.Date;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class Test {

/**
* @param args
*/
public static void main(String[] args)throws Exception{
sendhtml(args);
}

public static void sendhtml(String[] argv) throws Exception{

String to="q123456789@163.com", subject ="null", from ="abcdef@163.com",
cc = null, bcc = null;
String mailhost ="smtp.163.com";
boolean debug = false;
String username ="abcdef";
String password ="123456";
Properties props = System.getProperties();
props.put("mail.smtp.auth","true");
SMTPAuth auth = new SMTPAuth(username,password);
// could use Session.getTransport() and Transport.connect()
// assume we're using SMTP
if (mailhost != null)
props.put("mail.smtp.host", mailhost);

// Get a Session object
Session session = Session.getDefaultInstance(props, auth);
if (debug)
session.setDebug(true);

// construct the message
Message msg = new MimeMessage(session);
if (from != null)
msg.setFrom(new InternetAddress(from));
else
msg.setFrom();

msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to, false));
if (cc != null)
msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(cc, false));
if (bcc != null)
msg.setRecipients(Message.RecipientType.BCC,
InternetAddress.parse(bcc, false));

msg.setSubject(subject);


MimeBodyPart mbp1= new MimeBodyPart();
String html ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"+
"<html>"+
"<head><title></title></head>"+
"<body>"+
"<b> see the following jpg : it is a car!</b><br>"+
"<a href=http://www.a.com/a.jsp>hello</a><br>"+
"<IMG SRC=cid:7e2a34e1.jpg width=80% height=60%><br>"+
"<b> end of jpg</b>"+
"</body>"+
"</html>";

mbp1.setContent(html,"text/html");

FileDataSource fds = new FileDataSource("c:/7e2a34e1.jpg");
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.setFileName(fds.getName());
mbp2.setText("This is a beautiful car !");
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setHeader("Content-ID",fds.getName());

MimeMultipart mp = new MimeMultipart("related");//alternative
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);

msg.setSentDate(new Date());
Transport.send(msg);
System.out.println(mp.getCount());
System.out.println("\nMail was sent successfully.");

}


}
class SMTPAuth extends javax.mail.Authenticator{
private String user,password;
public SMTPAuth(String u,String p){
user=u;
password=p;
}
public void getuserinfo(String getuser,String getpassword){
user = getuser;
password = getpassword;
}
protected javax.mail.PasswordAuthentication getPasswordAuthentication(){
return new javax.mail.PasswordAuthentication(user,password);
}

}
...全文
1512 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Croatia 2005-11-18
  • 打赏
  • 举报
回复
花了两个小时,终于找到了原因:

mbp2.setHeader("Content-ID",fds.getName());
改成
mbp2.setHeader("Content-ID", "<" + fds.getName() + ">");

参照过 RFC2387,发现<>不是必须的.就是说,163的信箱检查的时候有点太严格了.

我就是用你的代码测试的,修改过的就是上面的那一行和账号信息了.
匪六哥 2005-10-12
  • 打赏
  • 举报
回复
关注!顶一下!
viano 2005-10-12
  • 打赏
  • 举报
回复


如果是这样肯定是相对地址变了, 你用其他邮箱测试一下!
liugg 2005-10-12
  • 打赏
  • 举报
回复
图片确实发送过去了!
用foxmail收下来在html模式下也能看到图片。
就是在163邮箱中在线看时看不到图片,显示一个带小红叉的图片位置(网页上没找到图片都这样显示)。

奇怪,网上搜到的代码差不多都这样写的,难道没有人测试过吗?
viano 2005-10-12
  • 打赏
  • 举报
回复


估计图片没有发过去!
  • 打赏
  • 举报
回复
mark
layueer 2005-10-12
  • 打赏
  • 举报
回复
up
基于Maven的javax.mail发送邮件例子程序 pom.xml添加依赖jar: javax.mail mail ${javamail.version} 1.4.1 /* 功能:加入了参考文章中没有的发送附件的功能.本机测试通过. 参考文章:http://ajava.org/article-722-1.html 使用Javamail发送邮件例子及解释 2012-2-1 00:14| 发布者: mark| 查看: 236| 评论: 0|原作者: mark|来自: ajava.org 摘要: 下面例子演示怎样用javamail发送邮件,在测试之前,我们要下载javamail的类包,并添加入你的工程中,如果你的IDE自javamail的类包,那就很简单,直接import 就行,我使用的是MyEclipse 7.5,自,所以可以直接 ... 下面例子演示怎样用javamail发送邮件,在测试之前,我们要下载javamail的类包,并添加入你的工程中,如果你的IDE自javamail的类包,那就很简单,直接import 就行,mark使用的是MyEclipse 7.5,自,所以可以直接测试下面代码了。 几个javamail类的作用 javax.mail.Properties类 我们使用Properties来创建一个session对象。里面保存里对Session的一些设置,如协议,SMTP地址,是否验证的设置信息 javax.mail.Session类 代表一个邮件session. 有session才有通信。 javax.mail.InternetAddress类 Address确定信件地址。 javax.mail.MimeMessage类 Message对象将存储发送的电子邮件信息,如主题,内容等等 javax.mail.Transport类 Transport传输邮件类,采用send方法是发送邮件。 * */

67,546

社区成员

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

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