示例#1
0
        public bool TryParse(string record, string domain, out DmarcRecord dmarcRecord)
        {
            if (string.IsNullOrEmpty(record))
            {
                dmarcRecord = null;
                return(false);
            }

            string[] stringTags = record.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).ToArray();

            List <Tag> tags = _tagParser.Parse(stringTags.ToList());

            tags = tags.Concat(_implicitProvider.GetImplicitValues(tags)).ToList();

            foreach (Tag tag in tags)
            {
                string explanation;
                if (_explainer.TryExplain(tag, out explanation))
                {
                    tag.Explanation = explanation;
                }
            }

            dmarcRecord = new DmarcRecord(record, tags, domain);
            dmarcRecord.AddErrors(_ruleEvaluator.Evaluate(dmarcRecord));
            return(true);
        }
        public void Explain(SpfRecord record)
        {
            if (_versionExplainer.TryExplain(record.Version, out string versionExplanation))
            {
                record.Version.Explanation = versionExplanation;
            }

            foreach (Term term in record.Terms)
            {
                if (_termExplainer.TryExplain(term, out string termExplanation))
                {
                    term.Explanation = termExplanation;
                }
            }
        }
        public SpfRecord Parse(string record, string domain)
        {
            if (string.IsNullOrEmpty(record))
            {
                return(null);
            }

            string[] stringTokens = record.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries);

            string versionToken = stringTokens.ElementAtOrDefault(0);

            Domain.Version version = _versionParser.Parse(versionToken);

            string explanation;

            if (_versionExplainer.TryExplain(version, out explanation))
            {
                version.Explanation = explanation;
            }

            List <Term> terms = stringTokens.Skip(1).Select(_termParser.Parse).ToList();

            terms = terms.Concat(_implicitTermProvider.GetImplicitValues(terms)).ToList();

            foreach (Term term in terms)
            {
                if (_termExplainer.TryExplain(term, out explanation))
                {
                    term.Explanation = explanation;
                }
            }

            SpfRecord spfRecord = new SpfRecord(record, version, terms, domain);

            spfRecord.AddErrors(_spfRecordRulesEvaluator.Evaluate(spfRecord));
            return(spfRecord);
        }