Разрабатываю приложение для iphone, в котором отчеты можно отправлять по электронной почте. Реализовали его с помощью фреймворка MFMailComposeViewController. Есть ли способ проверить, действителен ли адрес электронной почты. Я хочу отправлять отчеты только на действующий почтовый адрес. А также я хочу проверить статус письма, успешно ли оно отправлено?
Проверить, действителен ли электронный адрес
Ответы (3)
MFMailComposerViewController не имеет возможности получить от него адрес электронной почты. Вы можете установить его с помощью метода setToRecipients:. Но вы не можете получить доступ к тому, что пользователь фактически ввел в адресные поля.
И сообщение будет фактически помещено в очередь в исходящих приложения Mail. И в документе четко указано, что он не дает вам возможности узнать, действительно ли письмо отправлено или нет.
Другое дело, что, если вы разрешаете пользователю отправлять что-либо на какой-то почтовый адрес, то его ответственность - ввести правильный почтовый адрес. В противном случае он не получит почту. Его дело. Почему тебя это вообще волнует?
Недокументированный способ: похоже, < strong> этот пост показывает недокументированный способ получить доступ к текстовому полю электронной почты путем рекурсивного цикла через подвиды составителя почты. Этот метод может привести к отклонению вашего приложения Apple или может перестать работать в будущем, если Apple изменит реализацию MFMailComposeViewController.
Ссылка: аналогичное сообщение SO здесь .
Я просто использую этот код:
-(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;
}
Используйте этот метод для проверки действительности текста электронного письма ...
- (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