]> git.mxchange.org Git - friendica.git/blobdiff - include/email.php
Merge branch 'pull'
[friendica.git] / include / email.php
old mode 100644 (file)
new mode 100755 (executable)
index c0fe17c..3e6a818
@@ -4,7 +4,7 @@ function email_connect($mailbox,$username,$password) {
        if(! function_exists('imap_open'))
                return false;
 
-       $mbox = imap_open($mailbox,$username,$password);
+       $mbox = @imap_open($mailbox,$username,$password);
 
        return $mbox;
 }
@@ -12,15 +12,32 @@ function email_connect($mailbox,$username,$password) {
 function email_poll($mbox,$email_addr) {
 
        if(! ($mbox && $email_addr))
-               return array();;
+               return array();
 
-       $search = imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID);
-       return (($search) ? $search : array());
+       $search1 = @imap_search($mbox,'FROM "' . $email_addr . '"', SE_UID);
+       if(! $search1)
+               $search1 = array();
+
+       $search2 = @imap_search($mbox,'TO "' . $email_addr . '"', SE_UID);
+       if(! $search2)
+               $search2 = array();
+
+       $search3 = @imap_search($mbox,'CC "' . $email_addr . '"', SE_UID);
+       if(! $search3)
+               $search3 = array();
+
+       $search4 = @imap_search($mbox,'BCC "' . $email_addr . '"', SE_UID);
+       if(! $search4)
+               $search4 = array();
+
+       $res = array_unique(array_merge($search1,$search2,$search3,$search4));
+
+       return $res;
 }
 
 
 function construct_mailbox_name($mailacct) {
-       $ret = '{' . $mailacct['server'] . (($mailacct['port']) ? ':' . $mailacct['port'] : '');
+       $ret = '{' . $mailacct['server'] . ((intval($mailacct['port'])) ? ':' . $mailacct['port'] : '');
        $ret .= (($mailacct['ssltype']) ?  '/' . $mailacct['ssltype'] . '/novalidate-cert' : '');
        $ret .= '}' . $mailacct['mailbox'];
        return $ret;
@@ -28,15 +45,36 @@ function construct_mailbox_name($mailacct) {
 
 
 function email_msg_meta($mbox,$uid) {
-       $ret = (($mbox && $uid) ? imap_fetch_overview($mbox,$uid,FT_UID) : array(array()));
+       $ret = (($mbox && $uid) ? @imap_fetch_overview($mbox,$uid,FT_UID) : array(array()));
        return ((count($ret)) ? $ret[0] : array());
 }
 
+function email_msg_headers($mbox,$uid) {
+       $raw_header = (($mbox && $uid) ? @imap_fetchheader($mbox,$uid,FT_UID) : '');
+       $raw_header = str_replace("\r",'',$raw_header);
+       $ret = array();
+       $h = split("\n",$raw_header);
+       if(count($h))
+       foreach($h as $line ) {
+           if (preg_match("/^[a-zA-Z]/", $line)) {
+                       $key = substr($line,0,strpos($line,':'));
+                       $value = substr($line,strpos($line,':')+1);
+
+                       $last_entry = strtolower($key);
+                       $ret[$last_entry] = trim($value);
+               }
+               else {
+                       $ret[$last_entry] .= ' ' . trim($line);
+       }
+       }
+       return $ret;
+}
+
 
 function email_get_msg($mbox,$uid) {
        $ret = array();
 
-       $struc = (($mbox && $uid) ? imap_fetchstructure($mbox,$uid,FT_UID) : null);
+       $struc = (($mbox && $uid) ? @imap_fetchstructure($mbox,$uid,FT_UID) : null);
 
        if(! $struc)
                return $ret;
@@ -65,8 +103,8 @@ function email_get_part($mbox,$uid,$p,$partno) {
 
     // DECODE DATA
     $data = ($partno)
-               ? imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
-        : imap_body($mbox,$uid,FT_UID|FT_PEEK);
+               ? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
+        : @imap_body($mbox,$uid,FT_UID|FT_PEEK);
 
     // Any part may be encoded, even plain text messages, so check everything.
     if ($p->encoding==4)
@@ -129,3 +167,55 @@ function email_get_part($mbox,$uid,$p,$partno) {
 
 
 
+function email_header_encode($in_str, $charset) {
+    $out_str = $in_str;
+       $need_to_convert = false;
+
+       for($x = 0; $x < strlen($in_str); $x ++) {
+               if((ord($in_str[$x]) == 0) || ((ord($in_str[$x]) > 128))) {
+                       $need_to_convert = true;
+               }
+       }
+
+       if(! $need_to_convert)
+               return $in_str;
+
+    if ($out_str && $charset) {
+
+        // define start delimimter, end delimiter and spacer
+        $end = "?=";
+        $start = "=?" . $charset . "?B?";
+        $spacer = $end . "\r\n " . $start;
+
+        // determine length of encoded text within chunks
+        // and ensure length is even
+        $length = 75 - strlen($start) - strlen($end);
+
+        /*
+            [EDIT BY danbrown AT php DOT net: The following
+            is a bugfix provided by (gardan AT gmx DOT de)
+            on 31-MAR-2005 with the following note:
+            "This means: $length should not be even,
+            but divisible by 4. The reason is that in
+            base64-encoding 3 8-bit-chars are represented
+            by 4 6-bit-chars. These 4 chars must not be
+            split between two encoded words, according
+            to RFC-2047.
+        */
+        $length = $length - ($length % 4);
+
+        // encode the string and split it into chunks
+        // with spacers after each chunk
+        $out_str = base64_encode($out_str);
+        $out_str = chunk_split($out_str, $length, $spacer);
+
+        // remove trailing spacer and
+        // add start and end delimiters
+        $spacer = preg_quote($spacer);
+        $out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
+        $out_str = $start . $out_str . $end;
+    }
+    return $out_str;
+} 
+
+