java-mail的程序在服务器上运行出现error的解决方法

java-mail的程序在服务器上运行出现error:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/related;
在eclipse环境下运行没有问题,经过在网上搜索,发现下面两个网址的帖子很管用

就是在sendmail前,加一段代码:

// add handlers for main MIME types
MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);

再打包,在服务器下运行就可以了

出处:http://blog.sina.com.cn/s/blog_72827fb10101d9hf.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用Java Socket API编写的简单的SMTP邮件服务器程序的示例代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SmtpServer { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(25); // SMTP端口号为25 System.out.println("SMTP server started."); while (true) { Socket clientSocket = serverSocket.accept(); System.out.println("Client connected: " + clientSocket.getInetAddress()); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); String line; String from = null; String to = null; StringBuilder data = new StringBuilder(); out.println("220 SMTP server ready"); while ((line = in.readLine()) != null) { System.out.println(line); if (line.startsWith("QUIT")) { out.println("221 Bye"); break; } if (line.startsWith("HELO") || line.startsWith("EHLO")) { out.println("250 Hello"); } else if (line.startsWith("MAIL FROM:")) { from = line.substring(10); out.println("250 OK"); } else if (line.startsWith("RCPT TO:")) { to = line.substring(8); out.println("250 OK"); } else if (line.startsWith("DATA")) { out.println("354 Start mail input; end with <CRLF>.<CRLF>"); while ((line = in.readLine()) != null) { if (line.equals(".")) { break; } data.append(line).append("\r\n"); } out.println("250 OK"); // 将邮件转发到实际的接收邮件服务器 forwardEmail(from, to, data.toString()); } else { out.println("500 Syntax error"); } } in.close(); out.close(); clientSocket.close(); } } catch (IOException e) { e.printStackTrace(); } } private static void forwardEmail(String from, String to, String data) { // 在此处编写将邮件转发到实际的接收邮件服务器的代码 // 可以使用JavaMail API实现邮件发送功能 } } ``` 该程序使用`ServerSocket`监听SMTP端口号(25),当有客户端连接时,接收并解析客户端发送的SMTP命令,分别处理`HELO/EHLO`、`MAIL FROM:`、`RCPT TO:`、`DATA`等命令。当接收到`DATA`命令时,将邮件数据保存到`data`字符串中,并调用`forwardEmail`方法将邮件转发到实际的接收邮件服务器的用户邮箱。 需要注意的是,由于SMTP是基于文本的协议,邮件数据需要按照一定的格式组织并通过网络传输。在实现该程序时,需要对邮件数据进行编码和解码,以保证数据的正确传输。此外,为了保证邮件的安全性,还需要对邮件进行身份验证和加密传输等处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值