StringBuilder pattern = new StringBuilder();
pattern.Append(“(?:(?:\\r\\n)?[ \\t])*(?:(?:(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t]”);
pattern.Append(“)+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:”);
pattern.Append(“\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(“);
pattern.Append(“?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ “);
pattern.Append(“\\t]))*\”(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\”);
pattern.Append(“31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\”);
pattern.Append(“](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+”);
pattern.Append(“(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:”);
pattern.Append(“(?:\\r\\n)?[ \\t])*))*|(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z”);
pattern.Append(“|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)”);
pattern.Append(“?[ \\t])*)*\\<(?:(?:\\r\\n)?[ \\t])*(?:@(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\”);
pattern.Append(“r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[“);
pattern.Append(” \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)”);
pattern.Append(“?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t]”);
pattern.Append(“)*))*(?:,@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[“);
pattern.Append(” \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*”);
pattern.Append(“)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t]”);
pattern.Append(“)+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*)”);
pattern.Append(“*:(?:(?:\\r\\n)?[ \\t])*)?(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+”);
pattern.Append(“|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r”);
pattern.Append(“\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:”);
pattern.Append(“\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t”);
pattern.Append(“]))*\”(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31″);
pattern.Append(“]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](“);
pattern.Append(“?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?”);
pattern.Append(“:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?”);
pattern.Append(“:\\r\\n)?[ \\t])*))*\\>(?:(?:\\r\\n)?[ \\t])*)|(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?”);
pattern.Append(“:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?”);
pattern.Append(“[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)*:(?:(?:\\r\\n)?[ \\t])*(?:(?:(?:[^()<>@,;:\\\\\”.\\[\\] “);
pattern.Append(“0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|”);
pattern.Append(“\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>”);
pattern.Append(“@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\””);
pattern.Append(“(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t]”);
pattern.Append(“)*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\”);
pattern.Append(“\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?”);
pattern.Append(“:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[“);
pattern.Append(“\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*|(?:[^()<>@,;:\\\\\”.\\[\\] 0-“);
pattern.Append(“\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(“);
pattern.Append(“?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)*\\<(?:(?:\\r\\n)?[ \\t])*(?:@(?:[^()<>@,;”);
pattern.Append(“:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([“);
pattern.Append(“^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\””);
pattern.Append(“.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\”);
pattern.Append(“]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*(?:,@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\”);
pattern.Append(“[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\”);
pattern.Append(“r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] “);
pattern.Append(“0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]”);
pattern.Append(“|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*)*:(?:(?:\\r\\n)?[ \\t])*)?(?:[^()<>@,;:\\\\\”.\\[\\] \”);
pattern.Append(“00-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\”);
pattern.Append(“.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,”);
pattern.Append(“;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?”);
pattern.Append(“:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*”);
pattern.Append(“(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.”);
pattern.Append(“\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[“);
pattern.Append(“^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]”);
pattern.Append(“]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*\\>(?:(?:\\r\\n)?[ \\t])*)(?:,\\s*(“);
pattern.Append(“?:(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\”);
pattern.Append(“\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(“);
pattern.Append(“?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[“);
pattern.Append(“\\[\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t”);
pattern.Append(“])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t”);
pattern.Append(“])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?”);
pattern.Append(“:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|”);
pattern.Append(“\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*|(?:”);
pattern.Append(“[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\”);
pattern.Append(“]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)*\\<(?:(?:\\r\\n)”);
pattern.Append(“?[ \\t])*(?:@(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\””);
pattern.Append(“()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)”);
pattern.Append(“?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>”);
pattern.Append(“@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*(?:,@(?:(?:\\r\\n)?[“);
pattern.Append(” \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,”);
pattern.Append(“;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t]”);
pattern.Append(“)*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\”);
pattern.Append(“\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*)*:(?:(?:\\r\\n)?[ \\t])*)?”);
pattern.Append(“(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.”);
pattern.Append(“\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:”);
pattern.Append(“\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[“);
pattern.Append(“\”()<>@,;:\\\\\”.\\[\\]]))|\”(?:[^\\\”\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\”(?:(?:\\r\\n)?[ \\t])”);
pattern.Append(“*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])”);
pattern.Append(“+|\\Z|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\”);
pattern.Append(“.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\”.\\[\\] 0-\31]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z”);
pattern.Append(“|(?=[\\[\”()<>@,;:\\\\\”.\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*\\>(?:(“);
pattern.Append(“?:\\r\\n)?[ \\t])*))*)?;\\s*)”);
Match m = Regex.Match(emailaddress, pattern.ToString());
return m.Success;