Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

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:

[email protected]:~# 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) ...
 
[email protected]:~#

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.

Mail

7 Responses so far.

  1. tutoriale pc says:

    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/

  2. Sergiu Tot says:

    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.

  3. Marian Banica says:

    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!

  4. php says:

    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.

  5. Sergiu Tot says:

    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.

  6. empeus says:

    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

  7. Sergiu Tot says:

    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.