Daca va ocupati de dezvoltarea siteurilor sigur vi se intampla sa trimiteti mailuri din cadrul unui script PHP. O problema des intalnita este faptul ca mesajele livrate nu ajung in Inbox, cum ar trebui sa ajunga in mod normal, ci ajung in Spam sau Bulk sau, in cazuri mai grave, nu ajung deloc. Motivul pentru care mesajele nu sunt livrate in Inbox este detectarea mesajului ca Spam de catre filtrele antispam.
Ca sa putem evita problema, sa vedem mai intai cum functioneaza un filtru antispam. Cand un mail ajunge pe serverul destinatar filtrele antispam, de obicei SpamAssassin, verifica mesajul. In general cand se trimit mesaje de tip spam sunt cateva elemente care se repeta cum ar fi rescrierea headerelor, existenta unor cuvinte sau siruri de caractere (ex. Viagra), mascarea expeditorului etc. Pentru fiecare din aceste elemente, in functie de frecventa acestora in majoritatea situatiilor, mesajul primit va primi un “spam score“. Dupa ce mesajul a trecut de toate filtrele este calculat un “spam score” in functie de punctele obtinute la fiecare verificare iar daca acest “spam score” este mai mare decat limita impusa in configurare mesajul este sters sau marcat ca spam.
Pentru a evita situatiile de genul acesta putem urma cateva mici reguli care cu siguranta vor mari considerabil rata de livrare a mesajelor:
- verificati regulat blacklisturile pentru ca IP-ul de expediere sa nu fie listat;
- evitati expedierea de mesaje nesolicitate;
- nu trimiteti fisiere executabile care pot fi considerate periculoase;
- folositi pentru expediere un cont cu autentificare, nu functia mail();
- nu rescrieti headerele;
- activati pentru livrarea de mesaje DomainKeys si SPF.
Regulile de mai sus sunt cele mai importante pentru evitarea marcarii mesajelor ca spam. Mai jos incerc sa detaliez fiecare regula in parte.
Verificati blacklisturile
La nivel de server administratorii obisnuiesc sa activeze ca filtru antispam verificarea blacklisturilor. Daca de pe o adresa IP se trimit foarte multe mesaje nesolicitate utilizatorii pot forwarda aceste mesaje catre SpamCop sau alte blacklisturi care vor include adresa IP a expeditorului ca fiind abuziva.
Cand un mesaj ajunge la adresa destinatie se verifica adresa IP a expeditorului si a serverului care a trimis mesajul. Daca vreunul din aceste IP-uri apare intr-un blacklist, mesajul primeste un “spam score” mare si implicit cresc sansele ca la sfarsitul verificarii sa fie considerat ca spam.
Pentru a evita aceasta situatie verificati IP-ul de pe care mesajele urmeaza sa fie transmise, si IP-ul serverului de mail daca este diferit de serverul de rulare. Daca vreunul din IP-uri apare ca fiind abuziv contactati firma care administreaza reteaua sau serverul de hosting. Daca nu se poate, cum e in cazul UPC care nu obisnuieste sa verifice si sa delisteze IP-urile, intrati pe siteul fiecarui blacklist si incercati sa remediati problema. De obicei un IP se delisteaza ca urmare a unei cereri trimisa printr-un formular.
Blacklisturile existente sunt multe si e greu sa le urmariti pe toate. Pentru a simplifica lucrurile obisnuiesc sa folosesc doua site-uri care verifica o adresa IP in mai multe blacklisturi: DNSBL.info si Robotex.com.
Evitati expedierea de mesaje nesolicitate
Pentru ca un IP sa nu ajunga intr-un blacklist e important ca destinatarul sa nu forwardeze mesajul catre unul din blacklisturi. Pentru ca destinatarul sa nu expedieze mesajul intr-un blacklist trebuie sa va asigurati ca mesajele expediate nu sunt si nu pot fi interpretate de destinatar ca fiind mesaje de tip spam. Astfel de situatii se intalnesc in cadrul firmelor care ofera pseudoservicii de SEO, firme care culeg de pe internet liste de mailuri iar apoi trimit mesaje catre adresele respective sau vand baza de date cu adrese pentru ca efectele sa fie suportate de cumparator nu de ei. Mesajele expediate pot lua o forma legitima dar practic orice persoana care primeste in mail un mesaj nesolicitat de la o persoana sau firma necunoscuta care incearca sa ii vanda un produs sau un serviciu stie ca mesajul respectiv este unul nelegitim, un mesaj care nu i se adreseaza lui ca persoana sau firma ci e un mesaj trimis la gramada in speranta castigarii clientilor.
Chiar daca un mesaj poate fi compus in asa fel incat sa arate ca un mesaj legitim, majoritatea destinatarilor sunt capabili sa faca diferenta dintre un mesaj care ii este adresat si un mesaj general formulat la deruta. Deci, daca aveti de trimis mesaje, asigurati-va ca sunt mesaje legitime care nu pot fi interpretate ca spam.
Nu trimiteti fisiere executabile
Se intampla de multe ori ca un mesaj spam sa contina cod executabil care urmeaza sa lanseze un atac asupra sistemului gazda. Drept urmare majoritatea sistemelor antispam ofera un “spam score” mare pentru mesajele care contin fisiere cu extensiile exe, bat, msi, eml etc. Un mesaj cu una din aceste extensii este un mesaj care are posibilitatea de a face rau si implicit trebuie evitat.
Ca solutie puteti arhiva mesajele in .zip, .rar sau .tgz. Astfel mesajele nu mai pot fi executate deci nu prezinta pericol. O alta solutie care este mult mai eficienta pentru ca trece si de filtrele care scaneaza in interiorul arhivelor este sa nu atasati deloc fisierele executabile ci doar un link de download. Uploadati fisierul pe un site gen File Host sau upload.ro.im. Uploadant fisierele pe un server extern filtrul de mail va ignora fisierul iar mesajul nu va fi marcat ca spam.
Folositi un cont cu autentificare
Pentru a expedia un mesaj din PHP majoritatea persoanelor prefera functia mail() care e foarte usor de folosit. Ffunctia mail() are doua probleme. Prima este ca trimite mesajele folosind utilizatorul sub care ruleaza serverul web, nobody, care de multe ori creste “spam score-ul” final. A doua problema este ca adauga anumte headere prin care anunta destinatarul ca mesajul a fost trimis de altcineva, iar adresa expeditorului real nu este una valabila ceea ce din nou va creste “spam score-ul” final.
Pentru a rezolva problema puteti folosi un script care livreaza mesajele cu ajutorul unui cont SMTP. Cel mai bun expeditor de mesaje care l-am folosit pana acum este Swiftmailer care poate fi configurat foarte usor sa foloseasca un cont de mail care il puteti crea din cPanel.
Nu rescrieti headerele
O metoda de a detecta daca un mesaj e spam este rescrierea headerelor. Daca un mesaj este expediat iar utilizatorul injecteaza un header care sa schimbe adresa expeditorului de exemplu, mesajul va primi inainte de livrare un header care sa anunte destinatarul de aceasta modificare. Cand filtrul antispam detecteaza aceste modificari va creste “spam score-ul” mesajului final si implicit va creste sansele ca mesajul sa fie considerat spam.
De obicei headerele sunt suprascrise pentru a schimba expeditorul. Solutia ar fi sa folositi un cont SMTP pentru livrarea mesajelor. Cand folositi un cont SMTP pentru expedierea mesajelor headerele vor confirma ca expeditorul este proprietarul contului iar filtrele nu vor considera mesajul ca fiind spam.
Activati DomainKeys si SPF
Daca folositi cPanel ca sistem de gestiune a contului de hosting aveti posibilitatea de a activa doua metode suplimentare de autentificare a mesajelor, DomainKeys si SPF:

Atat DomainKeys cat si SPF sunt metode de a identifica corect un mesaj bazandu-se pe serviciul DNS. DomainKeys adauga o inregistrare DNS care functioneaza in mod asemanator cu cheile publice/private in cazul criptarii, inregistrare care poate fi folosita pentru identificarea corecta a expeditorului. SPF spre deosebire de DomainKeys nu ofera o identificare a contului ci afiseaza o lista de hosturi carora li se permite livrarea de mesaje.
Popularity: 26% [?]



Super interesant, doar am discutat pe aceasta tema. Intr-adevar, google imi trecea in spam, deoarece expeditorul era www-data@acasa.ro, avand precizat in main.cf acest host. Dupa ce am le-am scos din spam se pare ca-i OK. Dar ma pune pe ganduri acel “spam score”: oare chiar daca primesc mailurile este OK?
Scorul depinde de fiecare server destinatar in parte. Poate sa fie ok pe un server (ex. spam score 0) sau poate fi o problema pe altul (ex. spam score 5). Daca stii vreun server care nu iti accepta mesajele discuta cu adminul sa se uite prin loguri sa vada care e problema si sa iti spuna de ce mesajul e marcat ca spam, daca asta e problema.
Cum nu exista o regula sau un standard in ceea ce priveste marcarea mesajelor ca spam nu poti spune daca e ok sau nu. Trebuie sa fi nitel superficial si sa zici ca atata timp cat mesajele ajung la destinatie si nu exista o problema majora (ex. sa apara IP-ul intr-un blacklist) totul e ok
Este foarte bine de stiut acetse date. Sunt programator si foloseam functia mail, dar aproape toate mailurile ajungeau in bulk/spam. Am invatat ce inseamna smtp si acum trimit numai prin smtp. Ca expeditor de mesaje prefer sa folosesc phpmailer.
Nu inteleg de ce nu intra nici un mesaj in INBOX. Ce ar trebui sa fac?
Mircea
Mircea, articolul de mai sus iti spune ce trebuie sa faci pentru ca mesajele sa intre in Inbox
tutoriale pc, phpmailer… swiftmailer… e o chestie de preferinte. Ambele isi fac treaba foarte bine. Ma bucur ca ai gasit articolul util. Poate ti-ar prinde bine sa citesti putin si despre ssmtp. E un utilitar dragut daca ai un server dedicat si vrei sa folosesti un cont SMTP fara sa faci modificari mari intr-un site care e deja in productie si foloseste functia mail() pentru a trimite mesaje
Salut Sergiu,
uite ca m-am lovit si eu de o problema ce are legatura cu articolul tau. Mesajele ajung in Inbox, dar au ca expeditor un nobody@ro2.octosguid.com pentru ca folosesc un autoresponder secvential. As putea face ceva sa apara adresa de mail a firmei ca expeditor in loc de acest nobody@? Responedrul foloseste intr-adevar un sendmail.php pt trimiterea mailurilor… am incercat cu swiftmailer dar mi-am prins urechile pe undeva si n-a mers
Salut,
Cea mai potrivita metoda ar fi sa folosesti un cont de mail cu autentificare. Daca trimiti mailurile apeland sendmail sau functia mail() din PHP nu ai aproape niciun control asupra livrarii mesajelor.
Intra pe forum si deschide un topic cu ce ai facut in Swiftmailer si te ajut sa gasesti problema si sa il faci functional
Draga Sergiu,
nu are rost sa pierzi timpul cu ce nu-mi iese mie. Nu stiu programare, mi-am facut site-ul singura, invatand, dar e departe de ce si cum as vrea sa fie.
Referitor la Swiftmailer ce sa-ti spun? Doar l-am instalat, nici macar nu stiu ce ar mai trebui sa fac. Prin urmare nu vreau sa abuzez de timpul tau si nu are rost sa deschid vreun topic pe forum.
Multumesc mult pentru ajutor, dar, sincer, nu ma lasa inima sa iau din timpul cuiva stiind ca eu insami nu prea pot ajuta cu nimic… ar insemna ca tu singur sa faci totul.
Imi place sa ajut omul care vrea sa invete. Daca vrei un script, nu ti-l fac eu. Daca vrei in schimb sa inveti cum se face sunt dispus (in limita timpului disponibil, bineinteles) sa iti dau sfaturi si idei pana cand ai ajuns la capat cu ce ti-ai propus.
Daca vrei sa inveti, nu consider ca imi pierd timpul – chiar de ar fi sa stam cateva zile sa tot discutam fiecare detaliu pe care nu il intelegi.
Multumesc foarte mult Sergiu.
Si eu folosesc cpanel si chiar mi-au prins bine aceste sfaturi