Archive

Posts Tagged ‘Gmail’

XBMC Gmail notifications.

February 14th, 2010 James No comments

I have this php script currently running on my nas to let me know if I have any new mail.  It works with gmail.com, googlemail.com and google app address’.  I simply use cron to execute the script every 15 minutes.

i.e. (0,15,30,45 17-23 * * * php /var/www/checkgmail.php > /dev/null   #Check Gmail)

   1: <?php

   2: $emailaddress = 'someemailaddress@gmail.com'; // i.e. bob@gmail.com or bob@bobsdomain.com if you use google apps

   3: $password = 'somepassword'; // email password

   4: $xbmcaddress = '192.168.1.1'; // IP or hostname of your xbmc

   5: $xbmcport = '8080'; // port the xbmc web server is running on.

   6:

   7:

   8: $domain = explode('@',$emailaddress);

   9: if ($domain['1'] == 'gmail.com' || $domain['1'] == 'googlemail.com')

  10:     {

  11:     $use_googleapps = false;

  12:     } else {

  13:     $use_googleapps = true;

  14:     }

  15: if ($use_googleapps == true)

  16:     {

  17:     $url = 'https://mail.google.com/a/'.$domain['1'].'/feed/atom';

  18:     } else {

  19:     $url = 'https://mail.google.com/mail/feed/atom';

  20:     }

  21:

  22:

  23:     $ch = curl_init ($url);

  24:     curl_setopt($ch, CURLOPT_HEADER, 0);

  25:     curl_setopt($ch, CURLOPT_PROTOCOLS,CURLPROTO_HTTPS);

  26:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  27:     curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);

  28:     $curllogin = $emailaddress.':'.$password;

  29:     curl_setopt($ch, CURLOPT_USERPWD,$curllogin);

  30:     $rawdata=curl_exec($ch);

  31:     curl_close ($ch);

  32:

  33: $array = xml2array($rawdata);

  34: $array = $array['feed'];

  35: //print_r($array);

  36:

  37: if ($array['fullcount'] < 1)

  38:     {

  39:     echo ' no new mail ';

  40:     } else {

  41:     if ($array['fullcount'] == 1)

  42:         {

  43:         fopen("http://".$xbmcaddress.":".$xbmcport."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$emailaddress.",You%20Have%20A%20New%20Email!))",r);

  44:         } else {

  45:         fopen("http://".$xbmcaddress.":".$xbmcport."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$emailaddress.".",You%20Have%20".$array['fullcount']."%20New%20Emails!))",r);

  46:         }

  47:

  48:

  49:     }

  50:

  51:

  52:

  53: function xml2array($contents, $get_attributes=1, $priority = 'tag') {

  54:     if(!$contents) return array();

  55:

  56:     if(!function_exists('xml_parser_create')) {

  57:         //print "'xml_parser_create()' function not found!"; 

  58:         return array();

  59:     }

  60:

  61:     //Get the XML parser of PHP - PHP must have this module for the parser to work

  62:     $parser = xml_parser_create('');

  63:     xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss 

  64:     xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

  65:     xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

  66:     xml_parse_into_struct($parser, trim($contents), $xml_values);

  67:     xml_parser_free($parser);

  68:

  69:     if(!$xml_values) return;//Hmm...

  70:

  71:     //Initializations

  72:     $xml_array = array();

  73:     $parents = array();

  74:     $opened_tags = array();

  75:     $arr = array();

  76:

  77:     $current = &$xml_array; //Refference

  78:

  79:     //Go through the tags.

  80:     $repeated_tag_index = array();//Multiple tags with same name will be turned into an array

  81:     foreach($xml_values as $data) {

  82:         unset($attributes,$value);//Remove existing values, or there will be trouble

  83:

  84:         //This command will extract these variables into the foreach scope

  85:         // tag(string), type(string), level(int), attributes(array).

  86:         extract($data);//We could use the array by itself, but this cooler.

  87:

  88:         $result = array();

  89:         $attributes_data = array();

  90:

  91:         if(isset($value)) {

  92:             if($priority == 'tag') $result = $value;

  93:             else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode

  94:         }

  95:

  96:         //Set the attributes too.

  97:         if(isset($attributes) and $get_attributes) {

  98:             foreach($attributes as $attr => $val) {

  99:                 if($priority == 'tag') $attributes_data[$attr] = $val;

 100:                 else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'

 101:             }

 102:         }

 103:

 104:         //See tag status and do the needed.

 105:         if($type == "open") {//The starting of the tag '<tag>' 

 106:             $parent[$level-1] = &$current;

 107:             if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag

 108:                 $current[$tag] = $result;

 109:                 if($attributes_data) $current[$tag. '_attr'] = $attributes_data;

 110:                 $repeated_tag_index[$tag.'_'.$level] = 1;

 111:

 112:                 $current = &$current[$tag];

 113:

 114:             } else { //There was another element with the same tag name

 115:

 116:                 if(isset($current[$tag][0])) {//If there is a 0th element it is already an array

 117:                     $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;

 118:                     $repeated_tag_index[$tag.'_'.$level]++;

 119:                 } else {//This section will make the value an array if multiple tags with the same name appear together

 120:                     $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array

 121:                     $repeated_tag_index[$tag.'_'.$level] = 2;

 122:

 123:                     if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well

 124:                         $current[$tag]['0_attr'] = $current[$tag.'_attr'];

 125:                         unset($current[$tag.'_attr']);

 126:                     }

 127:

 128:                 }

 129:                 $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;

 130:                 $current = &$current[$tag][$last_item_index];

 131:             }

 132:

 133:         } elseif($type == "complete") { //Tags that ends in 1 line '<tag />' 

 134:             //See if the key is already taken. 

 135:             if(!isset($current[$tag])) { //New Key 

 136:                 $current[$tag] = $result;

 137:                 $repeated_tag_index[$tag.'_'.$level] = 1;

 138:                 if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;

 139:

 140:             } else { //If taken, put all things inside a list(array) 

 141:                 if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array... 

 142:

 143:                     // ...push the new element into that array. 

 144:                     $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;

 145:

 146:                     if($priority == 'tag' and $get_attributes and $attributes_data) {

 147:                         $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;

 148:                     }

 149:                     $repeated_tag_index[$tag.'_'.$level]++;

 150:

 151:                 } else { //If it is not an array... 

 152:                     $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value 

 153:                     $repeated_tag_index[$tag.'_'.$level] = 1;

 154:                     if($priority == 'tag' and $get_attributes) {

 155:                         if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well 

 156:

 157:                             $current[$tag]['0_attr'] = $current[$tag.'_attr'];

 158:                             unset($current[$tag.'_attr']);

 159:                         }

 160:

 161:                         if($attributes_data) {

 162:                             $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;

 163:                         }

 164:                     }

 165:                     $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken 

 166:                 }

 167:             }

 168:

 169:         } elseif($type == 'close') { //End of tag '</tag>' 

 170:             $current = &$parent[$level-1];

 171:         }

 172:     }

 173:

 174:     return($xml_array);

 175: }

 176: ?>

Categories: Techy Stuff Tags: , , ,

Using Gmail as a Sendmail Relay

April 7th, 2009 James 19 comments

The revenge this time its personal!

K I just setup sendmail to relay using gmail again,  thought I better post what I have done as my original now out of date post is still getting quite a lot of views.

This is based on my Ubuntu 8.10 Server ( 2.6.27-11-server) all patched up todays date and then I did the below. Read more…

Categories: Techy Stuff Tags: , ,

Getting sendmail to use gmail as a relay.

November 18th, 2007 James 7 comments
These instructions have been updated for Ubuntu 8.10 HERE

I did this a while a go, when i was getting asterisk to forward my home voice mail to me and my wifes email address’.

Add the following to your sendmail.mc

define(`SMART_HOST’,`smtp.gmail.com:465′)
define(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
FEATURE(`authinfo’,`hash /etc/mail/auth/client-info’)dnl

Read more…

Categories: Techy Stuff Tags: , , , ,