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.
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.
Í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 levé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
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:
A MIMÉ a Multipurpose Internet Mail Extensions (Többcélú internet levelezési kiterjeszté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ékletek használatának szabályait és irányelveit.
A MIME-fejrészeket a csatolt állományokhoz és a speciális karakterkészletekhez kell használni. A MIME-fejrészeket a következő részben találhatja.
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)
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 karaktert, 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"
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 szokásos 7bit ASCII e-mailekből ez a fejrész általában kimarad, de minden más esetben használni kell.
A Content-ID-t már a Web előtt létrehozták. Segítségével ahelyett, hogy csatolná az állományokat, csak hivatkozni kell rájuk. A fogadó kiválaszthatja a számára szükséges állományokat anélkül, hogy az összest meg kellene kapnia. Jó néhány megvalósítása van az ötletnek, amelyeket a weblapokon fájlokra mutató linkek modern módszere idejétmúlttá tett.
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álisan 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!
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 programot 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ábbíthatnak, amely oldalakon zavaró hirdetések tucatjait találja:
Content-Disposition: inline
Az elektronikus leveleket legalább háromféle módon érheti el. Az aktuális üzemmód segíthet a PHP alapú levelezés legjobb megközelítésének kiválasztásában.
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 megcsinál, amire offline módban szüksége van, és semmi feleslegeset nem tesz. Az SMTP-t levélkü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állomá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 fontos 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 csomagban 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 szerencséje van és olyan cégnél dolgozik, amelyik mindig a Hiltonba foglal szobát, akkor függetlenü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.
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állomása közötti protokoll a HTTP és az IMAP kombinációja. Figyelje meg hogyan haszná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ő alkalmazá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.
A kapcsolat nélküli mód a notebookokhoz és betárcsázáshoz való. A notebook levelező kliense 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 szerverrel. 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 általá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ázhat manuálisan is, és indítsa a PHP-t hagyományos levelező kliensként.
Ha notebookja van és különleges biztonságra van szüksége, beállíthatja a levelező klienst úgy, hogy a leveleket ne a notebookon tárolja. A levelek akkor töltődnek le, amikor bekapcsolja 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, amikor 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.
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
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.
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.
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álasztania, é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 vonatkozó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 tartalmazó címekre küldtek másolatként.
A levelezési függvények magukat az egyedi leveleket vagy hírcsoport postát olvassák, és feltételezik, hogy korábban kiválasztotta a szervert és a postaládát vagy a hírcsoportot:
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 akarhatja, a hagyományos függvényeket helyettesítheti a kiemelő függvényekkel:
Ezek a függvények a sztringeket különböző megjelenítésekre kódolják, amilyen példá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 karakterkészletet jelenti, amellyel a világ összes írott nyelve megjeleníthető, még az olyan, piktogramokat 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ádanevekhez használják, amelyeknek a karakterei kívül esnek a szabványos nyomtatható karakterké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állí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 hibaüzeneteket tartalmazza, és törli a szerver hibalistáját, így minden hibaüzenetet csak egyszer kap meg. Amikor új IMAP-kódot tesztel, ellenőrizze a figyelmeztetéseket és a hibá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 adja 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 csatlakozá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; vagyis 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 érté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 fogadja el. Egy e-mail címet ad vissza, az RFC 2822-re formázva.
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:
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.
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.