Author: Fabien Potencier
Author: Chris Corbyn
Esempio n. 1
0
 /**
  * Checks if an email matches the current grammars
  * @param string $email
  */
 public static function email($email)
 {
     if (self::$grammar === null) {
         self::$grammar = Swift_DependencyContainer::getInstance()->lookup('mime.grammar');
     }
     return preg_match('/^' . self::$grammar->getDefinition('addr-spec') . '$/D', $email);
 }
Esempio n. 2
0
 protected function init()
 {
     if (count(self::$_specials) > 0) {
         return;
     }
     self::$_specials = array('(', ')', '<', '>', '[', ']', ':', ';', '@', ',', '.', '"');
     /**
      * * Refer to RFC 2822 for ABNF grammar **
      */
     // All basic building blocks
     self::$_grammar['NO-WS-CTL'] = '[\\x01-\\x08\\x0B\\x0C\\x0E-\\x19\\x7F]';
     self::$_grammar['WSP'] = '[ \\t]';
     self::$_grammar['CRLF'] = '(?:\\r\\n)';
     self::$_grammar['FWS'] = '(?:(?:' . self::$_grammar['WSP'] . '*' . self::$_grammar['CRLF'] . ')?' . self::$_grammar['WSP'] . ')';
     self::$_grammar['text'] = '[\\x00-\\x08\\x0B\\x0C\\x0E-\\x7F]';
     self::$_grammar['quoted-pair'] = '(?:\\\\' . self::$_grammar['text'] . ')';
     self::$_grammar['ctext'] = '(?:' . self::$_grammar['NO-WS-CTL'] . '|[\\x21-\\x27\\x2A-\\x5B\\x5D-\\x7E])';
     // Uses recursive PCRE (?1) -- could be a weak point??
     self::$_grammar['ccontent'] = '(?:' . self::$_grammar['ctext'] . '|' . self::$_grammar['quoted-pair'] . '|(?1))';
     self::$_grammar['comment'] = '(\\((?:' . self::$_grammar['FWS'] . '|' . self::$_grammar['ccontent'] . ')*' . self::$_grammar['FWS'] . '?\\))';
     self::$_grammar['CFWS'] = '(?:(?:' . self::$_grammar['FWS'] . '?' . self::$_grammar['comment'] . ')*(?:(?:' . self::$_grammar['FWS'] . '?' . self::$_grammar['comment'] . ')|' . self::$_grammar['FWS'] . '))';
     self::$_grammar['qtext'] = '(?:' . self::$_grammar['NO-WS-CTL'] . '|[\\x21\\x23-\\x5B\\x5D-\\x7E])';
     self::$_grammar['qcontent'] = '(?:' . self::$_grammar['qtext'] . '|' . self::$_grammar['quoted-pair'] . ')';
     self::$_grammar['quoted-string'] = '(?:' . self::$_grammar['CFWS'] . '?"' . '(' . self::$_grammar['FWS'] . '?' . self::$_grammar['qcontent'] . ')*' . self::$_grammar['FWS'] . '?"' . self::$_grammar['CFWS'] . '?)';
     self::$_grammar['atext'] = '[a-zA-Z0-9!#\\$%&\'\\*\\+\\-\\/=\\?\\^_`\\{\\}\\|~]';
     self::$_grammar['atom'] = '(?:' . self::$_grammar['CFWS'] . '?' . self::$_grammar['atext'] . '+' . self::$_grammar['CFWS'] . '?)';
     self::$_grammar['dot-atom-text'] = '(?:' . self::$_grammar['atext'] . '+' . '(\\.' . self::$_grammar['atext'] . '+)*)';
     self::$_grammar['dot-atom'] = '(?:' . self::$_grammar['CFWS'] . '?' . self::$_grammar['dot-atom-text'] . '+' . self::$_grammar['CFWS'] . '?)';
     self::$_grammar['word'] = '(?:' . self::$_grammar['atom'] . '|' . self::$_grammar['quoted-string'] . ')';
     self::$_grammar['phrase'] = '(?:' . self::$_grammar['word'] . '+?)';
     self::$_grammar['no-fold-quote'] = '(?:"(?:' . self::$_grammar['qtext'] . '|' . self::$_grammar['quoted-pair'] . ')*")';
     self::$_grammar['dtext'] = '(?:' . self::$_grammar['NO-WS-CTL'] . '|[\\x21-\\x5A\\x5E-\\x7E])';
     self::$_grammar['no-fold-literal'] = '(?:\\[(?:' . self::$_grammar['dtext'] . '|' . self::$_grammar['quoted-pair'] . ')*\\])';
     // Message IDs
     self::$_grammar['id-left'] = '(?:' . self::$_grammar['dot-atom-text'] . '|' . self::$_grammar['no-fold-quote'] . ')';
     self::$_grammar['id-right'] = '(?:' . self::$_grammar['dot-atom-text'] . '|' . self::$_grammar['no-fold-literal'] . ')';
     // Addresses, mailboxes and paths
     self::$_grammar['local-part'] = '(?:' . self::$_grammar['dot-atom'] . '|' . self::$_grammar['quoted-string'] . ')';
     self::$_grammar['dcontent'] = '(?:' . self::$_grammar['dtext'] . '|' . self::$_grammar['quoted-pair'] . ')';
     self::$_grammar['domain-literal'] = '(?:' . self::$_grammar['CFWS'] . '?\\[(' . self::$_grammar['FWS'] . '?' . self::$_grammar['dcontent'] . ')*?' . self::$_grammar['FWS'] . '?\\]' . self::$_grammar['CFWS'] . '?)';
     self::$_grammar['domain'] = '(?:' . self::$_grammar['dot-atom'] . '|' . self::$_grammar['domain-literal'] . ')';
     self::$_grammar['addr-spec'] = '(?:' . self::$_grammar['local-part'] . '@' . self::$_grammar['domain'] . ')';
 }
Esempio n. 3
0
 /**
  * Validates a given address to ensure RFC 2822, 3.6.2 specs
  *
  * @param $address
  *
  * @throws \Swift_RfcComplianceException
  */
 public static function validateEmail($address)
 {
     static $grammer;
     if ($grammer === null) {
         $grammer = new \Swift_Mime_Grammar();
     }
     if (!preg_match('/^' . $grammer->getDefinition('addr-spec') . '$/D', $address)) {
         throw new \Swift_RfcComplianceException('Address in mailbox given [' . $address . '] does not comply with RFC 2822, 3.6.2.');
     }
 }