javamail附件名称的问题 把附件中文句称进行 base64 编码一下吧。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 标准JAVA中文编码的问题……象下面这样处理一下就OK了……String fileName = new String("设计".getBytes("GBK"),"ISO-8859-1");messageBodyPart.setFileName(fileName); ender:不行,按你这种方法的话,系统会找不到这个文件,因为文件名已经变成了????了.Kiddy:按base64如何编码呢? 如果在设置文件名字之前就按base64编码的话,会有同样的问题:找不到文件.什么时候进行编码呢? 在Javamail包中又一个类叫MimeUtility,其中有对字符集进行编码和解码函数,可以用其中的decodeText和encodeText解决这个问题。另外在Sun的javamail的讨论组中有这方面问题的解决办法 不管字串在 class 里是以什么形式存放,一味 getBytes("GBK"),是产生 java 中文问题的根源,如果编译时是以 iso8859-1 的话,结果肯定是错的,据我所知,有一些 java 编译器就是以 iso8859-1 这种方式编译的。to simontang(oscar)你是发还是收? 解决了,只要在设置附件的名称之前编码一次就行了.代码如下:String filename="测试.pdf";MimeBodyPart b2 = new MimeBodyPart();FileDataSource fds = new FileDataSource(filename);b2.setDataHandler(new DataHandler(fds));b2.setFileName(new String(fds.getName().getBytes("gb2312"),"iso8859-1"));对于中英文混合的情况也可同样解决.谢谢各位了. :)你先把附件贴上了再写文件名啊……给你个例子,看了就知道了……package test;import java.util.Properties;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;public class AttachExample{ public static void main (String[] args) throws Exception { String host = "smtp.XXX.com"; String from = "[email protected]"; String to = "[email protected]"; String fileAttachment = "E:\\附件.txt"; // Get system properties Properties props = System.getProperties(); // Setup mail server props.put("mail.smtp.host", host); // Get session Session session = Session.getInstance(props, null); // Define message MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); message.setSubject("JavaMail带附件邮件示例!"); // create the message part MimeBodyPart messageBodyPart = new MimeBodyPart(); //fill message messageBodyPart.setText("Hi"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(fileAttachment); messageBodyPart.setDataHandler(new DataHandler(source)); String fileName = new String(fileAttachment.getBytes("GBK"),"ISO-8859-1"); int pos = fileName.lastIndexOf("\\"); fileName = fileName.substring(pos + 1); messageBodyPart.setFileName(fileName); multipart.addBodyPart(messageBodyPart); // Put parts in message message.setContent(multipart); // Send the message Transport.send( message ); }} kiddy:我是发邮件的时候加上附件的时候碰上这问题的,另我是在JBuilder 5下开发的. ender:事实上你的解决方法和我的原理是完全一样的.其实早应该想到这一点了.没有仔细看代码. ender:呵呵,留个QQ号如何? 最近我一直在用javamail写邮件的收发程序,还有很多问题呢.一块讨论一下吧.我的QQ号是68546293 :)我不怎么上QQ的……我也没怎么用JAVAMAIL,这段CODE也是从CSDN的文档中心抄来的,当时找这方面的资料,在文档中心找到这篇文章,用了一下发现附件的中文名不正常,就试着改了一下……今天看到你在问这个问题就顺手贴上来了……见笑…… 引用传递的一个问题 如何让图标、标签文字等随窗口大小改变 java 多线程问题 java程序题,寻求帮助 java有时候真的很奇怪,来看看我这代码,想不到是这样的结果 jar下图片显示不了 如何使一个JDialog在完成显示后自动关闭? 如何计算两个日期之间有多少天 为什么没有结果呢!!! JB7能不能在Linux 底下装,和Windows 底下有什么不一样! 在JAVA中如何画箭头? 请问各位有谁知道招商银行的网上个人银行系统是用什么写的?????
象下面这样处理一下就OK了……
String fileName = new String("设计".getBytes("GBK"),"ISO-8859-1");
messageBodyPart.setFileName(fileName);
不行,按你这种方法的话,系统会找不到这个文件,因为文件名已经变成了????了.Kiddy:
按base64如何编码呢?
什么时候进行编码呢?
你是发还是收?
代码如下:
String filename="测试.pdf";
MimeBodyPart b2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(filename);
b2.setDataHandler(new DataHandler(fds));
b2.setFileName(new String(fds.getName().getBytes("gb2312"),"iso8859-1"));对于中英文混合的情况也可同样解决.谢谢各位了.
你先把附件贴上了再写文件名啊……
给你个例子,看了就知道了……
package test;import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class AttachExample
{
public static void main (String[] args) throws Exception
{
String host = "smtp.XXX.com";
String from = "[email protected]";
String to = "[email protected]";
String fileAttachment = "E:\\附件.txt"; // Get system properties
Properties props = System.getProperties(); // Setup mail server
props.put("mail.smtp.host", host); // Get session
Session session = Session.getInstance(props, null); // Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject("JavaMail带附件邮件示例!"); // create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart(); //fill message
messageBodyPart.setText("Hi"); Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart); // Part two is attachment
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(fileAttachment);
messageBodyPart.setDataHandler(new DataHandler(source));
String fileName = new String(fileAttachment.getBytes("GBK"),"ISO-8859-1");
int pos = fileName.lastIndexOf("\\");
fileName = fileName.substring(pos + 1);
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart); // Put parts in message
message.setContent(multipart); // Send the message
Transport.send( message );
}
}
我是发邮件的时候加上附件的时候碰上这问题的,另我是在JBuilder 5下开发的.
事实上你的解决方法和我的原理是完全一样的.其实早应该想到这一点了.没有仔细看代码.
呵呵,留个QQ号如何? 最近我一直在用javamail写邮件的收发程序,还有很多问题呢.
一块讨论一下吧.
我的QQ号是68546293
我不怎么上QQ的……
我也没怎么用JAVAMAIL,这段CODE也是从CSDN的文档中心抄来的,当时找这方面的资料,在文档中心找到这篇文章,用了一下发现附件的中文名不正常,就试着改了一下……今天看到你在问这个问题就顺手贴上来了……见笑……