2011-07-17 21 views
2

電子メールでレポートを送信できるアプリをiPhoneで開発中です。 MFMailComposeViewControllerフレームワークを使用して実装しました。電子メールが有効かどうかを確認する方法はありますか?私はレポーターを有効なメールアドレスにのみ送りたいと思っています。また、メールが正常に送信されたかどうかを確認したいのですか?電子メールが有効かどうかを確認する

+0

この記事を参照してください。 http://stackoverflow.com/questions/800123/best-practices-for-validating-email-address-in-objective-c-on-ios-2-0 –

答えて

3

MFMailComposerViewControllerには、電子メールアドレスを取得するための規定がありません。 setToRecipients:メソッドで設定できます。しかし、ユーザーがアドレスフィールドの中に実際に入力したものにアクセスすることはできません。

メッセージは実際にメールメールボックス送信ボックスにキューイングされます。また、この文書には、実際にメールが送信されたかどうかを知る方法はありません。

もう1つのことは、ユーザーが何らかのメールアドレスに何かを郵送することを許可すれば、正しいメールアドレスを入力する責任があるということです。そうでなければ、彼はメールを受け取らないでしょう。彼のそれまで。なぜあなたは気にしますか?

文書化されていない方法: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/ja/topics/new-gtld-program .htm)。 – 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

関連する問題