Проверить, действителен ли электронный адрес

Разрабатываю приложение для iphone, в котором отчеты можно отправлять по электронной почте. Реализовали его с помощью фреймворка MFMailComposeViewController. Есть ли способ проверить, действителен ли адрес электронной почты. Я хочу отправлять отчеты только на действующий почтовый адрес. А также я хочу проверить статус письма, успешно ли оно отправлено?


person Tinku    schedule 17.07.2011    source источник
comment
Пожалуйста, обратитесь к этому сообщению. stackoverflow.com/questions/800123/   -  person    schedule 17.07.2011


Ответы (3)


MFMailComposerViewController не имеет возможности получить от него адрес электронной почты. Вы можете установить его с помощью метода setToRecipients:. Но вы не можете получить доступ к тому, что пользователь фактически ввел в адресные поля.

И сообщение будет фактически помещено в очередь в исходящих приложения Mail. И в документе четко указано, что он не дает вам возможности узнать, действительно ли письмо отправлено или нет.

Другое дело, что, если вы разрешаете пользователю отправлять что-либо на какой-то почтовый адрес, то его ответственность - ввести правильный почтовый адрес. В противном случае он не получит почту. Его дело. Почему тебя это вообще волнует?

Недокументированный способ: похоже, < strong> этот пост показывает недокументированный способ получить доступ к текстовому полю электронной почты путем рекурсивного цикла через подвиды составителя почты. Этот метод может привести к отклонению вашего приложения Apple или может перестать работать в будущем, если Apple изменит реализацию MFMailComposeViewController.

Ссылка: аналогичное сообщение SO здесь .

person EmptyStack    schedule 17.07.2011
comment
Спасибо за вашу информацию. Есть ли какие-то другие рамки, которые можно использовать для его преодоления? Примет ли это яблоко? - person Tinku; 18.07.2011
comment
да. Вроде бы есть недокументированный способ. См. Мой обновленный ответ. Остерегайтесь и рисков ;-) - person EmptyStack; 18.07.2011

Я просто использую этот код:

-(BOOL) validEmail:(NSString *)email {

    //Based on the string below
    //NSString *strEmailMatchstring=@”\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b”;

    //Quick return if @ Or . not in the string
    if([email rangeOfString:@"@"].location==NSNotFound || [email rangeOfString:@"."].location==NSNotFound)
        return NO;

    //Break email address into its components
    NSString *accountName=[email substringToIndex: [email rangeOfString:@"@"].location];
    email=[email substringFromIndex:[email rangeOfString:@"@"].location+1];

    //’.’ not present in substring
    if([email rangeOfString:@"."].location==NSNotFound)
        return NO;
    NSString *domainName=[email substringToIndex:[email rangeOfString:@"."].location];
    NSString *subDomain=[email substringFromIndex:[email rangeOfString:@"."].location+1];

    //username, domainname and subdomain name should not contain the following charters below
    //filter for user name
    NSString *unWantedInUName = @" ~!@#$^&*()={}[]|;’:\"<>,?/`";
    //filter for domain
    NSString *unWantedInDomain = @" ~!@#$%^&*()={}[]|;’:\"<>,+?/`";
    //filter for subdomain 
    NSString *unWantedInSub = @" `~!@#$%^&*()={}[]:\";’<>,?/1234567890";

    //subdomain should not be less that 2 and not greater 6
    if(!(subDomain.length>=2 && subDomain.length<=6)) return NO;

    if([accountName isEqualToString:@""] || [accountName rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:unWantedInUName]].location!=NSNotFound || [domainName isEqualToString:@""] || [domainName rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:unWantedInDomain]].location!=NSNotFound || [subDomain isEqualToString:@""] || [subDomain rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:unWantedInSub]].location!=NSNotFound)
        return NO;

    return YES;
}
person Cyprian    schedule 17.07.2011
comment
Обратите внимание, что эта функция не рассчитана на будущее, когда ICANN разрешит новый топ домены уровня. - person ; 18.07.2011

Используйте этот метод для проверки действительности текста электронного письма ...

- (BOOL)validateEmail:(NSString *)emailStr {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:emailStr]; }

https://stackoverflow.com/a/7123957/1463604

person Nishant    schedule 04.01.2013