繁体   English   中英

c#MailMessage自定义标头 - 使用System.Net.Mail;

[英]c# MailMessage custom headers - using System.Net.Mail;

这是我测试MailMessage标头的方法:

   private void Send_Email(string smtp_server, int port, string display_name, string from, string to, string subject, string html_body, string sender_email, string sender_password)
        {
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(from, display_name, Encoding.UTF8);
            mail.To.Add(to);

            mail.SubjectEncoding = Encoding.UTF8;
            mail.Subject = subject;

            mail.Headers.Add("Reply-To", "Reply-To__ <" + from + ">");
            mail.Headers.Add("Sender", from);
            mail.Headers.Add("Return-Path", from);
            mail.Headers.Add("MIME-Version", "1.0");

            string boundary = Guid.NewGuid().ToString();
            mail.Headers.Add("Content-Type", "multipart/mixed; boundary=--" + boundary);

            //mail.Headers.Add("", Environment.NewLine);
            //mail.Headers.Add("", Environment.NewLine);

            //mail.Headers.Add("", "--" + boundary);
            //mail.Headers.Add("Content-Type", "text/html; charset=utf-8");
            //mail.Headers.Add("Content-Transfer-Encoding", "base64");
            //mail.Headers.Add("", Environment.NewLine);
            //var bytes = Encoding.UTF8.GetBytes(html_body);
            //var base64 = Convert.ToBase64String(bytes);
            //mail.Headers.Add("", base64.ToString());
            //mail.Headers.Add("", "--" + boundary);

            SmtpClient smtp = new SmtpClient();
            smtp.UseDefaultCredentials = true;
            //smtp.Credentials = new System.Net.NetworkCredential(sender_email, sender_password);
            smtp.Host = smtp_server;
            smtp.Port = port;
            smtp.Timeout = 60000;

            smtp.SendCompleted += (s, e) =>
            {
                if (e.Cancelled)
                {
                    MessageBox.Show("sending email was canceled");
                }
                if (e.Error != null)
                {
                    MessageBox.Show("sending email was failed -> Error : " + e.Error.ToString());
                }
                else
                {
                    MessageBox.Show("email was sent successfully");
                }

                mail.Dispose();
            };

            try
            {
                smtp.SendAsync(mail, null);
            }
            catch (System.Net.Mail.SmtpException exp)
            {
                MessageBox.Show("sending email was failed, SmtpException -> Error : " + exp.ToString());

                mail.Dispose();
            }
        }

在PHP中你的手是免费的,可以很好地制作标题和邮件结构,
看看这个例子:
http://www.sanwebe.com/2011/01/send-php-mail-with-attachment
我想在.Net中做一些类似php的东西,并使用标题使我的邮件结构。
但我的代码中的错误与这些行有关:

mail.Headers.Add(“”,“blo blo blo”);

错误

名称部分不能为空...

我如何绕过该错误并使用标题创建我的邮件的每个和平:
例如 - > 身体 - 附件 - 等


在回答我的问题之后,我将弄清楚如何组合多个内容类型
例如 - > html - plain / text - octet - 等

我认为这属于RFC 2822, https ://tools.ietf.org/html/rfc2822#section-2.2:

2.2。 标题字段

标题字段是由字段名称组成的行,后跟冒号(“:”),后跟字段正文,并由CRLF终止。 字段名称必须由可打印的US-ASCII字符组成(即,值为33到126之间的字符,包括端点),除了
结肠。 字段主体可以由任何US-ASCII字符组成,
CR和LF除外。 但是,字段正文可能包含CRLF
用于标题“折叠”和“展开”,如2.2.3节所述。 所有字段主体必须符合本标准第3节和第4节中描述的语法。

似乎不允许空字符串。

使用5小时的SMTP超时过多。 范围5秒到60秒更合理。

来自MSDN

应该使用标题属性添加以下邮件标题的列表,并使用标题属性将被丢弃覆盖这些头设置的任何值在发送消息时:

 Bcc Cc Content-ID Content-Location Content-Transfer-Encoding Content-Type Date From Importance MIME-Version Priority Reply-To Sender To X-Priority 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM