Beispiel #1
0
        /// <summary>
        /// get instance name from "Received" header like "by mail8-tx2.bigfish.com (Postfix) with ESMTP id CC36D220440	for <*****@*****.**>; Sun, 25 Mar 2012 12:14:44 +0000 ("
        /// used for hosted instance only
        /// </summary>
        public static int?GetInstanceIdByEmailHeaders(Limilabs.Mail.Headers.HeaderCollection headers)
        {
            Regex addressRegex1 = new Regex(@"@([a-zA-Z0-9_\-]+)\.jitbit\.com", RegexOptions.IgnoreCase);
            Match mName         = null;

            string receivedHeaders = headers["received"] ?? headers["Received"];

            if (receivedHeaders != null)
            {
                mName = addressRegex1.Match(receivedHeaders);          //seeking "***@***.jitbit.com" in the headers string
            }
            if (receivedHeaders == null || !mName.Success)             //not found in "received" lets look at "ogirignal to" header
            {
                string xOriginalTo = headers["X-Original-To"] ?? headers["x-original-to"];
                if (xOriginalTo == null)
                {
                    return(null);
                }
                mName = addressRegex1.Match(xOriginalTo);                 //seeking "***@***.jitbit.com" in the headers string AGAIN
                if (!mName.Success)
                {
                    return(null);
                }
            }


            using (SqlConnection cn = DBUtils.GetNewOpenConnection())
            {
                string instanceName = mName.Groups[1].Value;

                int?instanceId = cn.Query <int?>("SELECT InstanceID FROM Instances WHERE Name=@Name", new { Name = instanceName }).FirstOrDefault();
                if (instanceId.HasValue)
                {
                    return(instanceId);
                }
            }
            return(null);
        }
        private static bool IsUselessMessage(string from, string fromName, string subject, Limilabs.Mail.Headers.HeaderCollection headers)
        {
            //caching
            string lSubject  = (subject == null ? "" : subject.ToLower());
            string lFrom     = (from == null ? "" : from.ToLower());
            string lFromName = (fromName == null ? "" : fromName.ToLower());

            bool useless = lSubject.IndexOf("delivery status") > -1 || lSubject.Contains("delivery has failed") || lSubject.Contains("out of office") || lSubject.Contains("out of the office") || lSubject.Contains("out-of-office");

            useless |= lSubject.StartsWith("automatic reply") || lSubject.StartsWith("[auto-reply]") || lSubject.StartsWith("automatische antwort") || lSubject.StartsWith("automatisch antwoord") || lSubject.StartsWith("respuesta automática");

            useless |= (lFrom.IndexOf("mailer-daemon") > -1 || lFrom.StartsWith("postmaster@"));

            useless |= (lFromName.IndexOf("mail delivery subsystem") > -1);

            useless |= (headers != null) &&
                       (headers.AllKeys.Contains("X-Failed-Recipients") || headers.AllKeys.Contains("x-failed-recipients"));

            useless |= (headers != null) &&
                       (headers.AllKeys.Contains("X-Autoreply") || headers.AllKeys.Contains("x-autoreply"));

            useless |= (headers != null) &&
                       (headers.AllKeys.Contains("X-Autorespond") || headers.AllKeys.Contains("x-autorespond"));

            useless |= rPusherEmail.IsMatch(lFrom);             //email came from the hosted helpdesk?

            //sometimes header names are converted to lowercase... AND I SPENT FRIGGIN WEEK DEBUGGIN THIS! F**K!  .. uhm, sory
            if (!useless && headers != null)
            {
                string xmailerHeader = "";
                if (headers.AllKeys.Contains("X-Mailer"))
                {
                    xmailerHeader = headers["X-Mailer"];
                }
                if (headers.AllKeys.Contains("x-mailer"))
                {
                    xmailerHeader = headers["x-mailer"];
                }

                useless = xmailerHeader.ToLower().IndexOf("jitbit") > -1;
            }

            return(useless);
        }