A PHP programozási nyelv

PHP E-mail támogatás

Bevezetés

A PHP programozási nyelv lehetőséget kínál saját e-mail kliens írására és használatára.
Ha levelet akar küldeni, a PHP mail()-függvényei kínálják a legjobb megoldást.
Ha a bejövő levelek vannak a középpontban, a PHP LDAP-támogatása jelenti a legjobb választást.
A PHP levelezés támogatja a mail()-függvényeket, illetve a IMAP-függvényeket. Van egy ezmlm_hash()-függvény is az EZMLM levelezőlista-kezelő felhasználói számára.

Levélfej részek

Sokféle fejrész van használatban, ezek közül némelyek minden levélben kötelezőek, a többi pedig opcionális. A MIME-fejrészek csak akkor szükségesek, ha a levél csatolt állomány(ok)at tartalmaz.

Minimális fejrészek

Íme egy példa a leveleknél és híreknél minimálisan szükséges fejrészekre. A To (Címzett) fejrész a megfelelő postaládába irányítja a levelet. A From (Feladó) fejrész segítségével a le­vél fogadója válaszolni tud rá. A Date (Dátum) fejrész segítségével megtudhatja, melyik levél mikor érkezett, a Subject (Tárgy) fejrész pedig jelzi, hogy miről szól a levél. A To, From és Subject a minimálisan szükséges azonosítók az olyan függvényekben, mint a mailQ, a levelezőrendszer pedig beszúrja a dátumot:

Subject: PHP Sydney meeting
Date: Sun, 01 Jul 2001 19:51:48 D1000 From: address@the_mail_server.com.au To: peter@a_web_site_somewhere.com

További fejrészek

Itt található a többi fejrész, amelyeket használhat a kísérletezések során. Elérhetőségük és értelmezésük a levelező klienstől és a szerver szoftverétől függ. Vannak szoftverek, amelyek megkülönböztetik a kis- és nagybetűket, így a fejrészeket pontosan úgy gépelheti be, ahogy itt látja:

MIMÉ

A MIMÉ a Multipurpose Internet Mail Extensions (Többcélú internet levelezési kiterjesz­tések) egy csoportja, amely kiterjeszti a levél eredeti RFC 822-es definícióját. Valójában az RFC 822 nem sokkal csinál többet annál, mint elmondja, hogyan irányítson egy sztringet az Interneten. A MIME-kiterjesztések adják meg a különböző karakterkészletek és fájlmellék­letek használatának szabályait és irányelveit.
A MIME-fejrészeket a csatolt állományokhoz és a speciális karakterkészletekhez kell hasz­nálni. A MIME-fejrészeket a következő részben találhatja.

MIME-Version

A MIME-Version akkor szükséges, ha a levélben bármi MIME-kódolásban van, és ekkor a MIMÉ verziószámát mutatja meg. Az aktuális és egyetlen verzió az 1.0, ahogy azt a következő fejrész mutatja:
MIME-Version: 1.0
Tehet megjegyzést a MIME-Version fejrészbe, de a fogadó szoftver figyelmen kívül fogja hagyni:
MIME-Version:    1.0    (Produced   by   my   PHP   script)

Content-Type

A Content-Type alapértelmezésben a text/plain; charset = "us-ascii", de sok más értékre is beállítható, például text/html; charset=iso-8859-l-re, ha HTML is van a levelében. A következő kódpélda egy olyan e-mailből való, amely tartalmaz néhány különleges karak­tert, például ®-t. Vannak Content-Type-fejrészek, amelyekben idézőjelek között van a charset-hez rendelt érték, vannak, amelyekben nem. Vegye észre, hogy ez a fejrész pontosvesszőt (;) használ az értékek elválasztására, míg némely más fejrészek a vesszőt használják:

Content-Type:   text/plain;   charset="iso-8859-1"
Ha a levél csatolt állományokat tartalmaz, a Content-Type-fejrész úgy néz ki, mint a következő fejrész (minden egy sorban). A boundary-érték egyfajta pszeudo-véletlen sztring, amely az egyes csatolt állományok elejét és végét jelzi:

Content-Type: múltipart/mixed;
boundary = "-------------------- 53B319 8E1AEEC7 DDA5 89 60 06"
Minden egyes csatolt állomány az állományra specifikus fejrészek halmazát tartalmazza. A következő három fejrész egy programot tartalmazó csatolt állomány előtt volt. Észrevehető, hogy a csatolt állomány kódolása base64-es:
Content-Type: application/octet-stream; name="test.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.exe"

Content-Transfer-Encoding

A Content-Transfer-Encoding a legtöbb olyan levélben megtalálható, amely tartalmazza a Content-Type-fejrészt. Olyan opciói vannak, mint a 7bit, 8bit, base64, quoted-printable és binary, és egyedi kódolási típusokat is engedélyez. Az alapértelmezett a 7bit, így a szo­kásos 7bit ASCII e-mailekből ez a fejrész általában kimarad, de minden más esetben hasz­nálni kell.

Content-ID

A Content-ID-t már a Web előtt létrehozták. Segítségével ahelyett, hogy csatolná az állo­mányokat, csak hivatkozni kell rájuk. A fogadó kiválaszthatja a számára szükséges állo­mányokat anélkül, hogy az összest meg kellene kapnia. Jó néhány megvalósítása van az öt­letnek, amelyeket a weblapokon fájlokra mutató linkek modern módszere idejétmúlttá tett.

Content-Description

Szeretne levélben megjegyzést fűzni a csatolt állományokhoz? A legtöbb ember egyszerűen ír egy bekezdést az állományról. A Content-Description segítségével formáli­san adhat megjegyzést az állományhoz, hasonlóan a HTML képtag-ek alt szövegéhez. A következő példa egy olyan megjegyzést mutat, amelyet akkor írna, ha ön lenne a Happy Virus szerzője:
Content-Description:   The   attachment   is   not   a   virus.   Ha!   Ha!   Ha!

Content-Disposition

A Content-Disposition egy kísérleti fejrész, mely azt mondja meg a levél olvasójának, hogy egy csatolt állományt belsőleg (a levélablakban) kell-e megtekinteni vagy sem, ahogy a következő példa is mutatja. Ha egy üzenet néhány képet és egy programot tartalmaz, a szerző valószínűleg azt akarja, hogy az olvasó a képeket belsőleg nézze meg, de a progra­mot természetesen ne. A levelező programjában kellene, hogy legyen olyan beállítás, hogy a Content-Disposition-t felülírhassa, így a levél szövegén kívül semmi mást ne lásson, és csak utána dönthessen arról, hogy mi mást akar megnézni. Ennek az olyan állománytípusoknál van nagy jelentősége, amelyek vírusokat, illetve olyan weboldalakra mutató linkeket továb­bíthatnak, amely oldalakon zavaró hirdetések tucatjait találja:
Content-Disposition:    inline

Működési üzemmódok

Az elektronikus leveleket legalább háromféle módon érheti el. Az aktuális üzemmód se­gíthet a PHP alapú levelezés legjobb megközelítésének kiválasztásában.

Offline

Offline módban a levelező kliense vagy levelező felhasználói ügynöke (mail user agent MUA) leszedi egy levelező szerverről az új leveleket és a munkaállomásán tárolja azokat. A leveleket a  munkaállomásán böngészheti, ott válaszol vagy ír új leveleket, majd a levelező szerverre küldheti őket, hogy az Internetre kerüljenek.
Az offline levélgyűjtés alapértelmezett protokollja a POP3, mert a POP3 mindent megcsi­nál, amire offline módban szüksége van, és semmi feleslegeset nem tesz. Az SMTP-t levél­küldésre használják, és jól passzol a POP3-hoz. A POP3 és az SMTP egy alternatívája az IMAP, de az IMAP a szükségesnél többet is elvégez, többletráfordításokat és telepítési problémákat okoz, és csak néhány e-mail kliens támogatja. A legtöbb Internet-szolgáltató a POP3/SMTP-kombinációt használja az IMAP helyett.
Ha a PHP használatával akarja a saját levelező kliensét megírni, telepítse a munkaállomá­sán az Apache-ot, a PHP-t és a MySQL-t, és a PHP-t használja az e-mailek munkaállo­másról való visszakeresésére, megjelenítésére és elküldésére. A PHP csatlakozó függvényei használhatók az e-mailek POP3-on keresztüli visszakeresésére, az IMAP-függvények az IMAP-on keresztül visszakeresik és elküldik az e-maileket, a levelező függvények pedig az SMTP-n keresztül küldik el őket.
Az offline mód valódi hátránya akkor derül ki, amikor távol van a gépétől, és igazán fon­tos információra, például egy hotel nevére van szüksége, amely a gépén figyel egy e-mailben. Ha gépe történetesen egy notebook, akkor ott lehet vele a levél, illetve ott lehet egy tolvajnál, aki ellopja egy reptéri poggyászkocsiról az ön bőröndjét.
Egyszer egyik barátom este érkezett egy nagy ázsiai városba, és kénytelen volt szembesülni azzal, hogy a csomagjai máshova érkeztek meg. Az összes kontakt telefonszám a csomag­ban volt, a biztonsági másolat pedig egy iroda fiókjában lapult egy floppyn, történetesen nem Ázsiában. Az irodai dolgozók pedig otthon legmélyebb álmukat aludták. Ha szeren­cséje van és olyan cégnél dolgozik, amelyik mindig a Hiltonba foglal szobát, akkor függetle­nül attól, hogy melyik városban vagy, egyszerű a megoldás. Fog egy taxit, mivel minden taxisofőr tudja, hol a Hilton. A barátom ott állt a repülőtéren, és nagyon szeretett volna ilyen cégnél dolgozni.

Online

Amikor a levelezést online éri el, ugyanúgy böngészi a leveleit, mint a webszerver bármelyik más fájlját. A levelek a szerveren maradnak. A kliens csupán egy böngésző, amely a világ bármely munkaállomásán lehet - még a San Francisco-i Quetzal Internet Café egy kísértetiesen zöld iMac-jén is. A kisméretű iMac-billentyűzet lelassíthatja a gépelést, de nem akadályozza meg, hogy elérje a három menüvel és hat mozival odébb levő szervert.
A POP3 és az SMTP nem működnek online hozzáférés esetén. A szerver és a munkaállo­mása közötti protokoll a HTTP és az IMAP kombinációja. Figyelje meg hogyan hasz­nálhatja ezeket.
Ha csak tisztán IMAP-ot akar a gépéről a levelező szerverre, telepítsen egy az IMAP-nek megfelelő kliensalkalmazást a gépére, vagy telepítse az Apache-ot és a PHP-t, és engedje, hogy a PHP az IMAP-pal kommunikáljon a levelező szerverrel. A Windows-felhasználók az Apache helyett használhatnak Personal Web Services-t (PWS), de a PWS-ből működő al­kalmazásokat varázsolni pont olyan nehéz, mint az Apache/PHP kombinációjának telepíté­se. A PHP-szkriptek IMAP-függvényeket használnak a megfelelő szerverekkel folytatott IMAP-kommunikációhoz.
Ha nem akarja a PHP-t a gépére telepíteni (ami nagyjából olyan, mint amikor egy színész visszautasítja az Oscar-díjat), beállíthatja a webszerverre, hogy levelező kliensként működjön és az oldalakat bármilyen böngészőből bárhonnan böngészheti. A levelek a szerveren maradnak, a webszerver végzi a levelező szerverrel az IMAP-kommunikációt, a böngésző pedig a webszerverrel folytatott  HTTP-kommunikációt.

Kapcsolat nélkül

A kapcsolat nélküli mód a notebookokhoz és betárcsázáshoz való. A notebook levelező kli­ense tárcsázza az Internet-szolgáltatót, csatlakozik a levelező szerverhez, begyűjti a leveleket, és bontja a vonalat. Az eredeti levelek a levelező' szerveren maradnak, a notebookon levő má­solatokkal dolgozhat, és olyan gyakran tárcsázik be, hogy szinkronban tartsa a kliensét a szer­verrel. A kimenő levelek várnak a csatlakozásra. A levelek törlése addig nem változtatja meg a szerveren levő leveleket, amíg nem csatlakozik. Ha ellopják a notebookját, vesz egy újat, betárcsáz és az új notebook a még a szerveren levő összes levél által életre kel.
A kapcsolat nélküli módot nem igazán tudja egy Internet-caféban használni, mert ott álta­lában nem engedik meg, hogy megváltoztassa a szoftver-konfigurációkat. Nincs sok értelme PHP-val levelező klienst írni a kapcsolat nélküli módhoz, mert a kliensnek ismernie kell a tárcsázással kapcsolatos sajátosságokat betárcsázást fogadó szerverrel. Ennyi erővel tárcsáz­hat manuálisan is, és indítsa a PHP-t hagyományos levelező kliensként.

Átmeneti

Ha notebookja van és különleges biztonságra van szüksége, beállíthatja a levelező kli­enst úgy, hogy a leveleket ne a notebookon tárolja. A levelek akkor töltődnek le, amikor be­kapcsolja a notebookot, és törlődnek, amikor bezárja a levelező klienst. Ha a notebooko-ját akkor lopják el, amikor ki van kapcsolva, a tolvaj üres bejövő postaládát talál, és semmit nem fog megtudni a Bahamákon levő titkos bankszámlákról.
Az átmeneti mód PHP-beli megfelelője a levelező szkript szerveren való elhelyezése, ami­kor a notebookot pusztán böngészőként használja. Csak arról győződjön meg, hogy a böngésző üríti a cache-t, amikor egy böngészősession-t bezár.

Mail() függvény

Ahhoz, hogy a Mail függvényeket használhassa, a PHP-nek fordítási időben el kell tudja érni a rendszer sendmail file-ját. Ha más levelezőprogramot használ, mint például qmail vagy postfix, a megfelelő sendmail csomagolókat kell használnia, amelyeket a programmal együtt kap. A PHP a sendmail-t a PATH-ban keresi, majd a következőkben: /usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib. Erősen ajánlott, hogy a sendmail elérhető legyen a PATH-ból. A felhasználó, aki a PHP-t fordította, kell rendelkezzen joggal a sendmail elérésére.
A témába vágó konfigurációs direktívák rövid leírása

  1. SMTP string :Csak Windows alatt használt: Annak az SMTP szervernek a DNS neve vagy IP címe, amit a PHP Windows alatt mail küldésre használ a mail() függvény meghívása esetén.
  2. smtp_port int : Csak Windows alatt használt: Az SMTP beállításban szereplő szerver portja, amelyre csatlakozhat mail() függvénnyel való e-mail küldés esetén; alapértelmezett értéke 25. A PHP 4.3.0. óta használható
  3. sendmail_from string : Megadja, hogy milyen "From:" email címet használjon a PHP mail küldésekor Windows alatt.
  4. sendmail_path string : Megadja, hogy hol található a sendmail program. Ez általában /usr/sbin/sendmail vagy /usr/lib/sendmail. A configure megpróbálja megtalálni, és beállítani, de ha ez nem sikerül, itt ön is beállíthatja.

Azokon a rendszereken, ahol nem a sendmail használatos, ez a beállítás a sendmail wrapper/helyettesítő beállítására szolgál, ha van ilyen. Például a » Qmail használók általában a /var/qmail/bin/sendmail beállítást használják.
A qmail-inject nem igényel semmilyen beállítást a levél helyes továbbításához.

Ez a direktíva is Windows alatt is működik. Ha be van állítva, az smtp, smtp_port és a sendmail_from figyelmen kívül lesznek hagyva és a megadott parancs hajtódik végre.

IMAP

A PHP IMAP-függvényei kezelik az IMAP-protokollt, továbbá a POP3-t, az SMTP-t, az NNTP-t és a hely postaláda elérését. Sok levelezőszerver elérésére az IMAP a szabványos protokoll, de sokkal több, mint elég, ha csak egy levelet akar küldeni.
A PHP-ban a mailQ és az ezmlm_hash() be van építve. Az IMAP-függvényeket telepíteni kell. Lehet, hogy a php.ini SMTP-beállítását is konfigurálnia kell.

Postaládafüggvények

A postaládafüggvények a postaládájához való hozzáférést kezelik. A későbbi levelezési függvények kezelik az egyes levelekhez való hozzáférést. Először postaládát kell választa­nia, és csak utána levelet. A hírszervereken a hírcsoportok a postaládák megfelelői:
-           imap_open() - A postaláda nevét, egy felhasználói nevet, egy jelszót és opcionális jelzőket fogad el. Egy erőforrás-azonosítót ad vissza az IMAP-szerveren levő postalá­dához való csatlakozáshoz vagy egy POP3-csatlakozáshoz, vagy egy NNTP-szerverhez. A postaláda neve tartalmazza a szerver nevét, egy opcionális portnevet és egy postaláda nevet. A felhasználó alapértelmezett postaládája az INBOX, így a helyi szerveren levő postaláda a {localhost}INBOX. Ha szükség van a port számára, akkor ugyanez a {localhost:143} INBOX lenne. A POP3-hoz a
{localhost:110/POP3} INBOX-szal fér hozzá. A jelzők csak olvasási hozzáférést engednek, illetve névtelen hozzáférést a hírekhez (NNTP), és egy opciót arra vonat­kozóan, hogy a kapcsolatot postaláda megnyitása nélkül hozza létre.

(www.faqs.org/rfcs/rfc2060.html) a 6.4.4 fejezetben vannak felsorolva, és többek kö­zött olyan egyszavas kulcsszavakat tartalmaznak, mint az ANSWERED, amellyel az olyan üzeneteket kapja meg, amire válaszoltak, vagy olyan sztring párokat, mint a CC "john", amely az olyan üzeneteket adja vissza, amelyeket a john sztringet tartal­mazó címekre küldtek másolatként.

Levelezési függvények

A levelezési függvények magukat az egyedi leveleket vagy hírcsoport postát olvassák, és fel­tételezik, hogy korábban kiválasztotta a szervert és a postaládát vagy a hírcsoportot:

Kiemelő függvények

Az IMAP-kiemelés eszköz a sok postaláda közül néhánynak a hangsúlyozására. Tegyük fel, hogy a munkahelyén postaládák százaihoz van hozzáférése, amelyekben a különböző termékek iránt érdeklődő ügyfelek levelei vannak, és valahol a sok között lapulnak a privát postaládái. Egyszerűen kiemelheti a saját postaládáját: amikor a magánleveleit aka­rhatja, a hagyományos függvényeket helyettesítheti a kiemelő függvényekkel:

Sztring konvertáló függvények

Ezek a függvények a sztringeket különböző megjelenítésekre kódolják, amilyen pél­dául az UTF, és párosító kikódoló függvényeket tartalmaznak.
Az UTF UCS transzformációs formátumokat jelent. Az UCS az Unicode 16 bites karak­terkészletet jelenti, amellyel a világ összes írott nyelve megjeleníthető, még az olyan, pikto­gramokat használó ideografikus nyelvek is, mint a mandarin-kínai, a koreai és a japán.

Az imap_8bit() sztringet fogad el, és idézőjeles nyomtatható sztringként formázva adja vissza, amely a levélbe az RFC 2045-nek megfelelően beilleszthető. A hosszabb sztringek a 76. karakternél vannak becsomagolva, így ezt a függvényt csak olyan sztringekre használja, amelyek a levél törzsébe kerülnek.

Az imap_qprint() az imap_8bit() fordítottját csinálja, az idézőjeles nyomtatható sztringet normál sztringre konvertálja vissza.

A quoted_printable_decode() az imap_qprint() egy alternatívája. Ugyanazt a konverziót kell elvégeznie, de úgy tűnik, van néhány különbség. A quoted_printable_decode() nem igényli az IMAP-kiterjesztést, így akkor lehet hasznos, amikor egy külső program által gyűjtött leveleket olvas.

Az imap_utf7_encode() egy sztringet fogad el, és a módosított UTF-7-nek megfelelően
kódolt sztringet ad vissza, ahogy az RFC 2060-ban le van írva (www.faqs.org/rfcs/rfc2060.html). (Az -imap_utf7_decode() a kódolt sztringet az eredeti sztringre kódolja ki.) A kódolást az olyan nemzetközi karaktereket tartalmazó postaláda­nevekhez használják, amelyeknek a karakterei kívül esnek a szabványos nyomtatható ka­rakterkészleten.

Az imap_utf7_decode() egy sztringet fogad el, és az RFC 2060 szerint kikódolt sztringet adja vissza. (Az imap_utf7_encode() végzi a kódolást.)
- imap_utf8()
Az imap_utf8()-sztringet fogad el, és az UTF8-ra kódolva adja azt vissza (RFC 2044).

Az imap_base64() a base64_decode()-függvénynek az IMAP-függvény megfelelője, amely egy kódolt sztringet fogad el, és a kikódolt sztringet adja vissza.

Az imap_binary() a base64_encode()-függvény IMAP-függvény megfelelője, amely egy sztringet fogad el, és a base64-szabványra kódolt sztringet ad vissza.
Egyéb függvények
IMAP-függvényről lesz szó, így a hibakezelő­ függvényekről, a tesztelésre használt függvényekről, illetve a korábban leírt függvényeknél manuálisabb megközelítéssel dolgozó függvényekről lesz szó.

Az imap_alerts() az IMAP-szerver hibaüzeneteit tartalmazó tömböt ad vissza. A szerver hibaüzeneteinek listája meg van tisztítva, így minden üzenetet csak egyszer kap.

Az egyes levélen levő jelzők azt mutatják meg, hogy a levelet még nem olvasták, piszkozat vagy ki van törölve. Az imap_clearflag_full()- és az imap_setflag_fuli()-függvények beál­lítják és törlik a jelzőket. Általában a törlési jelzőt az imap_delete()-tel állítják be, és az olvasatlan jelző is törlődik, amikor törli a levelet, így erre a két függvényre nem igazán van szükség.

Olvassa el az imap_alerts()-t, mert a figyelmeztetések olyan helyzeteket jelezhetnek előre, amelyek hibához vezethetnek. Az imap_errors() egy tömböt ad vissza, amely a korábbi hi­baüzeneteket tartalmazza, és törli a szerver hibalistáját, így minden hibaüzenetet csak egy­szer kap meg. Amikor új IMAP-kódot tesztel, ellenőrizze a figyelmeztetéseket és a hi­bákat minden IMAP-függvény után, míg meg nem győződik arról, hogy minden működik.

Az imap_last_error() az utolsó hibaüzenetet adja vissza, és nem változtatja meg az IMAP-szerver hibalistáját (vagyis azt, amit az imap_errors() ad vissza). Ez a függvény csak egy hibaüzenetet ad vissza, így lehet, hogy egy fontos nyomot hagyhat figyelmen kívül, ha az utolsó hibát valójában egy azt megelőző hiba okozta. Ha az imap_last error()-t használja, alkalmanként használja az imap_errors()-t is, hogy ellenőrizhesd és törölhesd az összes hibát.

Az imap_fetchheader() az imap_header() egyszerűsített változata, amely egy csatlakozási azonosítót, egy üzenetszámot és néhány jelzőt fogad el. Egy nyers fejrész sztringet ad vissza, amely az RFC 2822-höz (www.faqs.org/rfcs/rfc2822.html) alkalmazkodik. Öntől függ, hogy kikódolja-e a fejrészeket. Használja az imap_header()-t, ha pedig elakad a furcsa eredményekkel, próbálja ki az imap_fetchheader()-t annak megállapítására, hogy a problémát új, szokatlan vagy hibás fejrész okozta.

Az imap_mime_header_decode() a MIME-fejrészsztringeket egy tömbbe kódolja ki, ahol minden elemnek két értéke van, a charset és a text. Ha a szöveg az alapértelmezett us_ascii karakterkészletben van, akkor a charset a default-ot tartalmazza.

Az imap_uid() csatlakozási azonosítót és üzenetszámot fogad el, és az üzenet UID-jét ad­ja vissza. Az imap_msgno() az UID-ból adja vissza az üzenetszámot. Az UID egy 32 bites üzenetazonosító, amely egyedi a postaládán belül, és a törlések és egyéb postaládán belüli műveletek után is az marad. Az UID-t használhatja arra, hogy egy offline session után összehasonlítsa a leveleket a szerveren levőkkel.

Az imap_msgno() csatlakozási azonosítót és UID-t fogad el, és az UID-nek megfelelő üzenet számát adja vissza. Az imap_uid() az üzenetszámból adja vissza az UID-t.
imap_ping()
Ha azt gyanítja, hogy egy LDAP-szerver offline-ra dobta, vagy emlékeztetni akarja a szervert, hogy ön is itt vagy, használja az imap_ping()-et. Az imap_ping()-nek csak a csat­lakozási azonosítóra van szüksége, és a függvény igazat ad vissza, ha a kapcsolat még él.

Az imap_rfc822_parse_adrlist() egy címsztringet és egy alapértelmezett host-nevet fogad el. Egy tömböt ad vissza, amelyben az egyes címekhez négy értéket tartalmazó objektumok  vannak. A négy érték: mailbox, hőst, personal (a személy neve) és adl (at domain list; va­gyis címek a @petermoulding.com formátumban).

Az imap_rfc822_parse_headers() az imap_header() egyszerűsített változata, amely egy fejrészeket tartalmazó sztringet és az alapértelmezett host-nevet fogadja el, és a fejrész ér­tékeit tartalmazó objektumot ad vissza.

Az imap_rfc822_write_address() a postaláda nevét, a host nevét és egy személy nevét fo­gadja el. Egy e-mail címet ad vissza, az RFC 2822-re formázva.

PHPMailer

A PHPMailer egy ingyenesen letölthető library a PHP nyelvhez, amely egyszerű utasításokon keresztül megvalósítja a fentiekben felsorolt funkciókat. Eléréséhez include-olás, majd példányosítás szükséges.

Weboldal: http://phpmailer.worxware.com

A különböző beállításokat a PHPMailer objektum paramétereinek megadásával lehet elérni. A leggyakrabban használtak:


Lényegében ezekkel tudjuk a levelező szerver elérhetőségeit megadni.

A leggyakoribb példa a PHPMailer használatára, amikor a Google Gmail smtp szerverét állítják be vele, hogy a PHP kód azon keresztül küldje ki a leveleket.
Ez egy kényelmes megoldás, mert nincs szükség SMTP szerver konfigurálására, ugyanakkor csak viszonylag kis számú levél esetén célszerű ezt használni, mivel a Gmail csak napi 99 kimenő levelet enged 24 órán belül.
A további limitációkról bővebb információ a Google support oldalán érhető el: https://support.google.com/a/answer/166852

A következő példakód mutatja a szükséges beállítások, ha mégis a Gmail SMTP szerverét szeretnénk használni.

require_once('class.phpmailer.php'); //PHPMailer betöltése
$mail = new PHPMailer(); //Objektum példányosítása
$mail->IsSMTP(); //SMTP szerver használat bekapcsolása
$mail->SMTPAuth = true; //Authentikáció bekapcsolása
$mail->SMTPSecure = 'ssl'; //SSL használata, ez feltételnül szükséges a Gmailhez
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; //vagy 587
$mail->IsHTML(true); //amennyiben HTML levelet szeretnénk küldeni
$mail->Username = "email@gmail.com";
$mail->Password = "password";
$mail->SetFrom("example@gmail.com");
$mail->Subject = "Test"; //tárgy
$mail->Body = "hello"; //a levél tözse, amennyiben az IsHTML-t bekapcsoltuk, akkor ide rendes HTML formázott üzenet is mehet
$mail->AddAddress("email@gmail.com"); //címzett megadása

if(!$mail->Send()){ //levél elküldésének megkísérlése
echo "Mailer Error: " . $mail->ErrorInfo; //Sikertelen küldés esetén hiba okának kiírása
}else{
echo "Message has been sent"; //Sikeres küldés
}

A SetFrom() esetén fontos megemlíteni, hogy amennyiben olyan címet állítunk be, ahol nem egyezik a domainhez tartozó IP cím a mi szerverünk címével, ahonnan a levelet küldjük, akkor a Gmail a SPAM mappába fogja dobni az üzentet a címzettnél, ha Gmail-es címre küldjük.
Azaz, ha mi a proba.hu domainről küldök és a SetFrom()-ban egy @teszt.hu címet adunk meg, akkor jó eséllyel a címzett a levelet csak a SPAM mappában fogja megtalálni.