.net 发送邮件 头值中找到无效字符

来源:互联网 发布:股票数据分析方法 编辑:程序博客网 时间:2024/06/11 09:03

利用System.Net.Mail写发送邮件的功能

其实代码比较简单

但是总碰到如下症状:

 

症状是:调用 SmtpClient.Send 方法后,出现 System.FormatException,

英文消息为“An invalid character was found in header value.

中文消息是:“邮件标头中找到无效字符”。

 

经查阅很多资料,发现

原因是在 SmtpClient.Send 之前曾经调用过该 MailMessage 对象的 From, To, Cc 等字段的 ToString 方法。很有可能的情形是,你尝试在发信前留下日志时,“无意间”调用到了。而微软的工程师在此处出现了一些失误,最终产生了该错误消息,具体情况请参看上面链接中的文章。

P.S. 当然还会有其他原因可能导致此问题,比如微软知识库里给出的一种原因是因为收件人显示名称中包含有引号。

 

是编码问题了.试了很多 最终在网上查到使用Encoding chtEnc = Encoding.BigEndianUnicode;可以解决

也查到一些使用其他的。可能是看自己的需求选择编码方式了。

 

 

 

private void btnSend_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            Encoding chtEnc = Encoding.BigEndianUnicode;

            MailMessage mail = new MailMessage();
            string toAddress = tbxMailTo.Text.ToString();


            //设置邮件的发件人
            //Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
            mail.From=new MailAddress("yuehongsun@gmail.com", "小月",chtEnc);
            mail.To.Add(new MailAddress(toAddress, "企业", chtEnc));
            //mail.CC.Add(new MailAddress("Manage@hotmail.com", "尊敬的领导"));
            mail.Subject = tbxMailSubject.Text;
            mail.SubjectEncoding = chtEnc;
            mail.Body = "谢谢您在百忙之中查阅!/r/n祝:身体健康!";
            mail.BodyEncoding = System.Text.Encoding.UTF8;
            mail.IsBodyHtml = true;
            //设置邮件的发送级别
            mail.Priority = MailPriority.Normal;

            mail.Attachments.Add(new Attachment(filePath));
           
            mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

            SmtpClient client = new SmtpClient();
            //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
            client.Host = "smtp.gmail.com";
            //设置用于 SMTP 事务的端口,默认的是 25
            //client.Port = 25;
            client.UseDefaultCredentials = false;
            //这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 yuehongsun@gmail, 我的用户名为 yuehongsun ,我的密码是 password
            client.Credentials = new System.Net.NetworkCredential("yuehongsun", "password");
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //都定义完了,正式发送
            try
            {
                client.EnableSsl = true;
                client.Send(mail);
                MessageBox.Show("邮件已发出,请确认!", "提示");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "异常");
            }

       }

原创粉丝点击