diff --git a/include/Contact.php b/include/Contact.php index a4477c8cb..62122de6c 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -584,10 +584,10 @@ function get_contact($url, $uid = 0, $no_update = false) { return 0; } - $data = Probe::uri($url); + $data = Probe::uri($url, "", $uid); // Last try in gcontact for unsupported networks - if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_PUMPIO))) { + if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_PUMPIO, NETWORK_MAIL))) { if ($uid != 0) { return 0; } diff --git a/include/email.php b/include/email.php index 78e98a830..b3bd52a66 100644 --- a/include/email.php +++ b/include/email.php @@ -18,22 +18,27 @@ function email_poll($mbox,$email_addr) { return array(); $search1 = @imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID); - if (! $search1) + if (!$search1) { $search1 = array(); + } else { + logger("Found mails from ".$email_addr, LOGGER_DEBUG); + } $search2 = @imap_search($mbox,'TO "' . $email_addr . '"', SE_UID); - if (! $search2) + if (!$search2) { $search2 = array(); + } else { + logger("Found mails to ".$email_addr, LOGGER_DEBUG); + } $search3 = @imap_search($mbox,'CC "' . $email_addr . '"', SE_UID); - if (! $search3) + if (!$search3) { $search3 = array(); + } else { + logger("Found mails cc ".$email_addr, LOGGER_DEBUG); + } - $search4 = @imap_search($mbox,'BCC "' . $email_addr . '"', SE_UID); - if (! $search4) - $search4 = array(); - - $res = array_unique(array_merge($search1,$search2,$search3,$search4)); + $res = array_unique(array_merge($search1, $search2, $search3)); return $res; } diff --git a/include/onepoll.php b/include/onepoll.php index 28afca28a..91f517bde 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -328,7 +328,7 @@ function onepoll_run(&$argv, &$argc){ unlink($cookiejar); } elseif ($contact['network'] === NETWORK_MAIL || $contact['network'] === NETWORK_MAIL2) { - logger("Mail: Fetching", LOGGER_DEBUG); + logger("Mail: Fetching for ".$contact['addr'], LOGGER_DEBUG); $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); if ($mail_disabled) @@ -363,10 +363,10 @@ function onepoll_run(&$argv, &$argc){ } if ($mbox) { - $msgs = email_poll($mbox,$contact['addr']); + $msgs = email_poll($mbox, $contact['addr']); if (count($msgs)) { - logger("Mail: Parsing ".count($msgs)." mails for ".$mailconf[0]['user'], LOGGER_DEBUG); + logger("Mail: Parsing ".count($msgs)." mails from ".$contact['addr']." for ".$mailconf[0]['user'], LOGGER_DEBUG); $metas = email_msg_meta($mbox,implode(',',$msgs)); if (count($metas) != count($msgs)) { @@ -498,46 +498,36 @@ function onepoll_run(&$argv, &$argc){ logger("Mail: Importing ".$msg_uid." for ".$mailconf[0]['user']); - // some mailing lists have the original author as 'from' - add this sender info to msg body. /// @TODO Adding a gravatar for the original author would be cool - if (! stristr($meta->from,$contact['addr'])) { - $from = imap_mime_header_decode($meta->from); - $fromdecoded = ""; - foreach ($from as $frompart) { - if ($frompart->charset != "default") { - $fromdecoded .= iconv($frompart->charset, 'UTF-8//IGNORE', $frompart->text); - } else { - $fromdecoded .= $frompart->text; - } - } - - $fromarr = imap_rfc822_parse_adrlist($fromdecoded, $a->get_hostname()); - - $frommail = $fromarr[0]->mailbox."@".$fromarr[0]->host; - - if (isset($fromarr[0]->personal)) { - $fromname = $fromarr[0]->personal; + $from = imap_mime_header_decode($meta->from); + $fromdecoded = ""; + foreach ($from as $frompart) { + if ($frompart->charset != "default") { + $fromdecoded .= iconv($frompart->charset, 'UTF-8//IGNORE', $frompart->text); } else { - $fromname = $frommail; + $fromdecoded .= $frompart->text; } - - //$datarray['body'] = "[b]".t('From: ') . escape_tags($fromdecoded) . "[/b]\n\n" . $datarray['body']; - - $datarray['author-name'] = $fromname; - $datarray['author-link'] = "mailto:".$frommail; - $datarray['author-avatar'] = $contact['photo']; - - $datarray['owner-name'] = $contact['name']; - $datarray['owner-link'] = "mailto:".$contact['addr']; - $datarray['owner-avatar'] = $contact['photo']; - - } else { - $datarray['author-name'] = $contact['name']; - $datarray['author-link'] = 'mailbox'; - $datarray['author-avatar'] = $contact['photo']; } + $fromarr = imap_rfc822_parse_adrlist($fromdecoded, $a->get_hostname()); + + $frommail = $fromarr[0]->mailbox."@".$fromarr[0]->host; + + if (isset($fromarr[0]->personal)) { + $fromname = $fromarr[0]->personal; + } else { + $fromname = $frommail; + } + + $datarray['author-name'] = $fromname; + $datarray['author-link'] = "mailto:".$frommail; + $datarray['author-avatar'] = $contact['photo']; + + $datarray['owner-name'] = $contact['name']; + $datarray['owner-link'] = "mailto:".$contact['addr']; + $datarray['owner-avatar'] = $contact['photo']; + $datarray['uid'] = $importer_uid; $datarray['contact-id'] = $contact['id']; if ($datarray['parent-uri'] === $datarray['uri']) diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 431ff5bf7..d27ce1851 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -306,7 +306,7 @@ class Probe { * * @return array uri data */ - public static function uri($uri, $network = "", $uid = 0, $cache = true) { + public static function uri($uri, $network = "", $uid = -1, $cache = true) { if ($cache) { $result = Cache::get("probe_url:".$network.":".$uri); @@ -315,7 +315,7 @@ class Probe { } } - if ($uid == 0) { + if ($uid == -1) { $uid = local_user(); } @@ -1483,27 +1483,29 @@ class Probe { return false; } - $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid)); + if ($uid != 0) { + $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid)); - $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval($uid)); + $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval($uid)); - if (dbm::is_result($x) && dbm::is_result($r)) { - $mailbox = construct_mailbox_name($r[0]); - $password = ''; - openssl_private_decrypt(hex2bin($r[0]['pass']), $password, $x[0]['prvkey']); - $mbox = email_connect($mailbox, $r[0]['user'], $password); - if (!mbox) { + if (dbm::is_result($x) && dbm::is_result($r)) { + $mailbox = construct_mailbox_name($r[0]); + $password = ''; + openssl_private_decrypt(hex2bin($r[0]['pass']), $password, $x[0]['prvkey']); + $mbox = email_connect($mailbox, $r[0]['user'], $password); + if (!mbox) { + return false; + } + } + + $msgs = email_poll($mbox, $uri); + logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG); + + if (!count($msgs)) { return false; } } - $msgs = email_poll($mbox, $uri); - logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG); - - if (!count($msgs)) { - return false; - } - $phost = substr($uri, strpos($uri, '@') + 1); $data = array(); @@ -1512,7 +1514,7 @@ class Probe { $data["name"] = substr($uri, 0, strpos($uri, '@')); $data["nick"] = $data["name"]; $data["photo"] = avatar_img($uri); - $data["url"] = 'http://'.$phost."/".$data["nick"]; + $data["url"] = 'mailto:'.$uri; $data["notify"] = 'smtp '.random_string(); $data["poll"] = 'email '.random_string(); @@ -1542,7 +1544,9 @@ class Probe { } } } - imap_close($mbox); + if (!empty($mbox)) { + imap_close($mbox); + } return $data; }