这个发送邮件的函数/// <summary>发送email,默认是25端口
        /// 
        /// </summary>
        /// <param name="title">邮件标题</param>
        /// <param name="body">邮件内容</param>
        /// <param name="toAdress">收件人</param>
        /// <param name="fromAdress">发件人</param>
        /// <param name="userName">发件用户名</param>
        /// <param name="userPwd">发件密码</param>
        /// <param name="smtpHost">smtp地址</param>
        public static void SendMail(string title, string body, string toAdress, string fromAdress,string userName, string userPwd, string smtpHost)
        {
            try
            {
                MailAddress to = new MailAddress(toAdress);
                MailAddress from = new MailAddress(fromAdress);
                Encoding chtEnc = Encoding.GetEncoding(950);
                System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(from, to);
                message.IsBodyHtml = true; // 如果不加上这句那发送的邮件内容中有HTML会原样输出 
                message.Subject = title; message.Body = body;
                SmtpClient smtp = new SmtpClient();
                smtp.UseDefaultCredentials = true;
                smtp.Port = 25;
                smtp.Credentials = new NetworkCredential(userName, userPwd);
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Host = smtpHost;
                message.To.Add(toAdress);
                smtp.Send(message);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

这个是调用方法时给的参数

SendMail("发邮件测试看看", "哟哟!神机小徐来也,换一换脑袋!", "[email protected]", "[email protected]", "888888888", "88888888", "smtp.qq.com");但是每次都出现这个问题在邮件标头中找到无效的字符。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.FormatException: 在邮件标头中找到无效的字符。    

解决方案 »

  1.   

     百度查了有三种说法:        第一种,是在 SmtpClient.Send 之前曾经调用过该 MailMessage 对象的 From, To, Cc 等字段的 ToString 方法。很有可能的情形是,你尝试在发信前留下日志时,“无意间”调用到了。而微软的工程师在此处出现了一些失误,最终产生了该错误消息,具体情况请参看链接中的文章。http://columns.chicken-house.net/blogs/chicken/archive/2007/04/06/system-net-mail-bug.aspx        第二种,微软知识库里给出的一种原因是因为收件人显示名称中包含有引号。        第三种,你的计算机机名称中有汉字。原因是SmtpClient使用了计算机名作为smtp协议中HELO命令的参数,而在发送命令时又会对字符进行检查,若是非法字符则会抛出异常,很不幸中文字符都包括在内。       根据本人亲自试验,证实第三种说法是正确的,将计算机名称改成非汉字就可以正确发送了。可能在别的运行环境中有些不同。我的环境是:WinXP+SP3,.net3.5。要做这方面的软件的话,有这个Bug还真是不好用,总不能要别人改计算机名吧。
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Mail;namespace MailSender
    {
        public partial class Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {        }        protected void Button1_Click(object sender, EventArgs e)
            {
                MailMessage objMailMessage;
                MailAttachment objMailAttachment;            // 创建一个附件对象
                objMailAttachment = new MailAttachment("C:\\1.xml");//发送邮件的附件            // 创建邮件消息
                objMailMessage = new MailMessage();
                objMailMessage.From = "[email protected]";//源邮件地址
                objMailMessage.To = "********@qq.com";//目的邮件地址
                objMailMessage.Subject = "邮件发送标题:你好";//发送邮件的标题
                objMailMessage.Body = "邮件发送标内容:测试一下是否发送成功!";//发送邮件的内容
                objMailMessage.Attachments.Add(objMailAttachment);//将附件附加到邮件消息对象中            //接着利用sina的SMTP来发送邮件,需要使用Microsoft .NET Framework SDK v1.1和它以上的版本
                //基本权限
                objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");            //用户名
                objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "mytest110");            //密码
                objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "******");            //如果没有上述三行代码,则出现如下错误提示:服务器拒绝了一个或多个收件人地址。服务器响应为:530 Authentication required            //SMTP地址
                SmtpMail.SmtpServer = "smtp.sina.com";            // 开始发送邮件
                // 在发送之前,去新浪邮箱里开启POP/SMTP设置    邮箱设置->账户->POP/SMTP设置->开启
                // 否则会报错误0x80040217. The server response was not available
                SmtpMail.Send(objMailMessage);
            }
        }
    }  
    MSDN解决方案
      

  3.   

    3楼说的....第三种在我这边解释不通...........我只知道...我的发件人displayName如果是中文就报错..英文就OK 如果是 先字母再中文 那就只截取前面的字母显示.........