// Token: 0x06000245 RID: 581 RVA: 0x00009F60 File Offset: 0x00008160
        public static bool IsValidSmtpAddress(string address, bool checkLength, out int domainStart, bool allowUTF8 = false)
        {
            if (string.IsNullOrEmpty(address))
            {
                domainStart = -1;
                return(false);
            }
            if (checkLength && address.Length > 571 && (address.Length > 1860 || !MimeAddressParser.IsEncapsulatedX400Address(address)))
            {
                domainStart = -1;
                return(false);
            }
            int num = 0;

            MimeAddressParser.ValidationStage validationStage = MimeAddressParser.ValidationStage.BEGIN;
            while (num < address.Length && validationStage != MimeAddressParser.ValidationStage.ERROR)
            {
                char c = address[num];
                num++;
                switch (validationStage)
                {
                case MimeAddressParser.ValidationStage.BEGIN:
                    if ((c < '\u0080' && MimeScan.IsAtom((byte)c)) || (c >= '\u0080' && allowUTF8))
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL;
                        continue;
                    }
                    if (c == '\\')
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_ESC;
                        continue;
                    }
                    if (c == '"')
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_DQS;
                        continue;
                    }
                    goto IL_1B6;

                case MimeAddressParser.ValidationStage.LOCAL:
                    if (c == '@')
                    {
                        goto IL_182;
                    }
                    if (c == '.')
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_DOT;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.LOCAL_DOT:
                    break;

                case MimeAddressParser.ValidationStage.LOCAL_DQS:
                    if (c == '"')
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_DQS_END;
                        continue;
                    }
                    if (c == '\\')
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_DQS_ESC;
                        continue;
                    }
                    if ((c < '\u0080' && '\r' != c && '\n' != c && '\\' != c && '"' != c) || (c >= '\u0080' && allowUTF8))
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_DQS;
                        continue;
                    }
                    goto IL_1B6;

                case MimeAddressParser.ValidationStage.LOCAL_ESC:
                    if (c < '\u0080' || (c >= '\u0080' && allowUTF8))
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL;
                        continue;
                    }
                    goto IL_1B6;

                case MimeAddressParser.ValidationStage.LOCAL_DQS_ESC:
                    if (c < '\u0080' || (c >= '\u0080' && allowUTF8))
                    {
                        validationStage = MimeAddressParser.ValidationStage.LOCAL_DQS;
                        continue;
                    }
                    goto IL_1B6;

                case MimeAddressParser.ValidationStage.LOCAL_DQS_END:
                    if (c == '@')
                    {
                        goto IL_182;
                    }
                    goto IL_1B6;

                case MimeAddressParser.ValidationStage.DOMAIN:
                    goto IL_182;

                default:
                    goto IL_1B6;
                }
                if ((c < '\u0080' && MimeScan.IsAtom((byte)c)) || (c >= '\u0080' && allowUTF8))
                {
                    validationStage = MimeAddressParser.ValidationStage.LOCAL;
                    continue;
                }
                if (c == '\\')
                {
                    validationStage = MimeAddressParser.ValidationStage.LOCAL_ESC;
                    continue;
                }
IL_1B6:
                validationStage = MimeAddressParser.ValidationStage.ERROR;
                continue;
IL_182:
                if (checkLength && num - 1 > 315 && (num - 1 > 1604 || !MimeAddressParser.IsEncapsulatedX400Address(address)))
                {
                    domainStart = -1;
                    return(false);
                }
                if (MimeAddressParser.IsValidDomain(address, num, checkLength, allowUTF8))
                {
                    domainStart = num;
                    return(true);
                }
                goto IL_1B6;
            }
            domainStart = -1;
            return(false);
        }
        // Token: 0x06000246 RID: 582 RVA: 0x0000A13C File Offset: 0x0000833C
        public static bool IsValidDomain(string address, int offset, bool checkLength, bool allowUTF8 = false)
        {
            if (string.IsNullOrEmpty(address) || (checkLength && address.Length - offset > 255))
            {
                return(false);
            }
            MimeAddressParser.ValidationStage validationStage = MimeAddressParser.ValidationStage.DOMAIN;
            int  num  = 0;
            int  num2 = 0;
            int  num3 = 0;
            bool flag = false;
            int  num4 = 0;

            while (offset < address.Length && validationStage != MimeAddressParser.ValidationStage.ERROR)
            {
                char c = address[offset];
                offset++;
                switch (validationStage)
                {
                case MimeAddressParser.ValidationStage.DOMAIN:
                    if (c == '[')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL;
                        continue;
                    }
                    if ((c < '\u0080' && MimeScan.IsAlphaOrDigit((byte)c)) || (c >= '\u0080' && allowUTF8) || c == '-' || c == '_')
                    {
                        num4            = offset;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_SUB;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_SUB:
                    if (c == '.')
                    {
                        if (checkLength && offset - num4 > 63)
                        {
                            return(false);
                        }
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_DOT;
                        continue;
                    }
                    else if ((c < '\u0080' && MimeScan.IsAlphaOrDigit((byte)c)) || (c >= '\u0080' && allowUTF8) || c == '-' || c == '_')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_SUB;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_DOT:
                    if ((c < '\u0080' && MimeScan.IsAlphaOrDigit((byte)c)) || (c >= '\u0080' && allowUTF8) || c == '-' || c == '_')
                    {
                        num4            = offset;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_SUB;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL:
                    if (c < '\u0080' && MimeScan.IsDigit((byte)c))
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4;
                        num             = 1;
                        num2            = 1;
                        num3            = (int)(c - '0');
                        continue;
                    }
                    if (c == 'I' || c == 'i')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_I;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4:
                    if (c < '\u0080' && MimeScan.IsDigit((byte)c) && num2 < 3)
                    {
                        num2++;
                        num3 = num3 * 10 + (int)(c - '0');
                        if (num3 <= 255)
                        {
                            validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4;
                            continue;
                        }
                    }
                    else
                    {
                        if (c == '.')
                        {
                            validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4_DOT;
                            continue;
                        }
                        if (c == ']' && num == 4)
                        {
                            validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_END;
                            continue;
                        }
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4_DOT:
                    if (c < '\u0080' && MimeScan.IsDigit((byte)c) && num < 4)
                    {
                        num++;
                        num2            = 1;
                        num3            = (int)(c - '0');
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_I:
                    if (c == 'P' || c == 'p')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IP;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IP:
                    if (c == 'v' || c == 'V')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV:
                    if (c == '6')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6:
                    if (c == ':')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_:
                    if (c < '\u0080' && MimeScan.IsHex((byte)c))
                    {
                        flag            = false;
                        num             = 1;
                        num2            = 1;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP;
                        continue;
                    }
                    if (c == ':')
                    {
                        num             = 0;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_STARTCOLON;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_STARTCOLON:
                    if (c == ':')
                    {
                        flag            = true;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_COMP;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP:
                    if (c < '\u0080' && MimeScan.IsHex((byte)c) && num2 < 4)
                    {
                        num2++;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP;
                        continue;
                    }
                    if (c == ':')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_COLON;
                        continue;
                    }
                    if (c == ']' && ((!flag && num == 8) || (flag && num <= 6)))
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_END;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_V4GRP:
                    if (c < '\u0080' && MimeScan.IsDigit((byte)c) && num2 < 3)
                    {
                        num2++;
                        num3            = num3 * 10 + (int)(c - '0');
                        validationStage = ((num3 <= 255) ? MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_V4GRP : MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP);
                        continue;
                    }
                    if (c < '\u0080' && MimeScan.IsHex((byte)c) && num2 < 4)
                    {
                        num2++;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP;
                        continue;
                    }
                    if (c == ':')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_COLON;
                        continue;
                    }
                    if (c == '.')
                    {
                        num             = 1;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV4_DOT;
                        continue;
                    }
                    if (c == ']' && flag && num <= 6)
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_END;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_COLON:
                    if ((c < '\u0080' && MimeScan.IsDigit((byte)c) && !flag && num == 6) || (flag && num <= 4))
                    {
                        num++;
                        num2            = 1;
                        num3            = (int)(c - '0');
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_V4GRP;
                        continue;
                    }
                    if ((c < '\u0080' && MimeScan.IsHex((byte)c) && !flag && num < 8) || (flag && num < 6))
                    {
                        num++;
                        num2            = 1;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP;
                        continue;
                    }
                    if (c == ':' && !flag && num <= 6)
                    {
                        flag            = true;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_COMP;
                        continue;
                    }
                    break;

                case MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_COMP:
                    if (c < '\u0080' && MimeScan.IsHex((byte)c) && num < 6)
                    {
                        num++;
                        num2            = 1;
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_IPV6_GRP;
                        continue;
                    }
                    if (c == ']')
                    {
                        validationStage = MimeAddressParser.ValidationStage.DOMAIN_LITERAL_END;
                        continue;
                    }
                    break;
                }
                validationStage = MimeAddressParser.ValidationStage.ERROR;
            }
            return(validationStage == MimeAddressParser.ValidationStage.DOMAIN_LITERAL_END || (validationStage == MimeAddressParser.ValidationStage.DOMAIN_SUB && (!checkLength || offset - num4 < 63)));
        }