lumisoft-关于邮件发送,附件名乱码问题。

问题描述

关于邮件发送,附件名乱码问题。

我在写基于lumisoft 邮件发送时遇见个很头疼的问题--附件名为汉字,且长度过长就不能被其他邮件系统正常解析。
首先我在将附件写入邮件body时使用:
multipartMixed.BodyParts.Add(MIME_Message.CreateAttachment(stream, attachments[attach]));
发现有的邮件系统不能正确解析中文名,但是部分可以。我认为可能是编码问题。然后做了一下修改。
MIME_Entity attachment = new MIME_Entity();
attachment = MIME_Message.CreateAttachment(stream, attachments[attach]);
attachment.ContentDisposition.Param_FileName = AttachmentNameStr(attachments[attach]);
attachment.ContentType.Param_Name = AttachmentNameStr(attachments[attach]);
multipartMixed.BodyParts.Add(attachment);
private string AttachmentNameStr(string fn)
{
string Charset = "gb2312";
if (Encoding.Default.GetByteCount(fn) > fn.Length)
{
return "=?" + Charset.ToUpper() + "?B?" + Base64Encode(fn) + "?=";
}
else
{
return fn;
}
}
private string Base64Encode(string str)
{
byte[] barray;
barray = Encoding.Default.GetBytes(str);
return Convert.ToBase64String(barray);
}

修改后,基本上邮件系统能够正常解析邮件的附件名称 但是名称过长 例如“KTL-悬赏园豆越多您的问题会越受关注-LKT-764 认真清晰的提问-2015Apr21”
所有邮件都不能解析到名称。
我又看了看其他邮件发过来的附件名称的解码
?gb2312?Q?KTL-=CA=DA=C8=A8=C9=CC=C6=B7=C9=EA=C7=EB=CA=E9-LKT-764_=C4=DA=D2=C2=CA=D5=C4=C9=B0=FC-2015Apr21.xls?=
我想可能是编码的问题。我又换了编码方式
private string AttachmentNameStr(string fn)
{
string Charset = "gb2312";
if (Encoding.Default.GetByteCount(fn) > fn.Length)
{
return "=?" + Charset.ToUpper() + "?Q?" + DecodeQuotedPrintable(fn) + "?=";
}
else
{
return fn;
}
}

#region 将字符串编码为QuotedPrintable字符串
private string DecodeQuotedPrintable(string str)
{
string Result = "";
byte[] vBuffer = Encoding.Default.GetBytes(str);
foreach (byte vByte in vBuffer)
// 可见字符并非"="(#61)
if ((vByte >= 33 && vByte <= 60) || (vByte >= 62 && vByte <= 126))
Result += (char)vByte;
else Result += "=" + vByte.ToString("X2");
return Result;
}
#endregion

结果名称还是没有。。。

求指点。。。。

解决方案

你的 Encoding.Default 又不是 gb2312 编码!
用什么编码就得用对应编码的 Encoding 来 GetBytes() 啊。

解决方案二:

楼主,我也碰到和你一样的问题,不是编码的问题,是dll组件本身的问题,我已经解决了,也是困扰了很久,网上各种搜说找不到答案,然后之后想到了可以修改一个dll文件,于是我就下载了lumisoft.net的源文件,找到相关的地方进行附件文件名处理更新,然后编译,生成dll就ok了,不过首先得选择好.net 的版本,要和你现在客户端的版本一致,我选择的都是.net 4.0版本,然后测试,ok~~,再也不用担心附件名乱码问题了,偶也! 楼主有需要我可以给你发这个重新编译过的dll,因为自己找了半天没找到答案,所以想帮帮和我一样被这个问题困惑的人

时间: 2024-09-28 02:29:56

lumisoft-关于邮件发送,附件名乱码问题。的相关文章

javamail 接收邮件 附件的内容乱码 不是附件名乱码

问题描述 javamail 接收邮件 附件的内容乱码 不是附件名乱码 我最近用javamail 进行邮件操作,如果是pop3协议,接收的附件内容 没问题,但是用imap 接收过来的附件 内容 有一定概率会出现乱码 可是同一封邮件 pop3协议接收 是 没有问题的 解决方案 javamail附件乱码mutt附件内容乱码JavaMail附件中文名称乱码

struts2+uploadify 下获得上传的附件名乱码jsp页面和java类都是GBK格式。。。求大神解决。

问题描述 获得的附件名乱码.如果用newString(name.getByte("GBK"),"UTF-8");是可以转码,但是好像会因为奇数汉字转码导致字符遗失最后一个汉字乱码的问题...已配置过滤器为GBK.求解决啊..这个问题已经弄了好久了. 解决方案

邮件-javamail发送附件为excel.xls 内容乱码

问题描述 javamail发送附件为excel.xls 内容乱码 场景数据库里有个blob字段存着上传过来的excel文件下载要通过发送邮件的方式把excel发送出去. mail.addFileAffix("excel.xls",byte[]); 添加附件方法如下 public void addFileAffix(String fileName,byte[] b) throws MailException { try { BodyPart bp = new MimeBodyPart()

用JavaMail API编写可带附件的邮件发送程序

程序 利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序.也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet. (没有装载JavaMail API的读者,可以到此站点下载,并按照Readme.txt设置好ClassPath) 一.JavaMail中一些我们需要的类 1.Properties JavaMail需要Prop

关于JavaMail中发送中文附件标题乱码的说明

中文 以前在CSDN上发过一篇帖子说可能是一个BUG, 本想直接回复那个帖子, 可能由于 CSDN的改版? 那篇帖子我现在无法回复, 只能在这里做一个说明了. 收到SUN工程师的回复, 给了我一个相应的FAQ链接, 实在抱歉当时没有去查询FAQ:-)http://java.sun.com/products/javamail/FAQ.html#encodefilename 原因是在MIME的相应规范中(RFC2047等)说明了附件标题必须是US-ASCII字符, 所以在发送中文标题的附件时需要编码

Java邮件发送程序(可以同时发给多个地址、可以带附件)_java

发送邮件的主程序 import java.util.Properties; import common.util.Email_Autherticatorbean; import javax.mail.Authenticator; import javax.mail.internet.InternetAddress; import org.apache.commons.lang.StringUtils; import javax.mail.internet.MimeBodyPart; import

深入Lumisoft.NET组件与.NET API实现邮件发送功能的对比分析_实用技巧

我在另一篇文章<深入Lumisoft.NET实现邮件发送功能的方法详解>有大致对这个Lumisoft.NET组件的使用进行了介绍,当然Lumisoft.NET组件除了提供邮件发送功能外,还提供了邮件接收等功能的处理(包括基于POP3协议和IMAP协议),而.NET则除了提供SMTP协议功能外,则没有提供POP3协议处理的相关类库,因此收取邮件这需要自己进行封装(需要也可以参考codeproject.com上的相关文章). 1..NET的邮件发送功能实现.NET本身封装了一个SmtpClient

深入Lumisoft.NET实现邮件发送功能的方法详解_实用技巧

在前面的一些文章中,有介绍过DotNet内置SMTP类的邮件发送功能,附件.嵌入图片的模式都有介绍,本文继续介绍Lumisoft.NET这个非常优秀的开源组件,用该组件来设计开发邮件工具,将变得更加方便,功能更加强大.网上很多文章基本介绍如何使用该组件来收取邮件较多,较少介绍使用该组件做邮件发送功能的.本文主要探寻使用该组件实现邮件的发送功能,邮件发送有两种方式,一种是不用发件人即可发送邮件,一种是使用发件人账户密码和SMTP服务器来实现邮件发送的,本文分别对这两种方式进行介绍. 组件下载地址:

LumiSoft收取邮件(含邮件附件)

在.NET当中利用C#发送电子邮件很简单,微软也提供了默认的实现,但是收取电子邮件的操作却并没有提供解决方案.好在有一些第三方的解决方案可供选择,来简化程序员日常项目中的开发工作. 这里我选用LumiSoft,下载地址为http://www.lumisoft.ee/lswww/download/downloads/.当你打开链接,会发现里面有很多项目,为了实现收取邮件的功能,我们可以选择Examples里面的pop3_client_app.zip文件.我们解压缩,利用VS打开这个项目运行即可.这