C#利用SMTP发送邮件的附件乱码问题

问题描述

我用网上的C#实现的SMTP发送邮件代码,在有WORD、PDF、EXCEL等附件时,有的邮件客户端会打不开。1、用网页登录邮箱收件箱直接打开会是乱码,保存到本地又可以打开2、用FOXMAIL收取时可在客户端直接打开,保存本地也可以打开,3、用公司自己的OA客户端又打不开,并且保存到本地也打不开。相关附件的实现代码如下(环境还是VS2003):完整的代码请参考:http://wenku.baidu.com/view/c41c1b4f852458fb770b56cf.htmlif(mailMessage.Attachments.Count!=0)//mailMessage.Attachments是用来存放附件的数组{SendBufferstr+="--=====001_Dragon303406132050_====="+CRLF;}SendBufferstr+="Content-Type:text/plain;"+CRLF;SendBufferstr+=((mailMessage.Charset=="")?("charset="iso-8859-1""):("charset=""+mailMessage.Charset.ToLower()+"""))+CRLF;SendBufferstr+="Content-Transfer-Encoding:base64"+CRLF+CRLF;SendBufferstr+=Base64Encode(mailMessage.Body)+CRLF;for(inti=0;i<mailMessage.Attachments.Count;i++){stringfilepath=(string)mailMessage.Attachments[i];SendBufferstr+="--====="+(Html?"001_Dragon520636771063_":"001_Dragon303406132050_")+"====="+CRLF;//SendBufferstr+="Content-Type:application/octet-stream"+CRLF;SendBufferstr+="Content-Type:text/plain;"+CRLF;SendBufferstr+="name="=?"+mailMessage.Charset.ToUpper()+"?B?"+Base64Encode(filepath.Substring(filepath.LastIndexOf("\")+1))+"?=""+CRLF;SendBufferstr+="Content-Transfer-Encoding:base64"+CRLF;SendBufferstr+="Content-Disposition:attachment;"+CRLF;SendBufferstr+="filename="=?"+mailMessage.Charset.ToUpper()+"?B?"+Base64Encode(filepath.Substring(filepath.LastIndexOf("\")+1))+"?=""+CRLF+CRLF;SendBufferstr+=GetStream(filepath)+CRLF+CRLF;}SendBufferstr+="--====="+(Html?"001_Dragon520636771063_":"001_Dragon303406132050_")+"=====--"+CRLF+CRLF;

相关两个函数的代码如下:///<summary>///将字符串编码为Base64字符串///</summary>///<paramname="str">要编码的字符串</param>publicstringBase64Encode(stringstr){byte[]barray;barray=Encoding.Default.GetBytes(str);returnConvert.ToBase64String(barray);}

///<summary>///得到上传附件的文件流///</summary>///<paramname="FilePath">附件的绝对路径</param>publicstringGetStream(stringFilePath){//建立文件流对象System.IO.FileStreamFileStr=newSystem.IO.FileStream(FilePath,System.IO.FileMode.Open);byte[]by=newbyte[System.Convert.ToInt32(FileStr.Length)];FileStr.Read(by,0,by.Length);FileStr.Close();return(System.Convert.ToBase64String(by));}

解决方案

解决方案二:
试下把Base64Encode改成下面这样:publicstringBase64Encode(stringstr,stringencoding){byte[]barray;barray=Encoding.GetEncoding("encoding").GetBytes(str);returnConvert.ToBase64String(barray);}

然后调用时:stringencoding=mailMessage.Charset==""?"utf-8":mailMessage.Charset;SendBufferstr+=Base64Encode(mailMessage.Body,encoding)+CRLF;上面的缺省charset最好也改成utf-8,不要用iso-8859-1
解决方案三:
不要用Encoding.Default,改用Encoding.UTF8
解决方案四:
改成这个编码后还是有的客户端打不开,有的会打得开。继续求救。
解决方案五:
smtp发送附件,文件名过长,就会出现乱码,同求解决方法
解决方案六:
建议你将字符集声明删去如果附件是图片,也要声明字符集吗?

时间: 2024-10-26 21:39:17

C#利用SMTP发送邮件的附件乱码问题的相关文章

Jmail发送邮件与带附件乱码解决办法分享

 这篇文章主要介绍了Jmail发送邮件与带附件乱码解决办法,有需要的朋友可以参考一下 Jamil发送邮件的具体用法:   首先,我们要先下载Jamil.dll的组件,然后添加引用using jmail,然后再本机或者服务器上注册一下   将jmail.dll拷贝到服务器的system32目录下,开始-运行-cmd-输入regsvr32 jmail.dll,注册成功,然后写代码   代码如下(方法) 代码如下: using jmail;     protected void sendMail(St

使用php通过smtp发送邮件新手指南

smtp|发送邮件 由于php没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用.本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自行深入学习.本文撰写日期是2004年7月2日,阅读时请注意时效性. "使用php发送mail"最近已经成为继"register_globals&

javamail smtp 发送邮件

Java代码   /*   * 邮件发送类   */   public class MailSenderUtil{            /**    * 以HTML格式发送邮件,可带附件,本方法可作为对外接口提供.    * @param mailInfo 待发送的邮件信息    * @throws MessagingException    * @throws AddressException    * @throws UnsupportedEncodingException     */ 

asp.net中C# 利用MailMessage发送邮件代码

MailMessage发送邮件的例子:C# 发送邮件的Helper类 主要就是用Web命名空间下的Mail.Mailmessage类用此类发送邮件主要就是对MailMessage类的实例设置一些属性,然后用SmtpMail指定smtp服务器发送.代码如下:  代码如下 复制代码 <span id="more-1794"></span> using System; using System.Collections.Generic; using System.Lin

Python中使用SMTP发送邮件的例子

一,SMTP发送邮件 这里PYTHON脚本实现的是登陆126的SMTP将邮件发送到QQ邮箱.QQ邮箱利用的是加密STMP, 需要加密版本的童鞋请关注随后的更新.TIPS: 我的本地环境是MAC系统, Windows环境需要修改相应的字符编码. #!/usr/bin/env python # -*- coding: utf-8 -*- import smtplib   import email.encoders from email.mime.text import MIMEText from e

在asp.NET 中使用SMTP发送邮件的实现代码

核心代码:复制代码 代码如下: public class Mail { #region 邮件参数 static public string accountName = System.Configuration.ConfigurationManager.AppSettings["SmtpAccountName"]; static public string password = System.Configuration.ConfigurationManager.AppSettings[&

使用CDO.Message+SMTP发送邮件

smtp|发送邮件 <!--发送代码--> <% Const cdoSendUsingMethod="http://schemas.microsoft.com/cdo/configuration/sendusing" Const cdoSendUsingPort=2 Const cdoSMTPServer="http://schemas.microsoft.com/cdo/configuration/smtpserver" Const cdoSMT

javax.mail发送邮件带附件

废话不多说直接上代码 package test; import java.io.File; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.Message.RecipientType; import javax.mail.PasswordAuthentication; import javax.mail.Session; impor

php利用smtp类实现电子邮件发送_php技巧

smtp类发送邮件的方法既简单又稳定,几行简单的配置就能发邮件,是不是很期待的试一试呢! 以下就是核心代码: <?php require_once "email.class.php"; //******************** 配置信息 ******************************** $smtpserver = "smtp.126.com";//SMTP服务器 $smtpserverport =25;//SMTP服务器端口 $smtpus