initial checkin mailbox reading functions - lots more to do

This commit is contained in:
Friendika 2011-04-15 19:16:37 -07:00
parent 13eaa802e4
commit 158b65894a
5 changed files with 118 additions and 12 deletions

1
.gitignore vendored
View file

@ -7,4 +7,5 @@ include/jquery-1.4.2.min.js
*.out *.out
*.version* *.version*
push* push*
langup
home.html home.html

View file

@ -2,7 +2,7 @@
set_time_limit(0); set_time_limit(0);
define ( 'FRIENDIKA_VERSION', '2.1.949' ); define ( 'FRIENDIKA_VERSION', '2.1.950' );
define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
define ( 'DB_UPDATE_VERSION', 1051 ); define ( 'DB_UPDATE_VERSION', 1051 );

View file

@ -17,9 +17,7 @@ If your Friendika site is called "demo.friendika.com" and your username/nickname
Notice this looks just like an email address. It was meant to be that way. It's easy for people to remember. Notice this looks just like an email address. It was meant to be that way. It's easy for people to remember.
You *could* also put in the URL of your profile page, such as "http://demo.friendika.com/profile/bob". You *could* also put in the URL of your "home" page, such as "http://demo.friendika.com/profile/bob", but the email-style address is certainly easier.
The email-style address is certainly easier.
When you've submitted the connection page, it will take you back to your own site where you must then login (if necessary) and verify the connection request on *your* site. Once you've done this, the two websites can communicate with each other to complete the process (after your new friend has approved the request). When you've submitted the connection page, it will take you back to your own site where you must then login (if necessary) and verify the connection request on *your* site. Once you've done this, the two websites can communicate with each other to complete the process (after your new friend has approved the request).

107
include/imap.php Normal file
View file

@ -0,0 +1,107 @@
<?php
function f9_imap_connect($mailbox,$username,$password) {
if(! (local_user() && function_exists('imap_open')))
return false;
$mbox = imap_open($mailbox,$username,$password);
return $mbox;
}
function f9_imap_poll_from($mbox,$str) {
if(! ($mbox && $str))
return false;
$search = imap_search($mbox,'FROM "' . $str . '"', SE_UID);
return $search;
}
function getmsg($mbox,$mid) {
// input $mbox = IMAP stream, $mid = message id
// output all the following:
global $charset,$htmlmsg,$plainmsg,$attachments;
$htmlmsg = $plainmsg = $charset = '';
$attachments = array();
// HEADER
$h = imap_header($mbox,$mid);
// add code here to get date, from, to, cc, subject...
// BODY
$s = imap_fetchstructure($mbox,$mid);
if (!$s->parts) // simple
getpart($mbox,$mid,$s,0); // pass 0 as part-number
else { // multipart: cycle through each part
foreach ($s->parts as $partno0=>$p)
getpart($mbox,$mid,$p,$partno0+1);
}
}
function getpart($mbox,$mid,$p,$partno) {
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
global $htmlmsg,$plainmsg,$charset,$attachments;
// DECODE DATA
$data = ($partno)?
imap_fetchbody($mbox,$mid,$partno): // multipart
imap_body($mbox,$mid); // simple
// Any part may be encoded, even plain text messages, so check everything.
if ($p->encoding==4)
$data = quoted_printable_decode($data);
elseif ($p->encoding==3)
$data = base64_decode($data);
// PARAMETERS
// get all parameters, like charset, filenames of attachments, etc.
$params = array();
if ($p->parameters)
foreach ($p->parameters as $x)
$params[strtolower($x->attribute)] = $x->value;
if ($p->dparameters)
foreach ($p->dparameters as $x)
$params[strtolower($x->attribute)] = $x->value;
// ATTACHMENT
// Any part with a filename is an attachment,
// so an attached text file (type 0) is not mistaken as the message.
if ($params['filename'] || $params['name']) {
// filename may be given as 'Filename' or 'Name' or both
$filename = ($params['filename'])? $params['filename'] : $params['name'];
// filename may be encoded, so see imap_mime_header_decode()
$attachments[$filename] = $data; // this is a problem if two files have same name
}
// TEXT
if ($p->type==0 && $data) {
// Messages may be split in different parts because of inline attachments,
// so append parts together with blank row.
if (strtolower($p->subtype)=='plain')
$plainmsg. = trim($data) ."\n\n";
else
$htmlmsg. = $data ."<br><br>";
$charset = $params['charset']; // assume all parts are same charset
}
// EMBEDDED MESSAGE
// Many bounce notifications embed the original message as type 2,
// but AOL uses type 1 (multipart), which is not handled here.
// There are no PHP functions to parse embedded messages,
// so this just appends the raw source to the main message.
elseif ($p->type==2 && $data) {
$plainmsg. = $data."\n\n";
}
// SUBPART RECURSION
if ($p->parts) {
foreach ($p->parts as $partno0=>$p2)
getpart($mbox,$mid,$p2,$partno.'.'.($partno0+1)); // 1.2, 1.2.1, etc.
}
}

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.1.949\n" "Project-Id-Version: 2.1.949\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-14 20:36-0700\n" "POT-Creation-Date: 2011-04-15 01:04-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -43,9 +43,9 @@ msgstr ""
#: ../../mod/follow.php:8 ../../mod/display.php:133 ../../mod/profiles.php:7 #: ../../mod/follow.php:8 ../../mod/display.php:133 ../../mod/profiles.php:7
#: ../../mod/profiles.php:227 ../../mod/invite.php:13 ../../mod/invite.php:54 #: ../../mod/profiles.php:227 ../../mod/invite.php:13 ../../mod/invite.php:54
#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:110 #: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:110
#: ../../wip/photos.php:77 ../../wip/photos.php:723 ../../wip/group.php:19 #: ../../wip/photos.php:77 ../../wip/photos.php:723 ../../wip/follow2.php:8
#: ../../wip/photos-chris.php:97 ../../wip/photos-chris.php:770 #: ../../wip/group.php:19 ../../wip/photos-chris.php:97
#: ../../index.php:265 #: ../../wip/photos-chris.php:770 ../../index.php:265
msgid "Permission denied." msgid "Permission denied."
msgstr "" msgstr ""
@ -2006,21 +2006,21 @@ msgstr ""
msgid "Welcome back " msgid "Welcome back "
msgstr "" msgstr ""
#: ../../mod/follow.php:186 #: ../../mod/follow.php:32 ../../wip/follow2.php:186
msgid "The profile address specified does not provide adequate information." msgid "The profile address specified does not provide adequate information."
msgstr "" msgstr ""
#: ../../mod/follow.php:192 #: ../../mod/follow.php:38 ../../wip/follow2.php:192
msgid "" msgid ""
"Limited profile. This person will be unable to receive direct/personal " "Limited profile. This person will be unable to receive direct/personal "
"notifications from you." "notifications from you."
msgstr "" msgstr ""
#: ../../mod/follow.php:247 #: ../../mod/follow.php:89 ../../wip/follow2.php:247
msgid "Unable to retrieve contact information." msgid "Unable to retrieve contact information."
msgstr "" msgstr ""
#: ../../mod/follow.php:293 #: ../../mod/follow.php:135 ../../wip/follow2.php:293
msgid "following" msgid "following"
msgstr "" msgstr ""