2011-07-17 254 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

相關問題