Проверьте, является ли электронная почта действительной - PullRequest
2 голосов
/ 17 июля 2011

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

Ответы [ 3 ]

3 голосов
/ 17 июля 2011

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

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

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

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

Ссылка: Подобный SO пост здесь .

2 голосов
/ 17 июля 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;
}
0 голосов
/ 04 января 2013

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

- (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

...