+// parse email address input (and count addresses)
+function rcmail_email_input_format($mailto, $count=false, $check=true)
+{
+ global $EMAIL_FORMAT_ERROR, $RECIPIENT_COUNT;
+
+ $regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m', '/;/', '/(\S{1})(<\S+@\S+>)/U');
+ $replace = array(', ', ', ', '', ',', '\\1 \\2');
+
+ // replace new lines and strip ending ', ', make address input more valid
+ $mailto = trim(preg_replace($regexp, $replace, $mailto));
+
+ $result = array();
+ $items = rcube_explode_quoted_string(',', $mailto);
+
+ foreach($items as $item) {
+ $item = trim($item);
+ // address in brackets without name (do nothing)
+ if (preg_match('/^<\S+@\S+>$/', $item)) {
+ $item = rcube_idn_to_ascii($item);
+ $result[] = $item;
+ // address without brackets and without name (add brackets)
+ } else if (preg_match('/^\S+@\S+$/', $item)) {
+ $item = rcube_idn_to_ascii($item);
+ $result[] = '<'.$item.'>';
+ // address with name (handle name)
+ } else if (preg_match('/\S+@\S+>*$/', $item, $matches)) {
+ $address = $matches[0];
+ $name = str_replace($address, '', $item);
+ $name = trim($name);
+ if ($name && ($name[0] != '"' || $name[strlen($name)-1] != '"')
+ && preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name)) {
+ $name = '"'.addcslashes($name, '"').'"';
+ }
+ $address = rcube_idn_to_ascii($address);
+ if (!preg_match('/^<\S+@\S+>$/', $address))
+ $address = '<'.$address.'>';
+
+ $result[] = $name.' '.$address;
+ $item = $address;
+ } else if (trim($item)) {
+ continue;
+ }