当前位置:  技术问答>java相关

使用javaMail编写发送邮件的程序,报错如下:

    来源: 互联网  发布时间:2015-09-03

    本文导语:  编写一个Mail类,代码如下: public class Mail { //定义发件人、收件人、主题等 String to="jiao0608@0451.com"; String from="dulj@css.com.cn"; String host="211.157.248.3"; String filename=""; String subject="javamail test"; //用于保存发送附...

编写一个Mail类,代码如下:
public class Mail {
//定义发件人、收件人、主题等
String to="jiao0608@0451.com";
String from="dulj@css.com.cn";
String host="211.157.248.3";
String filename="";
String subject="javamail test";

//用于保存发送附件的文件名的集合
Vector file = new Vector();

//做一个可以传发件人等参数的构造
public Mail (String to,String from,String smtpServer,String subject)
{
//初始化发件人、收件人、主题等
this.to=to;
this.from=from;
this.host=smtpServer;
this.subject=subject;
}

//该方法用于收集附件名
public void attachfile(String fname)
{
file.addElement(fname);
}

//开始发送信件的方法
public boolean startSend()
{
//创建Properties对象
Properties props = System.getProperties();

//创建信件服务器
props.put("mail.smtp.host", host);

//得到默认的对话对象
Session session=Session.getDefaultInstance(props, null); 

try 
{
//创建一个消息,并初始化该消息的各项元素
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address={new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject(subject);
//后面的BodyPart将加入到此处创建的Multipart中
Multipart mp = new MimeMultipart();
//利用枚举器方便的遍历集合
Enumeration efile=file.elements();
//检查序列中是否还有更多的对象
while(efile.hasMoreElements())
{
MimeBodyPart mbp=new MimeBodyPart();
//选择出每一个附件名
filename=efile.nextElement().toString();
System.out.println(filename);
//得到数据源
FileDataSource fds=new FileDataSource(filename);
//得到附件本身并至入BodyPart
mbp.setDataHandler(new DataHandler(fds));
//得到文件名同样至入BodyPart
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
System.out.println(mp);
}

//移走集合中的所有元素
file.removeAllElements();
//Multipart加入到信件
msg.setContent(mp);
//设置信件头的发送日期
msg.setSentDate(new Date());
//发送信件
Transport.send(msg);
} catch (MessagingException mex) 
{
mex.printStackTrace();
Exception ex = null;
if ((ex=mex.getNextException())!=null)
{
ex.printStackTrace();
}
return false;
}
return true;
}

public static void send(String smtpServer, String to, String from, String subject, String body)
{
try{
Properties props = System.getProperties();
// -- Attaching to default Session, or we could start a new one --
props.put("mail.smtp.host", smtpServer);
Session session = Session.getDefaultInstance(props, null);
// -- Create a new message --
Message msg = new MimeMessage(session);
// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to, false));
// -- We could include CC recipients too --
// if (cc != null)
// msg.setRecipients(Message.RecipientType.CC
// ,InternetAddress.parse(cc, false));
// -- Set the subject and body text --
msg.setSubject(subject);
msg.setText(body);
// -- Set some other header information --
msg.setHeader("X-Mailer", "LOTONtechEmail");
msg.setSentDate(new Date());
// -- Send the message --
Transport.send(msg);
System.out.println("Message sent OK.");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}


编写一个test类对Mail类进行测试:
public class test
{
public static void main(String[] args)
{
String to="jiao0608@0451.com";
String from="jiao0608@0451.com";
String smtpServer="mail.0451.com";
String filename="";
String subject="javamail test";
String body = "wo shi zhu!";

Mail.send(smtpServer, to, from,subject, body);
/*Mail mail = new Mail(to,from,smtpServer,subject);
mail.attachfile("Mail.java");
boolean b = mail.startSend () ;
System.out.println(b);
*/
System.exit(0);
}
}

若调用Mail.send方法,则报错如下:
javax.mail.SendFailedException: Sending failed;
  nested exception is:
        class javax.mail.MessagingException: IOException while sending message;
  nested exception is:
        javax.activation.UnsupportedDataTypeException: no object DCH for MIME ty
pe text/plain; charset=us-ascii
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at com.css.mail.Mail.send(Mail.java:120)
        at test.main(test.java:21)


将Mail.send方法屏蔽,调用startSend方法,则报错如下:
javax.mail.SendFailedException: Sending failed;
  nested exception is:
        class javax.mail.MessagingException: IOException while sending message;
  nested exception is:
        javax.activation.UnsupportedDataTypeException: no object DCH for MIME ty
pe multipart/mixed; boundary="----=_Part_0_2951274.1031999878766"
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at com.css.mail.Mail.startSend(Mail.java:83)
        at test.main(test.java:24)
javax.mail.MessagingException: IOException while sending message;
  nested exception is:
        javax.activation.UnsupportedDataTypeException: no object DCH for MIME ty
pe multipart/mixed; boundary="----=_Part_0_2951274.1031999878766"
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:356)
        at javax.mail.Transport.send0(Transport.java:163)
        at javax.mail.Transport.send(Transport.java:80)
        at com.css.mail.Mail.startSend(Mail.java:83)
        at test.main(test.java:24)

我检查了一下,不知道程序中到底哪里出了问题,还请大虾指教!

|
我认为代码没有问题
你的classpath里应该包括activation.jar,mail.jar吧
你的classpath还有些什么?

|
好象是因为你发的是复合邮件,而你的邮件服务器不支持,我不是很肯定。


        javax.activation.UnsupportedDataTypeException: no object DCH for MIME ty
pe multipart/mixed; boundary="----=_Part_0_2951274.1031999878766"

    
 
 

您可能感兴趣的文章:

  • 请教如何使用Java编写的Applet程序关闭浏览器??
  • 如何使用自己编写的一个Bean?
  • vc编写dll动态连接库(编译过的)能在unix上开发使用吗?
  • 使用editplus编写java如何编译成字节码文件,如何解释
  • 类unix系统编写大规模响应网络服务程序使用什么套接字模型
  • 我是一个linux新手,不知道如何在linux进行C语言的编写和使用?
  • 大家好,你们编写JavaBean时通常使用什么工具,用什么要方便点?
  • 自己编写一个简单的字符设备驱动程序以后,改怎么使用它?
  • 编写so时,使用了“打开设备语句”。
  • 菜鸟问题——其他语言怎样使用Java编写的程序(明确地说,使Class)
  • 请问如何使用Vim,使其可以在编写C代码时自动缩进
  • linux下使用libxml库C编写的解析XML的程序
  • Linux中.L文件?如何编写及使用?
  • 使用QT和GTK编写GUI各有什么特点。
  • 编写一个库A, 用到库B, 如何让A的使用者不用显示的加入 -lB ?
  • 编译和使用自己编写的linux内核模块的问题
  • 自己编写的javabean ,可以用import导入使用么?
  • 请问:在UINX如何编写、使用动态连接库???
  • 使用python编写批量卸载手机中安装的android应用脚本
  • 解析使用C++编写无错代码的方法技巧
  • 请问使用JavaMail如何将一个邮件原样转发给另外一个人?
  • 请问使用JavaMail如何将一个邮件原样转发给另外一个人?
  • 怎样使用javamail发送带有html格式信息的文件
  • 怎样在Jbuilder3/4中安装使用javamail包?
  • JSP中使用JavaMail
  • 如何在JSP中使用JAVAMAIL发送需要身份验证的信件???
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 急问:!!如何使用shell作如下操作?
  • 使用iceblood的qmail安装包为什么有如下错误提示
  • 使用SSH登录另一台主机时,提示如下错误?!
  • 如何在sco unix openserver5。06系统内使用第二个unix分区?(具体如下)
  • 使用WINGRUB引导安装FC5时,出现如下错误,导致不能安装。
  • LXR使用时出现如下错误,请问为什么?
  • 在磁盘阵列3510上做了RAID5,分一个区,容量419GB,使用newfs命令时出现如下信息
  • 我在applet使用鼠标事件的时侯总会出现如下异常,编译通过。
  • 我的代码中已经假如smtp认证,为什么在tomcat上还提示客户端没有验证?使用smtp.sohu.com或smtp.sina.com.cn都不行代码如下:
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3