public static bool TryParse(string s, out SpfRecord value)
        {
            if (String.IsNullOrEmpty(s) || !s.StartsWith("v=spf1 "))
            {
                value = null;
                return false;
            }

            string[] terms = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            value = new SpfRecord { Terms = new List<SpfTerm>() };

            for (int i = 1; i < terms.Length; i++)
            {
                SpfTerm term;
                if (SpfTerm.TryParse(terms[i], out term))
                {
                    value.Terms.Add(term);
                }
                else
                {
                    value = null;
                    return false;
                }
            }

            return true;
        }
Esempio n. 2
0
        private IEnumerable <Message> GetMessages(SpfRecord record)
        {
            List <Message> messages = new List <Message>();

            if (record != null)
            {
                foreach (Term term in record?.Terms)
                {
                    if (term is Include include)
                    {
                        if (include.Records?.Messages != null)
                        {
                            messages.AddRange(include.Records?.Messages);
                        }

                        List <SpfRecord> childRecords  = include.Records?.Records;
                        List <Message>   childMessages = new List <Message>();

                        if (childRecords != null && childRecords.Count > 0)
                        {
                            foreach (SpfRecord childRecord in childRecords)
                            {
                                IEnumerable <Message> childRecordMessages = GetMessages(childRecord);
                                if (childRecordMessages != null)
                                {
                                    childMessages.AddRange(childRecordMessages);
                                }
                            }
                        }
                        messages.AddRange(childMessages);
                    }
                }
            }

            return(messages);
        }
 public DomainSpfRecord(string domain, SpfRecord record)
 {
     Domain = domain;
     Record = record;
 }