IMAP spout
Ok, so programmed a very simple (and very dirty) Email-Spout. It will only show the subject, date and html/plain body of a mail. No attachments, nothing else. Please do not judge me for not really implementing the get_icon, get_link and get_html... functions. And it has some problems with utf-8 or whatever conversion (help appreciated). I copied this in /spouts/mail/mail.php.
<?PHP
namespace spouts\mail;
class mailItem {
private $id;
private $title;
private $date;
private $content;
public function setId($id) {
$this->id = $id;
}
public function get_id() {
return $this->id;
}
public function setTitle($title) {
$this->title = $title;
}
public function get_title() {
return $this->title;
}
public function setDate($date) {
$this->date = $date;
}
public function get_date() {
return date('Y-m-d H:i:s', $this->date);
}
public function setContent($content) {
$this->content = $content;
}
public function get_content() {
return $this->content;
}
public function get_link() {
return $this->title;
}
public function getHtmlUrl() {
return $this->title;
}
}
class mail extends \spouts\spout {
public $name = 'Email';
public $description = 'email imap account as source';
public $params = array(
"email" => array(
"title" => "Email",
"type" => "text",
"default" => "",
"required" => true,
"validation" => array("email")
),
"password" => array(
"title" => "Password",
"type" => "password",
"default" => "",
"required" => true,
"validation" => array("notempty")
),
"host" => array(
"title" => "URL",
"type" => "text",
"default" => "{imap.one.com:993/service=imap/ssl}INBOX",
"required" => true,
"validation" => array("notempty")
)
);
/**
* current fetched items
*
* @var array|bool
*/
protected $items = false;
//
// Iterator Interface
//
/**
* reset iterator
*
* @return void
*/
public function rewind() {
if($this->items!==false)
reset($this->items);
}
/**
* receive current item
*
* @return current item
*/
public function current() {
if($this->items!==false)
return $this;
return false;
}
/**
* receive key of current item
*
* @return mixed key of current item
*/
public function key() {
if($this->items!==false)
return key($this->items);
return false;
}
/**
* select next item
*
* @return next item
*/
public function next() {
if($this->items!==false)
next($this->items);
return $this;
}
/**
* end reached
*
* @return bool false if end reached
*/
public function valid() {
if($this->items!==false)
return current($this->items) !== false;
return false;
}
//
// Source Methods
//
/**
* loads content for given source
*
* @return void
* @param mixed $params the params of this source
*/
public function load($params) {
// initialize
$mails = '';
$mbox = imap_open($params["host"],$params["email"],$params["password"]) or die("Could not open Mailbox - try again later!");
$message_count = imap_num_msg($mbox);
for ($i = 1; $i <= $message_count; ++$i) {
$thisMail = new mailItem();
$thisMail->setTitle(quoted_printable_decode(imap_header($mbox, $i)->subject));
$thisMail->setDate(imap_header($mbox, $i)->udate);
$thisMail->setId(imap_header($mbox, $i)->message_id);
$struct = imap_fetchstructure($mbox, $i, $options = null);
if(isset($struct->parts)) {
foreach($struct->parts as $key => $value) {
if(strtoupper($value->subtype) == "HTML"){
$thisMail->setContent(quoted_printable_decode(imap_fetchbody($mbox, $i, $key)));
}
}
}
else $thisMail->setContent(quoted_printable_decode(imap_fetchbody($mbox, $i, "1")));
$mails[]=$thisMail;
}
imap_close($mbox);
// save fetched items
$this->items = @$mails;
}
/*----Please continue with 2nd part----*/
Complete thread:
- IMAP spout -
morphiumdeus,
2013-07-09, 14:48
- IMAP spout -
morphiumdeus,
2013-07-09, 18:43
- IMAP spout - morphiumdeus, 2013-07-09, 18:43
- IMAP spout -
morphiumdeus,
2013-07-09, 18:43