zoukankan      html  css  js  c++  java
  • OpenSmtp附件中文名显示问题

    最近做一个小东西,用到邮件发送, 就用了开源代码 OpenSmtp来发送邮件
    发现发送附件文件名字为中文时候,文件名会变成=B1=D3=DA18:00=BD=F8=C8=EB=BF=BC=B3=A1.txt这样的文件名,

    经过仔细检查代码,发现往邮件添加附件的时候,
    调用ConvertToQP()函数对附件进行编码,
    该方法作用是主要是对内容进行Quoted-Printable编码

    下面这个函数,通过函数名,我们知道,它返回邮件内容部分,包括经过编码的附件内容
            private String GetMessageBody() 
            
    {
                StringBuilder sb
    =new StringBuilder();

                
    if (attachments.Count>0
                
    {
                    sb.Append(
    "Content-Type: multipart/mixed;");
                    sb.Append(
    "boundary=\"" + mixedBoundary + "\"");
                    sb.Append(
    "\r\n\r\nThis is a multi-part message in MIME format.");
                    sb.Append(
    "\r\n\r\n--" + mixedBoundary + "\r\n");
                }


                sb.Append(GetInnerMessageBody());

                
    if (attachments.Count>0
                
    {
                    
    foreach (Attachment attachment in attachments) 
                    
    {
                        sb.Append(
    "\r\n\r\n--" + mixedBoundary + "\r\n");
                        sb.Append(attachment.ToMime());
                    }

                    sb.Append(
    "\r\n\r\n--" + mixedBoundary + "--\r\n");
                }

                
    return sb.ToString();

            }

    附件的信息写在 sb.Append(attachment.ToMime());这句里面,我们再来看看 attachment.ToMime();绿色注释部分是原代码,经过修改,该方法如下:
    filename,name不经过QP编码,这样就能显示正常的附件名字了

            public String ToMime() 
            
    {
                StringBuilder sb
    =new StringBuilder();
                
    if (ContentId!=null
                
    {
                    sb.Append(
    "Content-ID: <" + ContentId + ">\r\n");
                }

                sb.Append(
    "Content-Type: " + mimeType + ";\r\n");
                sb.Append(
    " name=\"" + name + "\"\r\n");
                
    //sb.Append(" name=\"" + MailEncoder.ConvertToQP(name,null;) + "\"\r\n");
                sb.Append("Content-Transfer-Encoding: " + encoding + "\r\n");
                sb.Append(
    "Content-Disposition: attachment;\r\n");
                sb.Append(
    " filename=\"" + name + "\"\r\n\r\n");
                
    //sb.Append(" filename=\"" + MailEncoder.ConvertToQP(name,null) + "\"\r\n\r\n");
                        
                FileStream fin 
    = new FileStream(encodedFilePath, FileMode.Open, FileAccess.Read);

                
    byte[] bin;

                
    while (fin.Position != fin.Length)
                
    {
                    bin 
    = new byte[76];
                    
    int len = fin.Read(bin, 076);
                    sb.Append(System.Text.Encoding.UTF8.GetString(bin , 
    0, len)+"\r\n");
                }


                fin.Close();
                
    return sb.ToString();
            }

    不过这样做是不是有什么问题呢?还请各位用过OpenSmtp的大侠指教
  • 相关阅读:
    hdu 2553 N皇后问题(dfs)
    hdu 1043 Eight(双向bfs)
    牛人的ACM经验 (转)
    康托和逆康托展开(转)
    hiho Mission Impossible 6(模拟 未提交验证。。)
    数组越界也可以这么巧~~~
    poj 1679 The Unique MST(次小生成树)
    zoj 3204 Connect them(最小生成树)
    hdu 4463 Outlets(最小生成树)
    廖雪峰Java1-2程序基础-8字符和字符串
  • 原文地址:https://www.cnblogs.com/mine/p/159689.html
Copyright © 2011-2022 走看看