2011-07-17 193 views
2

我正在iphone中开发一个应用程序,可以通过电子邮件发送报告。 使用MFMailComposeViewController框架实现了它。有没有方法来检查电子邮件是否有效。我只想将repors发送到一个有效的邮件地址。而且我想检查邮件的状态是否成功发送?检查电子邮件是否有效

+0

请参阅这篇文章。 http://stackoverflow.com/questions/800123/best-practices-for-validating-email-address-in-objective-c-on-ios-2-0 – 2011-07-17 06:22:53

回答

3

MFMailComposerViewController没有任何条款从它获取电子邮件地址。您可以通过setToRecipients:方法进行设置。但是你无法访问用户在地址栏中实际键入的内容。

而且,该消息将在邮件应用程序的发件箱实际上排队。该文件明确指出,它不能提供任何方式让您知道邮件是否实际发送。另一件事是,如果你允许用户邮寄某些邮件地址,那么他的责任是输入一个正确的邮件地址。否则,他不会收到邮件。它取决于他。为什么你甚至在意?

一个非正式的方式:看来this post显示一个未公开的方式通过邮件作曲家的子视图递归循环以访问电子邮件文本字段。此方法可能会导致您的应用程序被Apple拒绝,或者如果Apple更改了MFMailComposeViewController的实现,可能会在将来停止工作。

参考:A similar SO post here

+1

感谢您的信息。有没有其他框架可以用来克服它?它会被苹果接受吗? – Tinku

+0

是的。似乎有一种无证的方式。看到我更新的答案。请注意风险;-) – EmptyStack

2

我只是用这个代码:

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

    //Based on the string below 
    //NSString *[email protected]”\\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 = @" [email protected]#$^&*()={}[]|;’:\"<>,?/`"; 
    //filter for domain 
    NSString *unWantedInDomain = @" [email protected]#$%^&*()={}[]|;’:\"<>,+?/`"; 
    //filter for subdomain 
    NSString *unWantedInSub = @" `[email protected]#$%^&*()={}[]:\";’<>,?/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

请注意,当ICANN允许[新的顶级域名](http://www.icann.org/en/topics/new-gtld-program)时,此功能不会受到未来的限制热媒)。 – darvids0n

-1

使用此方法来检查电子邮件文本的有效性......

- (BOOL)validateEmail:(NSString *)emailStr { 
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][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

相关问题