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

本文关键字:System Net Mail 使用 MailMessage 自定义 | 更新日期: 2023-09-27 18:11:16

这是我测试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的东西,让我的邮件结构使用with headers。
但是我代码中的错误是关于这几行:

mail.Headers。Add(", " bloo bloo ");

And Error:

name部分不能为空…

我怎样才能绕过这个错误并使用header:
创建我的邮件的每一个和平身体如-> - 附件——等


在回答我的问题后,我将弄清楚如何组合多个内容类型:
如-> html - 纯/文本 - 八隅体——等

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

我认为这属于RFC 2822, https://www.rfc-editor.org/rfc/rfc2822#section-2.2:

2.2。头字段

头字段是由字段名和冒号(":"),后面跟着一个字段体,最后以CRLF结束。一字段名必须由可打印的US-ASCII字符组成(即:值在33到126(包括在内)之间的字符,
除外结肠。
字段主体可以由任何US-ASCII字符组成,
除了CR和LF。但是,当
时,字段体可能包含CRLF用于页眉"折叠";和";unfolding"如本节所述2.2.3. 所有字段主体必须符合本标准第3节和第4节中描述的语法。

似乎不允许使用空字符串

设置5小时的SMTP超时时间是不合理的。5秒到60秒的范围比较合理。

From MSDN:

下面的邮件头列表应该使用而不是添加属性以及为这些标头设置的任何值Headers属性将被丢弃覆盖发送:

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