public function __construct(Charcoal_String $address, Charcoal_String $label = NULL)
 {
     $this->address = $address;
     $this->label = $label;
     $valid = Charcoal_MailUtil::validateAddress(s($address));
     if (!$valid) {
         _throw(new Charcoal_InvalidMailAddressException($address));
     }
 }
 private function _getAddressList($data)
 {
     $out = array();
     if (is_string($data) || $data instanceof Charcoal_String) {
         // 表示名<メールアドレス>を自動変換
         mb_regex_encoding('UTF-8');
         $pattern = '/(?P<label>.*)\\<(?P<address>.*)\\>/';
         $ret = preg_match($pattern, $data, $match);
         log_debug("debug, qdmail_sender", "preg_match data:" . print_r($data, true));
         log_debug("debug, qdmail_sender", "preg_match({$ret}):" . print_r($match, true));
         if ($ret) {
             // ラベルあり
             $label = $match['label'];
             $address = $match['address'];
             $valid = Charcoal_MailUtil::validateAddress(s($address));
             if (!$valid) {
                 _throw(new Charcoal_InvalidMailAddressException($address));
             }
             $out[] = array($address, $label);
         } else {
             // アドレスは1つのみ、表示名なし
             $valid = Charcoal_MailUtil::validateAddress(s($data));
             if (!$valid) {
                 _throw(new Charcoal_InvalidMailAddressException($data));
             }
             $out[] = us($data);
         }
     } elseif ($data instanceof Charcoal_QdmailAddress) {
         // アドレスは1つのみ、QdmailAddressのインスタンス
         $address = $data;
         if ($address->hasLabel()) {
             $out[] = array($address->getAddress(), $address->getLabel());
         } else {
             $out[] = us($address->getAddress());
         }
     } elseif (is_array($data)) {
         // 配列の場合
         foreach ($data as $item) {
             if (is_string($item) || $item instanceof Charcoal_String) {
                 $item = trim($item);
                 // 表示名<メールアドレス>を自動変換
                 mb_regex_encoding('UTF-8');
                 $pattern = '/(?P<label>.*)\\<(?P<address>.*)\\>/';
                 $ret = preg_match($pattern, $item, $match);
                 log_debug("debug, qdmail_sender", "preg_match item:" . print_r($item, true));
                 log_debug("debug, qdmail_sender", "preg_match({$ret}):" . print_r($match, true));
                 if ($ret) {
                     // ラベルあり
                     $label = $match['label'];
                     $address = $match['address'];
                     $valid = Charcoal_MailUtil::validateAddress(s($address));
                     if (!$valid) {
                         _throw(new Charcoal_InvalidMailAddressException($address));
                     }
                     $out[] = array($address, $label);
                 } else {
                     // 表示名なし
                     $valid = Charcoal_MailUtil::validateAddress(s($item));
                     if (!$valid) {
                         _throw(new Charcoal_InvalidMailAddressException($item));
                     }
                     $out[] = us($item);
                 }
             } elseif ($item instanceof Charcoal_QdmailAddress) {
                 // QdmailAddressのインスタンス
                 $address = $item;
                 if ($address->hasLabel()) {
                     $out[] = array(us($address->getAddress()), us($address->getLabel()));
                 } else {
                     $out[] = us($address->getAddress());
                 }
             }
         }
     }
     return $out;
 }