Home » Resurse Web Design » Posta electronica

 
 
 

Posta electronica

Scopuri

• învăţaţi să expediaţi mesaje de e-mail prin intermediu» protocolului SMTP
• învăţaţi să obţineţi accesul la mesajele de e-mail rezidente pe un server IMAP
• învăţaţi să manipulaţi mesajele si dosarele IMAP

În cadrul acestui modul, este explicat modul de utilizare a limbajului PHP pentru a expedia, respectiv pentru a recepţiona mesaje de e-mail. Pentru ca funcţionalităţile prezentate în acest modul să fie utilizabile, serverul dumneavoastră PHP trebuie configurat astfel încât să accepte IMAP. Mai mult, scripturile dumneavoastră PHP trebuie să fie capabile de a obţine accesul la serviciile SMTP (Simple Mail Transfer Protocol) şi IMAP (Interim Mail Access Protocol). Aşadar, consultaţi-vă cu adminis¬tratorul dumneavoastră de sistem înainte de a investi timp în depanarea exemplelor; problema o poate constitui serverul PHP, nu dumneavoastră sau exemplul prezentat.
Expedierea mesajelor de poştă electronică
Configuraţia PHP standard acceptă expedierea mesajelor de e-mail prin intermediul SMTP (abreviere de la Simple Mail Transfer Protocol). Acesta este proto¬colul standard folosit pentru transferul mesajelor de e-mail de la un sistem la altul, prin intermediul Internetului.
Mesajele de e-mail sunt alcătuite din două părţi: o serie de antete de mesaj şi un corp. Antetele de mesaj indică adresa destinatarului şi subiectul mesajului, precum şi alte informaţii. Corpul conţine mesajul în sine.
Pentru a expedia un mesaj de e-mail prin intermediul SMTP, invocaţi funcţia mail(), care are următoarea formă:

mail(destinatar, subiect, corp)

unde destinatar indică adresa de e-mail a destinatarului, subiect specifică antetul de e-mail care conţine subiectul mesajului, iar corp este corpul mesajului. Se obişnu¬ieşte ca adresele de e-mail să includă şi adresa de e-mail a expeditorului. Pentru a include adresa de e-mail a expeditorului, folosiţi următoarea forma a funcţiei mail:

mail(destinatar, subiect, corp, antete)

unde antete specifică adresele de e-mail suplimentare, precum antetul from:.

210

Iată un exemplu care prezintă modul de expediere a unui mesaj de e-mail, care conţine un antet ce include adresa de e-mail a expeditorului:

mail( bill@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza ,
„Acesta este subiectul mesajului”,
„Acesta este corpul unui mesaj foarte scurt”,
„From: expeditor@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza ”)

Puteţi specifica mai mulţi destinatari prin separarea fiecărui destinatar de următorul prin intermediul unei virgule:

mail( bill@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza , bob@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza ,
„Acesta este subiectul mesajului”,
„Acesta este corpul unui mesaj foarte scurt”,
„From: expeditor@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza ”)

Funcţia mail() returnează true dacă serverul SMTP acceptă mesajul; în caz contrar, returnează false. Reţineţi că acceptarea de către serverul SMTP nu garan¬tează transmiterea către destinatar a mesajului dumneavoastră de e-mail. Nu există nici o modalitate 100% sigură de a verifica faptul că mesajul dumneavoastră a fost transmis, aşa cum nu există nici o modalitate absolut sigură de a garanta că desti¬natarul a citit mesajul, la înţeles şi a fost de acord cu el.
Unele servere SMTP refuză să accepte adrese şi antete care conţin spatii albe la sfârşit.Dacă scriptul dumneavoastră presupune că utilizatorul va introduce aceste valori trebuie să invocaţi funcţia trim() având valorile respective ca argument. De exemplu:

mail(trim($destinatar), trim($subiect), $corp,
„From: „ . trim($expeditor))

<Test „la minut”>
• Care este funcţia PHP care trimite mesaje de poştă electronică prin intermediul serviciului SMTP?
• Când expediaţi mesaje de e-mail folosind PHP, care este caracterul folosit pentru a separa între ele adresele mai multor destinatari? </Test „la minut”>

Proiect 12-1: Un script de trimitere a formularelor
În cadrul acestui proiect, veţi construi un script care adună date dintr-un formular HTML şi le trimite unui utilizator specificat, prin intermediul poştei electronice. Scriptul este scris de aşa manieră încât poate fi controlat folosind variabile de formular HTML. Puteţi crea o diversitate de formulare HTML care folosesc scriptul, fără a fi necesară revizuirea scriptului.

<Notă>
Răspunsuri la test:
• mail()
• o virgulă</Notă>

211

<Sfatul specialistului>
Întrebare: Este posibilă utilizarea limbajului PHP pentru expedierea mesajelor de poştă electronică în care sunt incluse fişiere ataşate?
Răspuns: Da, dar biblioteca PHP nu include funcţii care facilitează această operaţie. Dacă fişierul ataşat nu este un fişier de tip text simplu, trebuie să-1 codificaţi folosind formatul MIME (Multipurpose Internet Mail Extensions). Apoi, puteţi încorpora în antete speciale datele codificate în format MIME. Diferiţi programatori şi autori au scris funcţii şi clase PHP destinate a simplifica acest proces. Pentru a învăţa mai multe despre fişiere ataşate şi MIME, vizitaţi adresa http://wvwv.phpbuilder.com. </Sfatul specialistului>

Scopurile proiectului
• Prezentarea modului de expediere a mesajelor de poştă electronică folosind PHP
• Prezentarea modului de creare a unui script reutilizabil care prelucrează datele din formularul HTML

Pas cu pas
1. Plasaţi următorul script PHP într-un fişier denumit mailform.php şi încărcaţi acest fişier în serverul dumneavoastră PHP:

<?php

$corp = „”;
foreach ($http_POST_VARS as $nume=>$valoare)
{
$corp = $corp . „$nume=>$valoare\n”;
}
mail($mailform_destinatar,$mailform_subiect, $corp,
„From: „ . $mailform_expeditor);
header(„Location: $mailform_adresa”);

?>

2. Alocaţi un timp studiului scriptului PHP. Scriptul obţine acces la valorile câmpurilor din formular prin intermediul tabloului asociativ $HTTP_POST_VARS. Apoi, scriptul coma¬sează valorile tuturor câmpurilor în variabila şir $corp, care este folosită pentru a stabili valoarea corpului mesajului de e-mail.
De asemenea, remarcaţi şi celelalte variabile din formular, şi anume $mailform_destinatar, $mailform_expeditor şi $mailform_subiect. Stabilind valorile controalelor asociate ale formularului, puteţi specifica adresa de e-mail a expeditorului şi a destinatarului, precum şi linia de subiect a mesajului de e-mail.
Observaţi că scriptul foloseşte funcţia PHP header(), care trimite browserului un antet HTTP. Antetul Location (locaţie) determină browserul să preia şi să afişeze documentul asociat cu adresa URL specificată. Adresa URL în sine este specificată de un câmp ascuns al formularului HTML care trimite date scriptului. Prin stabilirea valorii acestui câmp, puteţi specifica pagina pe care o vede utilizatorul după ce datele din formular au fost prelucrate, în mod caracteristic, veţi trimite utilizatorul la o pagină în care acestuia i se mulţumeşte pentru datele introduse sau pentru tranzacţie.

212

3. Plasaţi următoarea pagină HTML într-un fişier denumit mailfrm1.html şi încărcaţi acest fişier în serverul dumneavoastră, inserându-l în acelaşi catalog ca şi fişierul mailform.php;

<HTML>
<HEAD>
<TITLE>mailfrm1.html</TITLE>
</HEAD>
<BODY>
<FORM METHOD=”POST” ACTION=”mailform.php”>

<H2>Formular de trimitere a datelor pentru e-mail</H2>
Introduceti aici datele dumneavoastra:
<BR>
<INPUT TYPE=”TEXT” NAME=”data” SIZE=”24”>
<BR><BR>
<INPUT TYPE=”SUBMIT” VALUE=”Trimite”>

<INPUT TYPE=”HIDDEN” NAME=”mailform_destinatar”
VALUE= bmccarty@apu.edu Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza >
<INPUT TYPE=”HIDDEN” NAME=”mailform_expeditor”
VALUE= bmccarty@apu.edu Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza >
<INPUT TYPE=”HIDDEN” NAME=”mailform_subiect”
VALUE=”Subiectul”>
<INPUT TYPE=”HIDDEN” NAME=”mailform_adresa”
VALUE=”mailfrm2.html”>

</FORM>
</BODY>
</HTML> HYPERLINK

4. Observaţi că formularul HTML are un singur câmp pentru introducerea datelor de către utilizator, denumit data. Cu toate acestea, scriptul va prelucra toate câmpurile pe care doriţi să le definiţi.
5. Plasaţi următoarea pagină HTML într-un fişier numit mailfrm2.html şi încărcaţi acest fişier în serverul dumneavoastră, inserându-l în acelaşi catalog ca şi fişierul mailform.php:

<HTML>
<HEAD>
<TITLE>mailfrm2.html</TITLE>
</HEAD>
<BODY>
<H2>Mesaj receptionat</H2>
Multumim! Datele dumneavoastra au fost trimise!
</BODY>
</HTML>

6. Orientaţi un browser Web către adresa URL a scriptului mailfrm1.html. Browserul afişează următorul ecran:
<ecran>
Email Data Subtnission Form
<câmp>
Eoter your data here:
</câmp>
<buton>
Submit
</buton>
</ecran>

213

7. Introduceţi datele aferente formularului şi executaţi clic pe butonul de trimitere. Browserul afişează ecranul alăturat:
<ecran>
Email Receipt
Thanks! Your data has been sent on its way!
</ecran>
8. Mesajul primit de destinatar este similar cu următorul listing:

Data: Sun, 15 Apr 2005 16:27:11 –0700
Expeditor: bill@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza
Destinatar: bill@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza
Subiect: Subiectul

data=Acestea sunt datele pe care le-am introdus.
mailform_destinatar= bill@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza
mailform_expeditor= bill@osborne.com Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza
mailform_subiect=Subiectul
mailform_adresa=mailfrm2.html

Recepţionarea mesajelor de e-mail
Această secţiune tratează elementele fundamentale ale procesului de recepţionare prin intermediul IMAP, protocolul Interim Mail Access Protocol. Din păcate, recep¬ţionarea mesajelor de e-mail este un proces oarecum mai complex decât expedierea lor; ca atare, această secţiune este semnificativ mai lungă decât precedenta.
Mai mult, deşi SMTP face parte din configuraţia PHP standard, IMAP nu este o componentă a acestei configuraţii. Deci, dacă administratorul dumneavoastră PHP nu a configurat PHP astfel încât să lucreze cu IMAP, exemplele din această secţiune nu vor funcţiona.
Deschiderea unei cutii poştale
Un server IMAP este accesibil în acelaşi mod ca şi un fişier oarecare. Mai întâi, trebuie să deschideţi o conexiune cu serverul. Apoi, puteţi trimite cereri serverului şi puteţi primi răspunsuri de la acesta. Când aţi terminat de utilizat serverul, trebuie să închideţi conexiunea.
Pentru a deschide o conexiune cu un server IMAP, folosiţi funcţia imap_open(), care are următoarea formă:

imap_open(cutie_postala, identificator_utilizator, parola)

Argumentul numit cutie_postala specifică patru elemente informaţionale:
• Numele gazdei sau adresa IP a serverului IMAP
• Protocolul care va fi utilizat (IMAP)
• Portul care se va folosi pentru contactarea serverului (în general 143)
• Cutia poştală care va fi deschisă (în general INBOX)

214

Argumentul foloseşte numeroşi delimitatori pentru a separa un element de altul. Iată o valoare caracteristică a argumentului:

{localhost/imap:143}INBOX

În cadrul acestui exemplu, numele gazdei este specificat sub forma localhost; acest lucru este posibil când un server PHP şi un server IMAP rulează pe acelaşi sistem gazdă. În caz contrar, trebuie să specificaţi numele gazdei care rulează serverul IMAP. De exemplu:

{mail.osborne.com/imap:143}INBOX

Celelalte argumente ale funcţiei imap_open(), identificator_utilizator şi parola, specifică identificatorul de utilizator şi parola folosite pentru a obţine accesul la serverul IMAP. Aşa cum funcţia fopen() returnează un identificator pe care îl puteţi folosi pentru a obţine accesul la un fişier, funcţia imap_open() returnează un identifi¬cator pe care îl puteţi folosi pentru a obţine accesul la serverul IMAP. Dacă PHP nu poate deschide o conexiune cu serverul IMAP, funcţia imap_open() returnează false.
<Sugestie>
Dacă un script se încheie cu mesajul „Call to undefined function*: imap_open”, aceasta arată că PHP nu a fost configurat pentru a folosi IMAP. Luaţi legătura cu administratorul dumneavoastră de sistem, pentru a beneficia de asistenţă în rezolvarea acestei probleme.
Iată un exemplu care prezintă modul de invocare a funcţiei imap_open() şi testarea rezultatului returnat de funcţie:

function open_mailbox**($server, $identificator_utilizator, $parola)
{
echo “\n\n”;
echo ”<H4>Deschide conexiunea IMAP cu $server.</H4>”;
$identificator = imap_open($server . “INBOX”,
$identificator_utilizator, $parola);
if ($identificator === false)
{
echo “Nu s-a putut deschide cutia postala IMAP INBOX.”;
print_error_stack();
die();
}
return $identificator;
}

Exemplul este prezentat sub forma unei funcţii definite de utilizator, denumită open_mailbox(). Puteţi folosi această funcţie în propriile dumneavoastră scripturi PHP. Funcţia open_mailbox() generează date de ieşire care vă vor ajuta să fiţi la

<notă>
*În traducere apel la o funcţie nedefinită-N.T.
**În traducere deschide cutia poştală – N.T. </notă>

215

curent cu acţiunile programului dumneavoastră. De asemenea, se execută o verifi¬care a apariţiei erorilor. Veţi economisi un oarecare volum de muncă dacă apelaţi funcţia open_mailbox() în loc să apelaţi direct funcţia imap_open(). Desigur, dacă datele generate de funcţia open_mailbox() sau modalitatea de verificare a apariţiei erorilor nu vă satisfac, le puteţi modifica, vă puteţi scrie propria dumneavoastră funcţie definită de utilizator sau apelaţi direct funcţia imap_open().

<Sugestie >
Dacă nu vă mai amintiţi foarte exact de funcţiile PHP definite de utilizator, trebuie să treceţi din nou în revistă Modulul 7. </Sugestie >

Observaţi că funcţia open_mailbox() apelează funcţia print_error_stack*() dacă apelul la funcţia imap_open() eşuează. Funcţia print_error_stack() este o altă funcţie definită de utilizator. Iată care este definiţia acesteia:

function print_error_stack()
{
echo “\n\n”;
echo “<H4>Stiva de erori IMAP</H4>”;
$erori = imap_errors();
if $(erori)
{

foreach ($erori as $cheie=>$valoare)
{
echo “\n$cheie: $valoare”;
}
}
}

Funcţia apelează funcţia de bibliotecă IMAP imap_errors(), care returnează un tablou care conţine mesaje de eroare. Apoi, funcţia parcurge iterativ tabloul, folo¬sind o instrucţiune foreach, care afişează fiecare eroare.

Comutarea între dosare
În afară de dosarul INBOX standard, IMAP permite unui utilizator să definească dosare, care pot fi folosite de acesta din urmă pentru stocarea şi organizarea mesa¬jelor primite, în orice moment, un dosar IMAP – INBOX sau un alt dosar – este considerat ca fiind dosarul curent. După ce aţi stabilit o conexiune cu un server IMAP, puteţi cere serverului să desemneze alt dosar ca dosar curent. Iată o funcţie definită de utilizator care vă permite să procedaţi astfel:

function switch_to_folder**($identificator, $server, $prefix, $dosar)
{
if ($dosar = = „INBOX”)

<notă>
*În traducere afiţeasp stiva cu erori – N.T.
**În traducere comută la dosar— N.T. </notă>

216

{
$dosar = $server . „INBOX”;
}
else
{
$dosar = $server . $prefix . „INBOX.” . $dosar;
}
echo „\n\n”;
echo „<H4>Comuta in dosarul $dosar</H4>”;
$ok = imap_reopen($identificator, $dosar);
if ($ok === false)
{
echo „\nNu a putut deschide dosarul specificat.”;
print_error_stack();
}
}

Funcţia definită de utilizator invocă funcţia IMAP imap_reopen(), care preia două argumente: identificatorul returnat de funcţia imap_open() (sau de către funcţia definită de utilizator open_mailbox(), care apelează funcţia imap_open()) şi numele dosarului care urmează a fi deschis. Funcţia definită de utilizator preia, în afară de identificator, numeroase alte argumente, pe care le foloseşte pentru a alcătui numele dosarului. Puteţi apela funcţia switch_to_folder() astfel:

switch_to_folder(„{localhost/imap:143}”, “~/mail/”,”dosarul”)

<Remarcă>
De obicei, numele dosarelor IMAP sunt obţinute prin prefixarea numelui dosarului cu particula „-/mail/” şi „INBOX”, aşa cum o presupune funcţia switch_to_folder() şi invocarea dată ca exemplu. Cu toate acestea, un administrator de sistem poate configura o altă politică de atribuire a numelor. Dacă aveţi o problemă cu utilizarea funcţiei switch_to_folder(), luaţi legătura cu administratorul dumneavoastră de sistem, pentru a determina politica adecvată de denumire a dosarelor. </Remarcă>

Închiderea unei cutii poştale
Când aţi terminat de utilizat un server IMAP, trebuie să îl închideţi, aşa cum închideţi un fişier atunci când aţi finalizat utilizarea acestuia. Iată o funcţie definită de utilizator pentru închiderea unei conexiuni IMAP:

function close_mailbox($identificator)
{
echo „\n\n”;
echo „<H4>Inchide conexiunea IMAP</H4>”;
$ok = imap_close($identificator);
if ($ok === false)
{
echo „\nNu a reusit sa inchida cutia postala.”;
print_error_stack();
}
}

217

Funcţia foloseşte funcţia din biblioteca IMAP imap_close() şi funcţia definită de utilizator print_error_stack() care a fost prezentată anterior.

Obţinerea informaţiilor referitoare la o cutie poştală
După deschiderea unei conexiuni IMAP, puteţi obţine acces la informaţii care descriu cutia poştală curentă. De exemplu, iată o funcţie definită de utilizator care returnează numărul mesajelor din cutia poştală curentă:

function get_message_count*($identificator)
{
return imap_num_msg($identificator);
}

Funcţia definită de utilizator nu face decât să apeleze funcţia din biblioteca IMAP imap_num_msg (). Totuşi, puteţi adăuga linii de program suplimentare la funcţia definită de utilizator; de exemplu, puteţi adăuga o instrucţiune care afişează numărul de mesaje.
Iată o funcţie definită de utilizator mai complexă, care afişează o varietate de informaţii referitoare la cutia poştală curentă:

function print_mailbox_status**($identificator)
{
echo „\n\n”;
echo „<H4>Starea cutiei postale</H4>”;
$n = imap_num_msg($identificator);
echo „\nCutia postala contine $n mesaje.”;

$n = imap_num_recent($identificator);
echo „\nCutia postala contine $n mesaje.”;

echo „\n\n”;
$obiect_cutie_postala = imap_mailboxmsginfo($identificator);
if ($obiect_cutie_postala)
{
$tablou_cutie_postala = get_object_vars($obiect_cutie_postala);
foreach ($obiect_cutie_postala as $cheie=>$valoare)
{
echo „\n$cheie: $valoare”;
}
}
}

Această funcţie afişează numărul mesajelor şi pe acela al mesajelor recente din cutia poştală. Apoi, funcţia afişează o varietate de informaţii, inclusiv:
• Data ultimei modificări a cutiei poştale
• Numele cutiei poştale

<Notă>
*În traducere obţine numărul de mesaje – N.T.
** În traducere afişează starea cutiei poştale – N.T.

218

• Numărul mesajelor din cutia poştală
• Numărul mesajelor recente din cutia poştală
• Numărul mesajelor necitite din cutia poştală
• Numărul mesajelor şterse din cutia poştală
• Dimensiunea cutiei poştale, în octeţi

Observaţi funcţia de bibliotecă IMAP imap_mailboxmsginfo(), care returnează o valoare atribuită obiectului $obiect_cutie_postala. Această valoare este de tip obiect. Modulul 15 va aborda obiectele şi modul de utilizare a acestora. Totuşi, nu trebuie să cunoaşteţi modul de lucru cu obiectele pentru a folosi această valoare. Prin transferul valorii ca argument al funcţiei get_object_vars(), aceasta returnează un tablou asociativ care conţine datele obiectului. Funcţia definită de utilizator print_mailbox_status() foloseşte această tehnică pentru a obţine şi a afişa informaţii referitoare la starea cutiei poştale.
Iată un rezultat caracteristic al funcţiei print_mailbox_status():

Starea cutiei postale
INBOX contine 3 mesaje
INBOX contine 0 mesaje recente

Unread: 0
Deleted: 0
Nmsgs: 3
Size: 1078
Date: Fri, 25 May 2001 08:57:53 –0700 (PDT)
Driver: imap
Mailbox: {localhost.localdomain:143/imap/user=”bmccarty”}INBOX
Recent: 0

Funcţia definită de utilizator dump_mailbox_status() prezintă o altă metodă de abordare a funcţiei imap_mailboxmsginfo():

function dump_mailbox_status($identificator)
{
echo „\n\n”;
echo „<H4>Afisarea starii cutiei postale</H4>”;
echo „\n\n”;
$obiect_cutie_postala = imap_mailboxmsginfo($identificator);
print_r($obiect_cutie_postala);
}

Funcţia PHP print_r() afişează valoarea unui obiect. Această metodă este cu mult mai simplă decât cea folosită de funcţia print_mailbox_status(), dar formatul datelor de ieşire este cu mult mai puţin inteligibil:

Afisarea starii cutiei postale
stdClass 0object
(
[Unread] => 0
[Deleted] => 0
[Nmsgs] => 3

219

[Size] => 1078
[Date] => Fri, 25 May 2001 08:57:53 –0700 (PDT)
[Driver] => imap
[Mailbox] => {localhost.localdomain:143/imap/user=”bmccarty”}INBOX
[Recent] => 0
)

<Sugestie>
Motivul pentru care prezentăm funcţiile IMAP în asociere cu funcţiile definite de utiliza¬tor este acela că funcţiile definite de utilizator servesc drept instrumente de construcţie a unui program IMAP. Funcţiile definite de utilizator generează date de ieşire şi mesaje de eroare care vă ajută să stabiliţi o logică adecvată a programului dumneavoastră. După ce, în esenţă, programul a ajuns să realizeze ceea ce doriţi dumneavoastră, puteţi ajusta funcţiile definite de utilizator pentru a elimina datele de ieşire, pentru a le re-formata sau orice altceva. O modificare pe care trebuie să o aveţi în vedere constă în prefixarea apelurilor de funcţii cu un caracter @, pentru ca mesajele de eroare prestabilite să nu vă „strice” paginile în cazul apariţiei unor probleme. </Sugestie>

Obţinerea unei liste de mesaje
Iată o funcţie definită de utilizator care afişează o listă de mesaje în dosarul curent:

function list_messages($identificator)
{
echo „\n\n”;
echo „<H4>Antete de mesaje in cutia postala curenta</H4>”;
$antete = imap_headers($identificator);

if ($antete == false)
{
echo „\nNu a reusit sa afiseze mesajele.”;
print_error_stack();
}
else
{
foreach ($antete as $cheie=>$valoare)
{
echo „\n$valoare”;
}
}
}

Funcţia definită de utilizator apelează funcţia IMAP imap_headers(), care returnează un tablou unde fiecare element descrie un mesaj din dosarul curent.

<Notă>
În traducere ofişează mesaje – N.T. </Notă>

220

Lucrul cu identificatori de mesaje
O ciudăţenie a serviciului IMAP constă în aceea că fiecare mesaj dintr-un dosar are atât un număr, cât şi un identificator. Numărul reprezintă poziţia mesajului în dosarul respectiv; această valoare se poate modifica la adăugarea mesajelor, respec¬tiv la ştergerea mesajelor din dosar. Pe de altă parte, identificatorul unui mesaj nu se modifică niciodată.
IMAP furnizează funcţii care vă permit să determinaţi identificatorul unui mesaj dacă este dat numărul său şi invers. Iată funcţiile definite de utilizator care invocă funcţiile de bibliotecă IMAP conexe:

function get_message_id*($identificator, $numar)
{
return imap_uid($identificator, numar)
}
function get_message_num**($identificator, $id)
{
return imap_msgno($identificator, $id)
}

Obţinerea de informaţii referitoare la un mesaj
O limitare a funcţiei imap_headers(), folosită în funcţia definită de utilizator list_messages(), este aceea că nu separă fiecare caracteristică a mesajului în câmpuri distincte, astfel încât acestea să fie uşor accesibile pentru un script. Funcţia de bibliotecă IMAP imap_fetch_overview() returnează un tablou asociativ care descrie un mesaj. Iată o funcţie definită de utilizator, care foloseşte funcţia imap_fetch_overview() pentru a afişa informaţiile despre mesaje:

function print_overview***($identificator, $numar)
{
echo „\n\n”;
echo „<H4>Mesaj $n: Vedere de ansamblu</H4>”;
$nr_mesaj = „” . $numar;
$mesaje = imap_fetch_overview($identificator, $nr_mesaj, 0);
foreach ($mesaje as $mesaj)
{
$n = $mesaj->msgno;
foreach ($mesaj as $proprietate=>$valoare)
{
echo „\n$proprietate: $valoare;”
}
}
}

<Notă>
*În traducere obţine identificatorul mesajului – N.T.
**În traducere obţine numărul mesajului – N.T.
***În traducere afişează vederea de ansamblu – N.T. </Notă>

221

Al doilea argument al funcţiei imap_fetch_overview() vă permite să specificaţi o listă sau un domeniu de mesaje pentru care funcţia returnează vederi de ansamblu. Funcţia definită de utilizator print_overview() alcătuieşte o listă cu un singur membru şi transmite lista funcţiei imap_fetch_overview().
Datele de ieşire conţin următoarele informaţii:
• Subiectul mesajului
• Numele şi adresa de e-mail ale expeditorului
• Data la care a fost trimis mesajul
• Numărul mesajului
• Identificatorul mesajului
• Dimensiunea mesajului (în octeţi)
• Indicatoare care precizează dacă:
– Mesajul este recent
– Mesajul a fost citit
– Mesajul a primit un răspuns
– Mesajul a fost marcat în vederea ştergerii
– Mesajul este o ciornă
– Mesajul este o ciornă

Obţinerea corpului unui mesaj
Corpul unui mesaj include conţinutul efectiv al mesajului. Iată o pereche de funcţii definite de utilizator care afişează corpul mesajului:

function print_body_by_num*($identificator, $numar)
{
$id = get_message_id($identificator, $numar);
print_body_id($identificator, $id);
}
function print_body_by_id**($identificator, $numar)
{
echo „\n\n”;
$numar = get_message_num($identificator, $id);
$echo „<H4>Message ID $id(Number $numar) Body</H4>”;
$s = imap_body($identificator, $id, FT_UID);
echo „\n$s”;
}

Una dintre funcţii vă permite să specificaţi mesajul în funcţie de numărul mesajului, iar cealaltă vă permite să specificaţi mesajul în funcţie de identificatorul acestuia. Remarcaţi modul de implementare a funcţiei print_body_by_num(). Aceasta converteşte numărul mesajului într-un identificator de mesaj şi apoi apelează funcţia sa geamănă, în speţă print_body_by_id(), care la rândul său apelează funcţia IMAP imap_body().

<notă>
* În traducere afişează corpul în funcţie de număr – N.T.
** În traducere afişează corpul în funcţie de identificator – N.T. </notă>

222

Obţinerea antetelor de mesaj
Antetele de mesaj conţin informaţii importante, care în general nu apar în corpul mesajului, precum data şi subiectul mesajului. Iată o funcţie definită de utilizator care afişează antetele unui mesaj, dacă este dat numărul mesajului:

function print_headers*($identificator, $numar)
{
echo „\n\n”;
echo „<H4>Mesaj $n: Antete</H4>”;
$obiect_antet = imap_headerinfo($identificator, $numar);
$antete = get_object_vars($obiect_antet);
foreach ($antete as $proprietate=>$valoare)
{
if (!is_array($valoare))
{
echo „\n$proprietate: $valoare”;
}
else
{
foreach ($valoare as $sub_valoare)
{
echo „\n$proprietate: ”;
$sub_valori = get_object_vars($sub_valoare);
foreach ($sub_valoare as $articol=>$valoare_articol)
{
echo „\n $articol=>$valoare_articol”;
}
}
}
}
}

Similar funcţiei definite de utilizator print_mailbox_status(), funcţia print_headers() foloseşte funcţia get_object_vars() pentru a converti un obiect într-un tablou asociativ. Obiectul returnat de funcţia de bibliotecă IMAP imap_headerinfo() include următoarele informaţii:
• Data expedierii mesajului
• Subiectul mesajului
• Identificatorul mesajului la care s-a răspuns prin acest mesaj, dacă există
• Indicatoare de mesaj, cum sunt cele returnate de funcţia imap_fetch_overview()
• Numele şi adresa de e-mail ale:
– Expeditorului
– Persoanei care primeşte răspunsul, dacă este specificată
– Destinatarilor
– Destinatarilor eventualelor copii (cc:)
– Destinatarilor eventualelor copii la indigo necunoscute (bcc:), dacă informaţiile respective sunt disponibile
<notă>
*În traducere afişează antetele — N.T. </notă>

223

Numeroase elemente ale tabloului asociativ au valori de tip tablou. Pentru parcur¬gerea iterativă şi afişarea valorii acestor elemente se foloseşte o buclă imbricată.
Pentru aplicaţii mai puţin pretenţioase, funcţia dump_headers() formatează aceleaşi date de ieşire ca şi print_headers(), dar foloseşte pentru aceasta funcţia print_r(), generând astfel date de ieşire mai puţin inteligibile:

function dump_headers($identificator, $numar)
{
$antete = imap_headerinfo($identificator, $numar);
echo „\n\n”;
echo „<H4>Mesaj $n: Afisare antete</H4>”;
print_r($antete);
}

Marcarea unui mesaj în vederea ştergerii
Pentru a şterge un mesaj IMAP, mai întâi îl marcaţi în vederea ştergerii şi apoi îl eliminaţi. Mesajele marcate pentru ştergere, dar care nu au fost încă eliminate, sunt numai semnalate ca şterse şi sunt în continuare accesibile.
Iată diferite funcţii definite de utilizator care vă permit să ştergeţi un mesaj prin specificarea numărului sau a identificatorului mesajului:

function delete_message_by_num*($identificator, $numar)
{
$id = get_message_id($identificator, $numar);
delete_message_by_id**($identificator, $id);
}
function delete_message_by_id($identificator, $id)
{
echo „\n\n”;
$numar = get_message_num($identificator, $id);
echo „<H4>Marking Message ID $id(Numar $numar) for deletion</H4>”;
$ok = imap_delete($identificator, $id, FT_UID);
if ($ok == false)
{
echo „\nNu s-a reusit stergerea mesajului.”;
print_error_stack();
}
}

Pentru a elimina mesajele şterse, invocaţi următoarea funcţie definită de utilizator:

function expunge_messages***($identificator)
{
echo „\n\n”;
echo „<H4>Elimina mesajele sterse</H4>”;
$ok = imap_expunge($identificator);
if ($ok == false)

<notă>
* În traducere şterge mesajul în funcţie de număr – N .T.
** în traducere şterge mesajul în funcţie de identificator – N.T.
***în traducere elimină mesaje — N.T. </notă>

224

{
echo „\nNu s-a reusit eliminarea mesajelor.”;
print_error_stack();
}
}

<Sfatul specialistului>
Întrebare:Furnizorul meu de servicii Internet dispune de un server POP, nu de un server IMAP. Pot avea acces la cutia mea poştală POP cu ajutorul sistemului PHP?
Răspuns:Da. De fapt, puteţi avea acces la cutia poştală folosind biblioteca IMAP. Pur şi simplu deschideţi o conexiune cu serverul POP specificând o cutie poştală POP, astfel:
$mbox = imap_open(„{localhost/pop3:110}INBOX”, $identificator_utilizator, $parola);
Numele gazdei, protocolul şi numărul portului sunt asemănătoare cu valorile similare folosite pentru conectarea la un server IMAP. Ca şi în cazul unui server IMAP, poate că este necesară modificarea numelui cutiei poştale, pentru ca acesta să se conformeze politicilor stabilite de către administratorul de sistem.
De asemenea, puteţi folosi biblioteca IMAP pentru a vă conecta la un server de informaţii folosind NNTP (Network News Transfer Protocol). Pentru aceasta, deschideţi o conexiune astfel:
$nntp = imap_open(n{localhost/nntp:119}coinp.test”, „”, „”);
Consultaţi manualul PHP pe suport electronic la adresa http://www.php.net pentru mai multe informaţii despre utilizarea funcţiilor din biblioteca IMAP pentru a obţine accesul la un server POP sau la un server de informaţii. </Sfatul specialistului>

<Test „la minut”>
• Ce trebuie să faceţi înainte de a obţine accesul la o cutie poştală IMAP?
• Când sunt marcate pentru ştergere, mesajele IMAP dispar sau nu?
• Care din cei doi identificatori este mai durabil: un număr de mesaj IMAP sau un identificator de mesaj?
• Care sunt informaţiile incluse într-un antet de mesaj e-mail? </Test „la minut”>

<notă>
Răspunsuri la test:
• Deschideţi o conexiune cu serverul IMAP.
• Nu. Mesajele IMAP rămân în dosar până când sunt eliminate.
• Identificatorul de mesaj este mai durabil.
• Data la care a fost trimis mesajul, subiectul mesajului, identificatorul mesajului la care s-a răs¬puns prin mesajul curent (dacă există), indicatoare (flag) de mesaj, respectiv numele şi adresele de e-mail ale persoanelor vizate de mesajul e-mail, şi anume expeditorul şi destinatarul. </notă>

225

Proiect 12-2: Un program de navigare pentru poşta electronică
În cadrul acestui proiect, veţi construi un script care vă permite să parcur¬geţi un dosar IMAP.
Scopurile proiectului
• Prezentarea modului de invocare a funcţiilor IMAP prin intermediul funcţiilor definite de utilizator amintite în acest modul
• Prezentarea modului de acces la dosarele şi mesajele IMAP
Pas cu pas
1. Plasaţi următorul script PHP într-un fişier denumit cititor.php şi încărcaţi acest fişier în serverul dumneavoastră PHP:

<?php
require(„cititor.inc”);

echo „<PRE>”;

$server = „{” . $gazda . „/imap:143}”;
$imap = open_mailbox($server, $id_utilizator, $parola);
list_messages($imap);
$n = get_message_count($imap);
for ($i = 1; $i <= $n; $i++)
{
print_headers($imap, $i);
print_body_by_num($imap, $i);
}
close_mailbox($imap);

echo „</PRE>”;

2. Plasaţi următorul script PHP (cam lung) într-un fişier denumit cititor.inc şi încărcaţi acest fişier în serverul dumneavoastră, inserându-l în acelaşi catalog ca şi fişierul cititor.php:

function open_mailbox ($server, $identificator_utilizator, $parola)
{
echo “\n\n”;
echo ”<H4>Deschide conexiunea IMAP cu $server.</H4>”;
$identificator = imap_open($server . “INBOX”, $identificator_utilizator, $parola);
if ($identificator === false)
{
echo “Nu s-a putut deschide cutia postala IMAP INBOX.”;
print_error_stack();
die();
}
return $identificator;
}

function print_error_stack()
{
echo “\n\n”;
echo “<H4>Stiva de erori IMAP</H4>”;

226

$erori = imap_errors();
if $(erori)
{
foreach ($erori as $cheie=>$valoare)
{
echo “\n$cheie: $valoare”;
}
}
}

function list_messages($identificator)
{
echo „\n\n”;
echo „<H4>Antete de mesaje in cutia postala curenta</H4>”;
$antete = imap_headers($identificator);

if ($antete == false)
{
echo „\nNu a reusit sa afiseze mesajele.”;
print_error_stack();
}
else
{
foreach ($antete as $cheie=>$valoare)
{
echo „\n$valoare”;
}
}
}

function get_message_count($identificator)
{
return imap_num_msg($identificator);
}

function print_headers($identificator, $numar)
{
echo „\n\n”;
echo „<H4>Mesaj $n: Antete</H4>”;
$obiect_antet = imap_headerinfo($identificator, $numar);
$antete = get_object_vars($obiect_antet);
foreach ($antete as $proprietate=>$valoare)
{
if (!is_array($valoare))
{
echo „\n$proprietate: $valoare”;
}
else
{
foreach ($valoare as $sub_valoare)
{
echo „\n$proprietate: ”;
$sub_valori = get_object_vars($sub_valoare);
foreach ($sub_valoare as $articol=>$valoare_articol)
{
echo „\n $articol=>$valoare_articol”;
}

227

}
}
}
}

function print_body_by_num ($identificator, $numar)
{
$id = get_message_id($identificator, $numar);
print_body_id($identificator, $id);
}

function print_body_by_id ($identificator, $numar)
{
echo „\n\n”;
$numar = get_message_num ($identificator, $id);
$echo „<H4>Message ID $id(Number $numar) Body</H4>”;
$s = imap_body($identificator, $id, FT_UID);
echo „\n$s”;
}

function get_message_id ($identificator, $numar)
{
return imap_uid($identificator, numar)
}

function get_message_num ($identificator, $id)
{
return imap_msgno($identificator, $id)
}

function close_mailbox($identificator)
{
echo „\n\n”;
echo „<H4>Inchide conexiunea IMAP</H4>”;
$ok = imap_close($identificator);
if ($ok === false)
{
echo „\nNu a reusit sa inchida cutia postala.”;
print_error_stack();
}
}

3.Plasaţi următoarea pagină HTML într-un fişier numit cititor.html şi încărcaţi acest fişier în serverul dumneavoastră PHP, inserânddu-l în acelaşi catalog ca şi scriptul cititor.php şi cititor.inc:

<HTML>
<HEAD>
<TITLE>cititor.html</TITLE>
</HEAD>
<BODY>
<FORM METHOD =”POST” ACTION=”cititor.php”>

<H2>Formular de acces la cutia postala IMAP</H2>
Identificator de utilizator:
<BR>
<INPUT TYPE=”TEXT” NAME=”idutilizator” SIZE=”24”>

228

<BR>
Parola:
<BR>
<INPUT TYPE=”PASSWORD” NAME=”parola” SIZE=”24”>
<BR>
Server:
<BR>
<INPUT TYPE=”TEXT” NAME=”gazda” SIZE=”24” VLUE=”localhost”>
<BR><BR>
<INPUT TYPE=”SUBMIT” VALUE=”trimite”>

</FORM>
</BODY>
</HTML>

4. Alocaţi un timp studiului paginii HTML cititor.html. Observaţi că utilizatorului îi este permis să specifice informaţiile minime necesare pentru a obţine accesul la o cutie poştală IMAP: numele gazdei serverului IMAP, precum şi identificatorul de utilizator şi parola utilizatorului.
5. Alocaţi un timp studiului scriptului PHP cititor.php. Remarcaţi simplitatea scriptului. Acesta:
• Deschide o conexiune cu serverul IMAP
• Afişează mesajele din dosarul prestabilit
• Obţine numărul mesajelor din dosarul prestabilit
• Afişează antetul şi corpul fiecărui mesaj
• Închide conexiunea cu serverul IMAP
Observaţi că scriptul foloseşte o instrucţiune require pentru a încorpora conţinutul fişierului cititor.inc.
6. Alocaţi un timp studiului scriptului PHP cititor.inc. Observaţi că acest script este alcătuit numai dintr-o colecţie de funcţii definite de utilizator, prezentate anterior în cadrul capitolului de faţă. Nici una dintre funcţii nu a suferit modificări. Dacă ştiţi care este utilitatea funcţiilor respective, atunci acest script nu trebuie să vă preocupe prea mult; puteţi înţelege aplicaţia studiind scriptul cititor.php.
Ca ajutor pentru redactarea propriilor dumneavoastră scripturi de e-mail, situl Web aferent acestei cărţi include fişierul imap.inc, care conţine toate funcţiile definite de utilizator date în acest modul. Pur şi simplu inseraţi o copie a acestui fişier în catalogul dumneavoastră de scripturi, scrieţi o instrucţiune require prin care încorporaţi acest script în propriul dumneavoastră script, după care apelaţi funcţiile definite de utilizator pe care le defineşte scriptul.
7. Orientaţi un browser Web spre adresa URL a paginii Web cititor.html. Browserul va afişa un ecran similar cu ilustraţia alăturată:
<ecran>
IMAP Mailbox Access Form

<câmpuri>
UserID:mccartyb
Password:*********
Server: localhost
</câmpuri>
<buton>
Submit
</buton>
</ecran>

8. Introduceţi informaţiile adecvate pentru serverul dumneavoastră IMAP şi executaţi clic pe butonul „Trimite”. Scriptul trebuie să aibă acces la cutia dumneavoastră poştală IMAP şi trebuie să-i afişeze caracterele. Rezultatul trebuie să fie asemănător cu datele prezentate în ilustraţia următoare:

229

<ecran>
Opening IMAP connection to {localhost:143}.
Message Headers in INBOX
1) 14-Apr-2001 Bill McCatty test l (370 chars)
D 2) 15-Apr-2001 Bill McCarty test 16 (354 Chats)
D 3) 15-Apr-2001 Bill McCarty test 17 (354 chars)

Message : Headers

date: Sat, 14 Apr 2001 09:20:52 -0700
Date: Sat, 14 Apr 2001 09:20:52 -0700
subject: test l
Subject: test l
message_id: 200104141620.JAA20319@linux.dtc.apu.edu Această adresă de e-mail este protejată de spamboţi; aveţi nevoie de activarea JavaScript-ului pentru a o vizualiza
</ecran>

Manipularea dosarelor
Dincolo de accesul la dosare şi mesaje, puteţi manipula dosare prin utilizarea bibliotecii IMAP. In această secţiune veţi afla cum trebuie să procedaţi.
Afişarea dosarelor existente
Iată o funcţie definită de utilizator care afişează dosarele IMAP disponibile:

function list_folders* ($identificator, $server, $prefix)
{
echo „\n\n”;
echo „<H4>Lista dosarelor</H4>”;
echo „\nserver=$server, prefix=$prefix”;
$dosare = imap_listmailbox($identificator, $server, $prefix, „*”);

if ($dosare == false)
{
echo „\nFunctia imap_listmailbox() a esuat.”
}
else
{
foreach ($dosare as $cheie=>$valoare)
{
echo „\n$cheie=>$valoare”;
}
}
}

Puteţi apela această funcţie folosind argumente asemănătoare cu următorul:

list_folders($identificator, „{localhost/imap:143}”, „~/mail/”)

<notă>
*În traducere afişează dosarele — N.T. </notă>

230

Argumentul $identificator este, desigur, valoarea returnată de funcţia care a deschis conexiunea IMAP. Aşa cum s-a explicat anterior în acest modul, valoarea argumentului $prefix trebuie să se conformeze politicii de denumire a dosarelor stabilite de administratorul IMAP.

Crearea unui dosar
Iată cum se poate crea un nou dosar IMAP:

function create_folder*($identificator, $server, $prefix, $dosar);
{
$dosar = $server . $prefix . „INBOX.” . $dosar;
echo „\n\n”;
echo „<H4>Creeaza dosarul $dosar</H4>”;
$ok = imap_createmailbox($identificator, $dosar);
if ($ok === false)
{
echo „\nNu s-a putut crea dosarul.”;
print_error_stack();
}
}

Cel de-al patrulea argument al acestei funcţii specifică numele dosarului care va fi creat.
<Sugestie>
Numele unui dosar IMAP trebuie să conţină numai litere, cifre şi caractere de subliniere. Dacă doriţi să creaţi un sub-dosar, puteţi proceda astfel incluzând un punct în numele dosarului. Punctul se comportă ca separator de cale, analog caracterului slash folosit în căile din cadrul sistemului de fişiere. </Sugestie>

Modificarea numelui unui dosar
Iată o funcţie definită de utilizator care modifică numele unui dosar:

function rename_folder**($identificator, $server, $prefix, $dosar_vechi, $dosar_nou);
{
$dosar_vechi = $server . $prefix . „INBOX.” . $dosar_vechi;
$dosar_nou = $server . $prefix . „INBOX.” . $dosar_nou;
echo „\n\n”;
echo „<H4>Modifica numele $dosar_vechi in $dosar_nou</H4>”;
$ok = imap_renamemailbox($identificator, $dosar_vechi, $dosar_nou);
if ($ok === false)
{
echo „\nNu a reusit sa modifice numele dosarului.”;
print_error_stack();
}
}

<notă>
*În traducere creează dosarul- N.T.
**În traducere modifică numele dosarului — N.T. </notă>

231

Aşa cum s-a explicat anterior, poate fi necesară ajustarea modului de construire a numelui dosarului din numele gazdei serverului şi din prefixul cutiei poştale.

Ştergerea unui dosar
Iată o funcţie care şterge un dosar IMAP:

function delete_folder*($identificator, $server, $prefix, $dosar);
{
$dosar = $server . $prefix . „INBOX.” . $dosar;
echo „\n\n”;
echo „<H4>Sterge dosarul $dosar</H4>”;
$ok = imap_deletemailbox($identificator, $dosar);
if ($ok === false)
{
echo „\nNu s-a putut sterge dosarul.”;
print_error_stack();
}
}

<Atenţie>
Spre deosebire de mesajele IMAP, care rămân în cutia poştală până când le ştergeţi, un dosar IMAP şters este eliminat imediat şi în mod irevocabil. Fiţi atent atunci când scrieţi programe care şterg dosare sau atunci când folosiţi scripturi care conţin asemenea programe. </Atenţie>

Copierea mesajelor într-un dosar
IMAP poate copia un mesaj din dosarul curent într-un alt dosar. Iată o funcţie definită de utilizator care execută această operaţie, daca se cunoaşte numărul mesa¬jului IMAP şi dosarul destinaţie:

function copy_message**($identificator, $prefix, $numar, $dosar);
{
$dosar = $prefix . „INBOX.” . $dosar;
echo „\n\n”;
echo „<H4>Copiaza mesajul $numar in dosarul $dosar</H4>”;
$nr_mesaje = „” . $numar;
$ok = imap_mail_copy($identificator, $nr_mesaje, $dosar);
if ($ok === false)
{
echo „\nNu a fost copiat mesajul in dosarul specificat.”;
print_error_stack();
}
}

Remarcaţi că această funcţie nu preia un argument care specifică numele gazdei serverului. Deoarece serverele IMAP nu cooperează la copierea unui mesaj de la un

<notă>
*În traducere şterge dosarul- N.T.
** În traducere copiată mesajul— N.T. </notă>

232

server la altul, nu este necesar – sau posibil – să se specifice numele gazdei serve¬rului la copierea mesajelor IMAP.

Mutarea mesajelor într-un dosar
Iată o funcţie definită de utilizator care mută un mesaj IMAP din dosarul curent într-un alt dosar, fiind date numărul IMAP al mesajului şi dosarul destinaţie:

function move_message* ($identificator, $prefix, $numar, $dosar);
{
$dosar = $prefix . „INBOX.” . $dosar;
echo „\n\n”;
echo „<H4>Muta mesajul $numar in dosarul $dosar</H4>”;
$nr_mesaj = „” . $numar;
if ($ok === false)
{
echo „\nMesajul nu a fost mutat in dosarul specificat.”;
print_error_stack();
}
}

Mesajele originale sunt doar marcate în vederea ştergerii şi rămân în cutia poştală până la eliminarea efectivă.

<Sfatul specialistului>
Întrebare: Acest modul a explicat modul de utilizare a nume¬roase funcţii IMAP, dar există şi alte funcţii IMAP care mi-ar putea fi de folos?
Răspuns: Biblioteca IMAP furnizează multe alte funcţii în afara celor descrise în acest modul. De exemplu, funcţiile imap_search() şi imap_scanmailbox() vă permit să căutaţi mesaje care satisfac criterii specificate. De exemplu, puteţi căuta mesaje al căror corp conţine anumite texte. De asemenea, funcţiile IMAP folosite în acest modul furnizează frecvent opţiuni şi caracteristici care nu au fost explicate în totalitate. Pentru mai multe informaţii privind biblioteca IMAP PHP, consultaţi manualul PHP pe suport electronic, la adresa www.php.net.
</Sfatul specialistului>

<Test de evaluare>
1. Care este protocolul folosit pentru expedierea mesajelor prin Internet?
2. In ce mod contribuie funcţiile definite de utilizator la simplificarea activităţii de programare?
3. Folosind funcţia definită de utilizator adecvată descrisă în acest modul, scrieţi o instrucţiune care copiază mesajul IMAP cu numărul 101 din dosarul curent

<notă>
*În traducere mută mesajul- N.T. </notă>

233

în dosarul „test”. Se presupune că variabila $mb conţine identificatorul asociat cu o conexiune IMAP deschisă, precum şi că variabila $pfx conţine prefixul cutiei poştale IMAP.
4. Folosind funcţia definită de utilizator adecvată descrisă în acest modul, scrieţi o instrucţiune care modifică numele dosarului „test1” în „test2”. Se presu¬pune că variabila $mb conţine identificatorul asociat cu o conexiune IMAP deschisă, că variabila $server conţine şirul server IMAP (care include paran¬tezele acolade, numele gazdei serverului, protocolul şi numărul portului), că variabila $pfx conţine prefixul cutiei poştale IMAP, precum şi că variabilele $vechi, respectiv $nou conţin numele dosarului.
5. Folosind funcţia definită de utilizator adecvată descrisă în acest modul, scrieţi o instrucţiune care afişează antetele asociate mesajului IMAP al cărui număr este dat de valoarea variabilei $n. Se va presupune că variabila $nb conţine identificatorul asociat cu o conexiune IMAP deschisă. </Test de evaluare>

Eticheta:

Comentariile sunt inchise

Ne pare rau, dar nu poti lasa un comentariu pentru acest post.

Resurse web design