Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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());
        }