/// <summary> /// 创建用于邮件体的邮件地址集合的数组 /// </summary> /// <param name="addressList">须要处理的集合</param> /// <param name="encoding"></param> /// <returns>返回字符串型式数组</returns> public static string JoinAddressList(List <MailAddress> addressList, Encoding encoding) { var array = new string[addressList.Count]; for (int i = 0, l = addressList.Count; i < l; i++) { var address = addressList[i]; array[i] = MailCommon.Base64EncodeAddress(address.Name, address.Address, encoding); } var result = string.Join(",", array); return(result); }
/// <summary> /// 获取邮件头,并填充 OutputHeaders /// </summary> /// <exception cref="InvalidOperationException">message.From invalid or message.To is empty or subject is empty</exception> /// <returns></returns> public string GetHead() { if (this.From == null || string.IsNullOrEmpty(this.From.Address)) { throw new InvalidOperationException("message.From invalid"); } if (this.To == null || this.To.Count == 0) { throw new InvalidOperationException("message.To is empty"); } if (string.IsNullOrEmpty(this.Subject)) { throw new InvalidOperationException("subject is empty"); } this.outputHeaders = new NameValueCollection(15 + this.headers.Count); StringBuilder sb = new StringBuilder(); //message id var messageId = "<" + this.messageId + ">"; sb.Append("Message-ID: "); sb.Append(messageId); sb.Append(MailCommon.NewLine); outputHeaders["Message-ID"] = messageId; //from var from = MailCommon.Base64EncodeAddress(this.From.Name, this.From.Address, this.encoding); sb.Append("From: "); sb.Append(from); sb.Append(MailCommon.NewLine); outputHeaders["From"] = from; //replay if (this.ReplyTo != null) { var replayTo = MailCommon.Base64EncodeAddress(this.ReplyTo.Name, this.ReplyTo.Address, this.encoding); sb.Append("Replay-To: "); sb.Append(replayTo); sb.Append(MailCommon.NewLine); outputHeaders["Replay-To"] = replayTo; } //to var to = MailCommon.JoinAddressList(this.to, this.encoding); sb.Append("To: "); sb.Append(to); sb.Append(MailCommon.NewLine); outputHeaders["To"] = to; //cc if (this.cc != null && this.cc.Count > 0) { var cc = MailCommon.JoinAddressList(this.cc, this.encoding); sb.Append("CC: "); sb.Append(cc); sb.Append(MailCommon.NewLine); outputHeaders["CC"] = cc; } //Subject var subject = ""; sb.Append("Subject: "); if (MailCommon.IsAscii(this.Subject)) { subject = this.Subject; } else { subject = MailCommon.Base64EncodHead(this.Subject, this.encoding); } sb.Append(subject); sb.Append(MailCommon.NewLine); outputHeaders["Subject"] = subject; //Data var date = DateTime.UtcNow.ToString("R"); sb.Append("Date: "); sb.Append(date); sb.Append(MailCommon.NewLine); outputHeaders["Date"] = date; //Mime sb.Append(MailCommon.MimeVersion); sb.Append(MailCommon.NewLine); outputHeaders["MIME-Version"] = "1.0"; //priority if (this.Priority != MailPriority.Normal) { sb.Append("X-Priority: "); sb.Append((int)this.Priority); sb.Append(MailCommon.NewLine); outputHeaders["X-Priority"] = ((int)this.Priority).ToString(); } //Mailer sb.Append(MailCommon.Mailer); sb.Append(MailCommon.NewLine); outputHeaders["X-Mailer"] = "http://www.aooshi.org/adf/"; //Content-Type //sb.Append(CreateContentType()); var contentType = "multipart/alternative;\r\n\tboundary=\"" + this.boundary + "\""; sb.Append("Content-Type: "); sb.Append(contentType); sb.Append(MailCommon.NewLine); outputHeaders["Content-Type"] = contentType; //encoding sb.Append("Content-Transfer-Encoding: base64"); sb.Append(MailCommon.NewLine); outputHeaders["Content-Transfer-Encoding"] = "base64"; //custom headers foreach (var key in this.headers.AllKeys) { sb.Append(key); sb.Append(": "); sb.Append(this.headers[key]); sb.Append(MailCommon.NewLine); // outputHeaders[key] = this.headers[key]; } //dkim var dkim = this.dkim; if (dkim != null) { var dkimValue = dkim.Sign(this); // sb.Insert(0, dkimValue + MailCommon.NewLine); } // sb.Append(MailCommon.NewLine); return(sb.ToString()); }