use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\User;
+use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Email;
use Friendica\Protocol\PortableContact;
}
if ($force) {
- Contact::updateFromProbe($contact_id, true);
+ Contact::updateFromProbe($contact_id, '', true);
}
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id]);
$res = XML::parseString($handshake_xml);
+ if (!is_object($res)) {
+ Logger::info('Unparseable response', ['url' => $url]);
+
+ $fields = ['last-update' => $updated, 'failure_update' => $updated];
+ self::updateContact($contact, $fields);
+ Contact::markForArchival($contact);
+ return false;
+ }
+
if (intval($res->status) == 1) {
// we may not be friends anymore. Will keep trying for one month.
Logger::log("$url replied status 1 - marking for death ");
Logger::log("Mail: Parsing mail ".$msg_uid, Logger::DATA);
$datarray = [];
- $datarray['verb'] = ACTIVITY_POST;
- $datarray['object-type'] = ACTIVITY_OBJ_NOTE;
+ $datarray['uid'] = $importer_uid;
+ $datarray['contact-id'] = $contact['id'];
+ $datarray['verb'] = Activity::POST;
+ $datarray['object-type'] = Activity\ObjectType::NOTE;
$datarray['network'] = Protocol::MAIL;
// $meta = Email::messageMeta($mbox, $msg_uid);
}
// look for a 'references' or an 'in-reply-to' header and try to match with a parent item we have locally.
- $raw_refs = ((property_exists($meta, 'references')) ? str_replace("\t", '', $meta->references) : '');
+ $raw_refs = (property_exists($meta, 'references') ? str_replace("\t", '', $meta->references) : '');
if (!trim($raw_refs)) {
- $raw_refs = ((property_exists($meta, 'in_reply_to')) ? str_replace("\t", '', $meta->in_reply_to) : '');
+ $raw_refs = (property_exists($meta, 'in_reply_to') ? str_replace("\t", '', $meta->in_reply_to) : '');
}
$raw_refs = trim($raw_refs); // Don't allow a blank reference in $refs_arr
$datarray['parent-uri'] = $datarray['uri'];
}
- $r = Email::getMessage($mbox, $msg_uid, $reply);
- if (!$r) {
- Logger::log("Mail: can't fetch msg ".$msg_uid." for ".$mailconf['user']);
- continue;
- }
- $datarray['body'] = Strings::escapeHtml($r['body']);
- $datarray['body'] = BBCode::limitBodySize($datarray['body']);
+ $headers = imap_headerinfo($mbox, $meta->msgno);
- Logger::log("Mail: Importing ".$msg_uid." for ".$mailconf['user']);
+ $object = [];
- /// @TODO Adding a gravatar for the original author would be cool
+ if (!empty($headers->from)) {
+ $object['from'] = $headers->from;
+ }
- $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;
- }
+ if (!empty($headers->to)) {
+ $object['to'] = $headers->to;
}
- $fromarr = imap_rfc822_parse_adrlist($fromdecoded, BaseObject::getApp()->getHostName());
+ if (!empty($headers->reply_to)) {
+ $object['reply_to'] = $headers->reply_to;
+ }
- $frommail = $fromarr[0]->mailbox."@".$fromarr[0]->host;
+ if (!empty($headers->sender)) {
+ $object['sender'] = $headers->sender;
+ }
- if (isset($fromarr[0]->personal)) {
- $fromname = $fromarr[0]->personal;
- } else {
- $fromname = $frommail;
+ if (!empty($object)) {
+ $datarray['object'] = json_encode($object);
+ }
+
+ $fromname = $frommail = $headers->from[0]->mailbox . '@' . $headers->from[0]->host;
+ if (!empty($headers->from[0]->personal)) {
+ $fromname = $headers->from[0]->personal;
}
$datarray['author-name'] = $fromname;
$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']) {
$datarray['private'] = 1;
}
+
if (!PConfig::get($importer_uid, 'system', 'allow_public_email_replies')) {
$datarray['private'] = 1;
$datarray['allow_cid'] = '<' . $contact['id'] . '>';
}
+ $datarray = Email::getMessage($mbox, $msg_uid, $reply, $datarray);
+ if (empty($datarray['body'])) {
+ Logger::log("Mail: can't fetch msg ".$msg_uid." for ".$mailconf['user']);
+ continue;
+ }
+
+ Logger::log("Mail: Importing ".$msg_uid." for ".$mailconf['user']);
+
Item::insert($datarray);
switch ($mailconf['action']) {