Twitter RSS

In scripturile PHP cea mai simpla metoda de a trimite un mesaj este functia mail(). E o metoda simpla si merge rapid, dar pentru ca functia sa poata fi folosita e necesara instalarea unui server de mail local.

O solutie rapida este instalarea ssmtp care ne permite sa trimitem mailuri folosind un server de mail extern. Instalarea se face rapid in Ubuntu:

root@lamp:~# apt-get install ssmtp
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gnome-audio
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  ssmtp
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 54.6kB of archives.
After this operation, 8,192B of additional disk space will be used.
Get:1 http://ro.archive.ubuntu.com karmic/universe ssmtp 2.63-1 [54.6kB]
Fetched 54.6kB in 0s (199kB/s)
Preconfiguring packages ...
Selecting previously deselected package ssmtp.
(Reading database ... 229119 files and directories currently installed.)
Unpacking ssmtp (from .../ssmtp_2.63-1_amd64.deb) ...
Processing triggers for man-db ...
Setting up ssmtp (2.63-1) ...
 
root@lamp:~#

Sau in FreeBSD:

[root@lamp /usr/ports/mail/ssmtp]# make install clean
===>  Extracting for ssmtp-2.62.3
=> MD5 Checksum OK for ssmtp_2.62.orig.tar.gz.
=> SHA256 Checksum OK for ssmtp_2.62.orig.tar.gz.
===>  Patching for ssmtp-2.62.3
.....................................................
===>  Installing for ssmtp-2.62.3
===>   ssmtp-2.62.3 depends on file: /usr/local/lib/libcrypto.so.5 - found
===>   Generating temporary packing list
===>  Checking if mail/ssmtp already installed
=> Added group "ssmtp".
/usr/bin/install -c -o root -g wheel -d -m 755 /usr/local/sbin
/usr/bin/install -c -o root -g wheel -s -m 755 ssmtp /usr/local/sbin/ssmtp
/usr/bin/install -c -o root -g wheel -d -m 755 /usr/local/man/man8
/usr/bin/install -c -o root -g wheel -m 644 ./ssmtp.8 /usr/local/man/man8/ssmtp.8
/usr/bin/install -c -o root -g wheel -d -m 755 /usr/local/etc/ssmtp
/usr/bin/install -c -o root -g wheel -m 644 ./revaliases /usr/local/etc/ssmtp/revaliases.sample
/usr/bin/install -c -o root -g wheel -m 644 ./ssmtp.conf /usr/local/etc/ssmtp/ssmtp.conf.sample
sSMTP has been installed successfully.
===>   Compressing manual pages for ssmtp-2.62.3
===>   Registering installation for ssmtp-2.62.3
===> SECURITY REPORT: 
      This port has installed the following binaries which execute with
      increased privileges.
/usr/local/sbin/ssmtp
===>  Cleaning for ssmtp-2.62.3
[root@lamp /usr/ports/mail/ssmtp]#

Instalarea in CentOS se face ca pentru orice alta aplicatie, cu mentiunea ca e necesar repository-ul EPEL pentru asta.

Dupa instalare trebuie sa editam fisierul ssmtp.conf si sa adaugam urmatoarele linii:

hostname=lampserver
AuthUser=lamp.mail@gmail.com
AuthPass=ParolaCont
FromLineOverride=YES
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES

Urmatorul pas ar fi sa determinam sistemul sa foloseasca ssmtp in loc de wrapperul sendmail. Pentru asta vom crea un link:

[root@lamp ~]# cd /usr/sbin/
[root@lamp /usr/sbin]# ln -s `which ssmtp`

Acum ar trebui sa putem trimite mailuri folosind functia mail() din PHP, totul fiind intermediat in mod transparent de contul specificat in directiva AuthUser. De asemenea vom putea folosi comanda mail din consola fara probleme.

Popularity: 10% [?]

Comentarii pentru “PHP mail() cu Gmail”

  • tutoriale pc spune:

    La sfarsit cand faci scurtatura, nu inteleg ce vroiai sa faca `which ssmtp`.
    Pe un alt site am gasit ca trebuie sa schimbi in php.ini calea sendmail_path. Uite exemplu: http://www.davidhurst.co.uk/2007/06/19/php-mail-and-ssmtp-on-debian-linux/

  • Sergiu Tot spune:

    Tutorialul e general, nu m-am legat de o anumita distributie. Calea catre ssmtp poate diferi. Cu `which ssmtp` se returneaza calea catre binar, indiferent daca acesta e in /usr/bin, /usr/local/bin, /usr/local/sbin etc.

    Referitor la php.ini, intr-adevar e si asta o metoda. In anumite situatii (ex. exista deja un MTA instalat) e chiar mai bine sa modificam php.ini. Eu am preferat sa folosesc un link pentru ca astfel functioneaza si comanda mail din linia de comanda.

  • Marian Banica spune:

    Salut,

    As un script care trimite regulat mail la cam fiecare actiune a utilizatorului. E un fel de “facebook” din open source incropit care trimite cam 4-5 mailuri/zi/utilizator activ.
    Cum am un site care are cam 200 de utilizatori activi (si sper sa creasca) imi pun problema ca shared hostul sa imi dea eroare (are o limita la 400 mailuri/ora).

    So cum as putea face folosind mail() sa trimit prin gmail de ex.?

    Are GMAIL limita pe ora?

    Toate bune,
    Marian

    P.S vroiam sa te felicit pentru blog. E super util si ma bucur ca l-am gasit!

  • php spune:

    Tu trebuie sa iti faci ceva gen newsletter. Am incercat deja treaba asta. Baga toate mailurile care urmeaza sa le trimiti intr-o baza de date. eu o folosesc cea a newsletter-ului. Scriptul de newsletter sa il pui sa trimita 5 mailuri pe minut cu pauza de 5 secunde (sleep(5)) intre ele. iar cronul il faci in fiecare minut. atat.

  • Sergiu Tot spune:

    Salut, si merci de apreciere!

    Pe shared hosting e ceva mai complicat pentru ca e necesara impunerea unor reguli si nu e usor sa treci peste ele. Exemplul din articol nu il poti folosi pentru ca asta ar insemna sa ai acces ca root pe server, iar functia mail() nu o poti face sa foloseasca un cont cu autentificare.

    Cea mai buna solutie in cazul tau ar fi sa cauti in cod partea care trimite mailuri si sa inlocuiesti mail() cu Swiftmailer. Trebuie scrise cateva linii in plus, dar te prinzi repede cum functioneaza :)

    Referitor la Gmail, nu stiu sa te limiteze la un numar de mesaje. Singurele limite care le stiu sunt de 100 de destinatari pe mesaj (CC sau Bcc) si 10MB pe mesaj.

  • empeus spune:

    ok, si de ce sa nu folosesc PHPmailer, mi se pare foarte ok

    si inca un lucru mail() sucks … intra o gramada la spam, e de nefolosit

  • Sergiu Tot spune:

    empeus, pentru ca PHPmailer lucreaza la nivel de script. ssmtp lucreaza la nivel de server. Cu primul rezolvi problema pentru un site. Cu al doilea pentru un server intreg.

Ai intrebari?

* Te rog sa postezi pe NetHelp orice intrebare care nu are legatura cu articolul.

Retele sociale
Reclamã
Sharing makes you cool!
Categorii
Apache
Articole si tutoriale legate de serverul web Apache.
/articole-tutoriale-apache/

cPanel
Articole si tutoriale legate de utilizarea si administrarea sistemului de gestiune a serverelor de hosting, cPanel.
/articole-tutoriale-cpanel-whm/

DNS
Vezi toate articolele din categoria DNS
/dns-bind-domain-name-services/

Linux
Articole si tutoriale legate de Linux, sisteme BSD sau alte sisteme de operare din familia UNIX.
/articole-tutoriale-linux/

Mail
Vezi toate articolele din categoria Mail
/mail/

MySQL
Articole si tutoriale despre serverul de baze de date MySQL.
/articole-tutoriale-optimizare-mysql/

Perl
Vezi toate articolele din categoria Perl
/perl-practical-extraction-and-report-language/

PHP
Vezi toate articolele din categoria PHP
/php-language-hypertext-preprocessor/

Retele
Tutoriale despre retele de calculatoare, configurarea interfetelor de retea si rutarea IP-urilor.
/retele-networking/

Virtualizare
Articole si tutoriale despre virtualizare si sistemel virtuale create cu Xen sau OpenVZ.
/virtualizare-xen-openvz/

Web hosting
Articole despre serviciile de gazduire web, dedicate sau in regim shared.
/web-hosting/

Webmin / Virtualmin
Articole si tutoriale legate de sistemul de gestiune gratuit Webmin sau modulul Virtualmin.
/webmin-virtualmin/





Newsletter
LAMP Recomandã
NetHelp
SRV.ro
cpadmin.ro
ABCDomenii