forked from EC-CUBE/ec-cube
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
携帯キャリアのメールアドレスの一部に存在するメールアドレスに対応 - user.@example.com - @ の前に . が存在する - user..name@example.com - . が2つ連続する
- Loading branch information
Showing
13 changed files
with
250 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
<?php | ||
|
||
namespace Eccube\Swift\Mime; | ||
|
||
/* | ||
* This file is part of SwiftMailer. | ||
* (c) 2004-2009 Chris Corbyn | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
/** | ||
* Defines the grammar to use for validation, implements the RFC 2822 (and friends) ABNF grammar definitions. | ||
* | ||
* Original \Swift_Mime_Grammer | ||
* | ||
* @author Fabien Potencier | ||
* @author Chris Corbyn | ||
* @author Kentaro Ohkouchi | ||
*/ | ||
class Grammar extends \Swift_Mime_Grammar | ||
{ | ||
/** | ||
* Special characters used in the syntax which need to be escaped. | ||
* | ||
* @var string[] | ||
*/ | ||
private static $_specials = array(); | ||
|
||
/** | ||
* Tokens defined in RFC 2822 (and some related RFCs). | ||
* | ||
* @var string[] | ||
*/ | ||
private static $_grammar = array(); | ||
|
||
/** | ||
* Initialize some RFC 2822 (and friends) ABNF grammar definitions. | ||
*/ | ||
public function __construct() | ||
{ | ||
$this->init(); | ||
} | ||
|
||
public function __wakeup() | ||
{ | ||
$this->init(); | ||
} | ||
|
||
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['loose-dot-atom-text'] = '(?:'.self::$_grammar['atext'].'|\.)+'; | ||
self::$_grammar['loose-dot-atom'] = '(?:'.self::$_grammar['CFWS'].'?'. | ||
self::$_grammar['loose-dot-atom-text'].'+'.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['loose-dot-atom-text'].'|'. | ||
self::$_grammar['no-fold-quote'].')'; | ||
self::$_grammar['id-right'] = '(?:'.self::$_grammar['loose-dot-atom-text'].'|'. | ||
self::$_grammar['no-fold-literal'].')'; | ||
|
||
// 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['loose-dot-atom'].'|'. | ||
self::$_grammar['quoted-string'].')'; | ||
// 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['loose-dot-atom'].'|'. | ||
self::$_grammar['domain-literal'].')'; | ||
self::$_grammar['addr-spec'] = '(?:'.self::$_grammar['local-part'].'@'. | ||
self::$_grammar['domain'].')'; | ||
} | ||
|
||
/** | ||
* Get the grammar defined for $name token. | ||
* | ||
* @param string $name exactly as written in the RFC | ||
* | ||
* @return string | ||
*/ | ||
public function getDefinition($name) | ||
{ | ||
if (array_key_exists($name, self::$_grammar)) { | ||
return self::$_grammar[$name]; | ||
} | ||
|
||
throw new Swift_RfcComplianceException( | ||
"No such grammar '".$name."' defined." | ||
); | ||
} | ||
|
||
/** | ||
* Returns the tokens defined in RFC 2822 (and some related RFCs). | ||
* | ||
* @return array | ||
*/ | ||
public function getGrammarDefinitions() | ||
{ | ||
return self::$_grammar; | ||
} | ||
|
||
/** | ||
* Returns the current special characters used in the syntax which need to be escaped. | ||
* | ||
* @return array | ||
*/ | ||
public function getSpecials() | ||
{ | ||
return self::$_specials; | ||
} | ||
|
||
/** | ||
* Escape special characters in a string (convert to quoted-pairs). | ||
* | ||
* @param string $token | ||
* @param string[] $include additional chars to escape | ||
* @param string[] $exclude chars from escaping | ||
* | ||
* @return string | ||
*/ | ||
public function escapeSpecials($token, $include = array(), $exclude = array()) | ||
{ | ||
foreach (array_merge(array('\\'), array_diff(self::$_specials, $exclude), $include) as $char) { | ||
$token = str_replace($char, '\\'.$char, $token); | ||
} | ||
|
||
return $token; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters