Przedstawiam Wam moją pierwszą klasę, którą wykonałem. Ma ona za zadanie pobrać nieczytane emaile i wysłać ich tytuły na komórkę przez sms. Sprawa bardzo przydatna.
Nie jest to jakiś super profesionalny kod, ale działa.
<?
class Baza {
public $polacz;
public $host = "localhost";
public $baza = "powiadamiania";
public $user = "xxxx";
public $password = "xxxxx";
public $table;
public function __construct()
{
$this->polacz = mysqli_connect
($this->host, $this->user, $this->password, $this->baza) OR
trigger_error('Nie można połaczyć z bazą danych'); $this->polacz -> query("SET NAMES 'latin2'");
}
public function query($q)
{
return mysqli_query($this->polacz, $q);
}
public function check($data)
{
$q="SELECT * FROM `emails` WHERE `data`='$data'";
$r = $this->query($q);
$this->table = mysqli_fetch_array($r);
}
public function insert($data, $subject)
{
$q="INSERT INTO `emails` (`id`, `data`, `temat`) VALUES ('' , '$data', '$subject')";
$r = $this->query($q);
}
}
class Imap
{
public $mailbox;
public $username;
public $password;
public $type;
public $header;
public $subject;
public $data;
public $imap;
public function GetEmails()
{
$this->imap = imap_open($this->mailbox, $this->username, $this->password);
return $emails = imap_search($this->imap, $this->type);
}
public function GetHeader($email)
{
$this->header = imap_headerinfo($this->imap, $email);
$this->subject = imap_utf8($this->header->subject);
$this->data = $this->header->date;
}
}
class SendSms
{
public $url;
public $data;
public $r;
public function curl()
{
$curl = curl_init($this->url);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 50);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data);
$this->r = curl_exec($curl);
curl_errno($curl);
curl_error($curl);
curl_close($curl);
return true;
}
}
public function ShowRezults()
{
return '<h2>cURL wyni:</h2><pre>'.htmlentities($this->r).'/</pre>'; }
}
class SendTitleSms
{
public $imap;
public $baza;
public $sms;
public function __construct()
{
$this->imap = new Imap;
$this->baza = new Baza;
$this->sms = new SendSms;
}
public function SetData($mailbox, $username, $pass, $type, $tprefix, $number)
{
$this->imap->mailbox = $mailbox;
$this->imap->username = $username;
$this->imap->password = $pass;
$this->imap->type = $type;
$this->sms->url = 'ht://www.text.plusgsm.pl/sms/sendsms.php';
$this->sms->data = 'tprefix='.$tprefix.'&numer='.$number.'&odkogo=mail&tekst=';
}
public function send()
{
$emails = $this->imap->GetEmails();
foreach ($emails as $email) {
$this->imap->GetHeader($email);
$this->baza->check($this->imap->data);
if($this->baza->table['data'] == $this->imap->data) {
echo 'Ta wiadomość już jest w bazie'; } else {
$this->sms->data .= $this->imap->subject;
if($this->sms->curl()) {
$this->baza->insert($this->imap->data, $this->imap->subject);
echo $this->sms->ShowRezults(); }
}
}
}
}
}
?>
Wymagana jest jeszcze baza danych
Kod
CREATE TABLE `emails` (
`id` int(11) NOT NULL auto_increment,
`data` varchar(40) NOT NULL,
`temat` varchar(50) character set utf8 collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=109;
A tu jej uzycie
<?php
$send = new SendTitleSms;
$send->SetData("{imap.gmail.co:993/imap/ssl}INBOX", 'email', 'haslo', "UNSEEN", 'prefix', 'numertelefonu');
$send->send();
?>
Klasa ta działa tylko na telefon w plusie i ma dzienny limit bramki chyba 10 sms, ale mi to wystarcza.
Proszę o ocenę.
Ten post edytował marcinpruciak 20.09.2008, 20:47:23