Ejemplo n.º 1
0
        /// <summary>
        /// 获取邮件的内容
        /// </summary>
        public static Result <EMail_DKIM_RAW_EML> ToRAW(MailMessage message)
        {
            var rtv = new Result <EMail_DKIM_RAW_EML>();

            if (MailWriterFactory == null || Close == null || Send2 == null && Send3 == null)
            {
                rtv.error("email内容获取器未初始化成功");
                return(rtv);
            }

            var headers = message.Headers;
            //备份hook head
            var hT  = headers[EMail_DKIM.DKIMTimeKeyT];
            var hTS = headers[EMail_DKIM.DKIMTimeKeyTS];

            try {
                using (var internalStream = new ClosableMemoryStream()) {
                    object mailWriter = MailWriterFactory(internalStream);

                    if (Send2 != null)
                    {
                        Send2(message, mailWriter, false);
                    }
                    else if (Send3 != null)
                    {
                        //由smtp.DeliveryFormat决定的allowUnicode为false
                        Send3(message, mailWriter, false, false);
                    }

                    Close(mailWriter);

                    internalStream.Position = 0;
                    string text;
                    using (var reader = new StreamReader(internalStream, Encoding.UTF8)) {
                        text = reader.ReadToEnd();
                    }

                    internalStream.ReallyClose();

                    var val = EMail_DKIM_RAW_EML.ParseOrNull(text);
                    if (val == null)
                    {
                        rtv.error("整个email内容获取后解析失败");
                        return(rtv);
                    }
                    rtv.Value = val;
                    return(rtv);
                }
            } catch (Exception e) {
                rtv.fail("无法获取整个email内容:" + e.Message, e.ToString());
                return(rtv);
            } finally {
                //还原hook head
                if (hTS != null)
                {
                    headers.Set(EMail_DKIM.DKIMTimeKeyT, hT);
                    headers.Set(EMail_DKIM.DKIMTimeKeyTS, hTS);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取邮件的内容
        /// </summary>
        public static Result <EMail_DKIM_RAW_EML> ToRAW(MailMessage message)
        {
            var rtv = new Result <EMail_DKIM_RAW_EML>();

            if (MailWriterFactory == null || Close == null || Send2 == null && Send3 == null)
            {
                rtv.error("email内容获取器未初始化成功");
                return(rtv);
            }
            try {
                using (var internalStream = new ClosableMemoryStream()) {
                    object mailWriter = MailWriterFactory(internalStream);

                    if (Send2 != null)
                    {
                        Send2(message, mailWriter, false);
                    }
                    else if (Send3 != null)
                    {
                        Send3(message, mailWriter, false, false);
                    }

                    Close(mailWriter);

                    internalStream.Position = 0;
                    string text;
                    using (var reader = new StreamReader(internalStream, Encoding.UTF8)) {
                        text = reader.ReadToEnd();
                    }

                    internalStream.ReallyClose();

                    var val = EMail_DKIM_RAW_EML.ParseOrNull(text);
                    if (val == null)
                    {
                        rtv.error("整个email内容获取后解析失败");
                        return(rtv);
                    }
                    rtv.Value = val;
                    return(rtv);
                }
            } catch (Exception e) {
                rtv.fail("无法获取整个email内容:" + e.Message, e.ToString());
                return(rtv);
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 验证邮件eml文件内容DKIM签名是否正确,没有签名或签名错误返回false
 /// </summary>
 public bool Verify(string eml)
 {
     return(Verify(EMail_DKIM_RAW_EML.ParseOrNull(eml)));
 }