williamr@2: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #if !defined (__MIUTPARS_H__) williamr@2: #define __MIUTPARS_H__ williamr@2: williamr@2: #include williamr@2: williamr@2: // comment out line below to switch ON Internet message checking williamr@2: //#define __NO_EMAIL_ADDRESS_CHECKING__ williamr@2: williamr@2: class TImMessageField williamr@2: /** Parses email message header fields for valid Internet email addresses, williamr@2: comments and aliases. williamr@2: williamr@2: A comment is a string surrounded by parentheses, as defined in RFC822, 3.1.4. williamr@2: williamr@2: An alias is defined as any substring which appears to the left of a legal email address: williamr@2: for example, the string "this is an alias" in "this is an alias ". williamr@2: williamr@2: For email addresses, the string being parsed: williamr@2: 1) must contain an @ character, surrounded by valid address characters; williamr@2: 2) may not contain more than one address or @ character; williamr@2: 3) may contain aliases and comments. williamr@2: williamr@2: Note the following about the implementation of this class: williamr@2: williamr@2: 1. Functions that test subject lines, ValidSubjectLine(), and alias names, ValidAliasName(), were williamr@2: initially written to test that the strings did not contain characters outside a limited williamr@2: ASCII range. Unicode characters are now allowed, so these functions now always return true. williamr@2: williamr@2: 2. Of the four overloads of GetValidInternetEmailAddressFromString(), only the first has a meaningful williamr@2: implementation. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TBool ValidInternetEmailAddress(const TDesC16& aAddress); williamr@2: IMPORT_C TBool ValidInternetEmailAddress(const TDesC16& aAddress, TInt& rFirstBadCharPos); williamr@2: IMPORT_C TBool ValidInternetEmailAddress(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar); williamr@2: IMPORT_C TBool ValidInternetEmailAddress(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar, TInt& rFirstBadCharPos); williamr@2: williamr@2: IMPORT_C TBool ValidInternetEmailAddressChar(const TChar& aChar); williamr@2: williamr@2: IMPORT_C TBool ValidSubjectLine(const TDesC16& aSubjectLine); williamr@2: IMPORT_C TBool ValidSubjectLine(const TDesC16& aSubjectLine, TInt& rFirstBadCharPos); williamr@2: williamr@2: IMPORT_C TBool ValidSubjectLineChar(const TChar& aChar); williamr@2: williamr@2: IMPORT_C TBool ValidAliasName(const TDesC16& aAliasName); williamr@2: IMPORT_C TBool ValidAliasName(const TDesC16& aAliasName, TInt& rFirstBadCharPos); williamr@2: williamr@2: IMPORT_C TPtrC16 GetValidInternetEmailAddressFromString(const TDesC16& aAddress); williamr@2: IMPORT_C TPtrC16 GetValidInternetEmailAddressFromString(const TDesC16& aAddress, TInt& rError); williamr@2: IMPORT_C TPtrC16 GetValidInternetEmailAddressFromString(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar); williamr@2: IMPORT_C TPtrC16 GetValidInternetEmailAddressFromString(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar, TInt& rError); williamr@2: williamr@2: IMPORT_C TPtrC16 GetValidAlias(const TDesC16& aAddress); williamr@2: IMPORT_C TPtrC16 GetValidAlias(const TDesC16& aAddress, TInt& rError); williamr@2: williamr@2: IMPORT_C TPtrC16 GetValidComment(const TDesC16& aAddress); williamr@2: IMPORT_C TPtrC16 GetValidComment(const TDesC16& aAddress, TInt& rError); williamr@2: TBool TruncateAddressString(const TDesC16& aDesc, TInt aLimit, TInt& aLastChar); williamr@2: private: williamr@2: TBool isValidEmailAddress(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar); williamr@2: TBool isLegalEmailAddress(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar); williamr@2: TBool isSurroundedByRoundBrackets(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar); williamr@2: TBool isSurroundedByAngledBrackets(const TDesC16& aAddress, TInt& rFirstChar, TInt& rLastChar, TInt aAtPos); williamr@2: TBool isEnclosedSubString(const TDesC16& anAddress, const TChar& aLeftBracket, const TChar& aRightBracket,TInt& aLeftPos, TInt& aRightPos); williamr@2: TBool isValidString(const TDesC16& anAddress, TInt& aFirstBadCharPos); williamr@2: TBool isValidChar(const TChar& aChar); williamr@2: TBool isValidEmailString(const TDesC16& anAddress, TInt& aFirstBadCharPos); williamr@2: TBool isValidEmailChar(const TChar& aChar); williamr@2: TBool LocateSubString(const TDesC16& anAddress, const TInt atPos, TInt& rFirstChar, TInt& rLastChar); williamr@2: TBool hasAngledBrackets(const TDesC16& anAddress); williamr@2: TBool isValid_ISO88591String(const TDesC16& aString,TInt& aPos); williamr@2: TBool isValidRoutedEmailAddress(const TDesC16& anAddress); williamr@2: TBool isValidDomainNameChar(const TChar& aChar); williamr@2: TBool isValidMailboxChar(const TChar& aChar); williamr@2: TBool isDotChar(const TChar& aChar); williamr@2: }; williamr@2: williamr@2: williamr@2: #endif // !defined __MIUTPARS_H__ williamr@4: