PHPMailer: slanje emaila preko SMTP-a u PHP-u

od strane | Hosting sajta

Poruka je poslata iz aplikacije, ali nije stigla

Obrazac prikaže „Uspešno poslato”, a poruke nema u sandučetu. To može značiti da je aplikacija predala poruku sledećem servisu, ali ne i da ju je primalac dobio. Zato slanje iz PHP-a treba podesiti i proveriti u nekoliko koraka.

Predaja poruke SMTP serveru i odvojena provera stvarnog prijema.
Predaja poruke SMTP serveru i odvojena provera stvarnog prijema.

PHPMailer je biblioteka za sastavljanje i slanje poruka. Podržava autentifikovan SMTP, MIME sadržaj i priloge. Ne zamenjuje servis pošte i ne garantuje prolazak kroz sve filtere. Njegov posao je da aplikacija pravilno pripremi poruku i komunicira sa podržanim serverom.

Pripremite nalog i podatke za vezu

Pre koda proverite kreiranje mejl naloga i stvarne SMTP podatke pružaoca usluge. Potrebni su host, port, način šifrovanja i nalog ovlašćen da šalje sa izabrane adrese. Podatke preuzmite iz dokumentacije svog naloga, ne iz slučajnog primera.

Ne pretpostavljajte da su SFTP, webmail i SMTP lozinke iste. Ako servis podržava namensku aplikacionu lozinku ili drugi prikladan pristup, pratite njegov postupak. Ograničenja slanja i način autentifikacije zavise od usluge.

Instalirajte biblioteku iz pouzdanog izvora

Zvanični projekat preporučuje Composer. U odgovarajućem projektu koristite composer require phpmailer/phpmailer, uz proveru kompatibilnosti izdanja sa svojim PHP okruženjem. Sačuvajte zavisnosti i zaključanu konfiguraciju prema načinu na koji održavate aplikaciju.

Primer ispod pokazuje strukturu veze, ne vrednosti koje treba prekopirati za svaki server. Pretpostavlja STARTTLS na portu koji vaš servis izričito podržava. Za drugi podržani režim koristite odgovarajuća podešavanja iz njegove dokumentacije.

use PHPMailer\PHPMailer\PHPMailer;

require __DIR__ . '/vendor/autoload.php';
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = getenv('APP_SMTP_HOST');
$mail->SMTPAuth = true;
$mail->Username = getenv('APP_SMTP_USER');
$mail->Password = getenv('APP_SMTP_PASSWORD');
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = (int) getenv('APP_SMTP_PORT');
$mail->CharSet = 'UTF-8';

Tajne učitajte iz privatne konfiguracije ili odgovarajućeg okruženja. Nemojte ih unositi u javni repozitorijum, primer članka ili JavaScript koji pregledač preuzima. Pre slanja proverite da su obavezne vrednosti postavljene i da je konfiguracija odgovarajuća.

Pošiljalac i korisnik obrasca nisu ista stvar

Polje From postavite na adresu koju aplikacija sme da koristi. Ako posetilac ostavlja svoju adresu u obrascu, validirajte je i po potrebi koristite Reply-To. Nemojte omogućiti da proizvoljan unos postane zaglavlje poruke ili da aplikacija neograničeno šalje na unete adrese.

Za telo izaberite odgovarajući format. Ako šaljete HTML, obezbedite i smislen tekstualni sadržaj. Priloge dodajte samo sa proverene, dozvoljene lokacije, uz ograničenje veličine i tipa. Unos korisnika ne treba direktno pretvarati u putanju fajla na serveru.

Greške istražujte privatno

Slanje obavite kroz obradu izuzetaka i korisniku vratite kratku, razumljivu poruku. Detaljan SMTP razgovor može pomoći tokom kontrolisane dijagnostike, ali ne treba da bude javno prikazan. Log može sadržati adrese i druge osetljive podatke; ograničite mu pristup i vreme čuvanja.

Ne isključujte TLS proveru sertifikata da biste uklonili upozorenje. Proverite naziv servera, vreme na sistemu i podržani režim veze. Problem sa sertifikatom treba objasniti, a ne samo sakriti.

Sačuvajte smislen status u aplikaciji

Razdvojite neuspeh povezivanja, odbijenu poruku i prihvatanje od servera. Korisniku ne obećavajte konačnu isporuku kada imate samo potvrdu predaje. Ako aplikacija ponavlja slanje posle greške, proverite da ne pravi duplikate kada je ishod prvog pokušaja neizvestan. Za važna obaveštenja čuvajte odgovarajući identifikator i status uz ograničen pristup, umesto kompletnog sadržaja privatne poruke u javnom logu.

Proverite ceo put poruke

Pošaljite kontrolisani test na nalog kome imate pristup. Potvrdite prijem, proverite neželjenu poštu i odgovorite. Pregledajte serverov odgovor i eventualnu naknadnu poruku o neuspehu. Prihvatanje od SMTP servera nije isto što i potvrđen prijem u glavnom sandučetu.

Proverite i SPF, DKIM i DMARC prema uputstvu servisa. PHPMailer ne postavlja sve te DNS uslove automatski. Za newsletter i veći obim slanja izaberite odgovarajući sistem, umesto da običan kontakt obrazac pretvorite u masovni pošiljalac.

PHPMailer nije POP3 čitač sandučeta. Odvojite slanje od preuzimanja pošte i birajte biblioteku prema zadatku. Najkorisniji završni test je jedan pravilno sastavljen mejl koji je stvarno primljen i na koji može normalno da se odgovori.

Sviđa ti se ovo?
Jednom nedeljno šaljemо nove tekstove koje vredi pročitati!

Oznake (tagovi): Mail,php,PHPMailer

5 Komentari

  1. Ivan Petrović

    Moguće je slati poruke sa Gmail naloga koji ima uključenu autentifikaciju samo za takve prilike mora da se generiše posebna lozinka za tu aplikaciju (Moj nalog -> Prijavljivanje i bezbednost -> Lozinke za aplikacije)

    Odgovori
  2. Rasa Markovic

    Koliko bi ukupno kštalo da postavim sajt kod Vas? Da li je to Hosting (cenu koju odaberem od ponuđenih) + Domen? Da li imam popusta ako objavim više sajtova kod vas? Hvala. Pozdrav

    Odgovori
    • Ivan Blagojević

      Poštovani, hosting i domen su odvojene usluge.

      Hosting paket možete odabrati ovde: https://adriahost.rs/hosting/ i cena osnovnog paketa sa PDV-om na današnji dan iznosi 3.608 RSD.

      Domen možete odabrati ovde: https://adriahost.rs/domeni/ , cena .com domena na današnji dan iznosi 1,588 RSD sa PDV-om. Cene drugih domena možete videti na stranici koju smo naveli napred.

      Popust dobijate ukoliko se odlučite za period plaćanja za 3 godine unapred, pri čemu plaćate samo dve – jednu godinu dobijate besplatno pri čemu štedite 3.608 RSD (ukoliko je u pitanju Basic paket).

      Za sva dodatna pitanja slobodno nam pišete koristeći našu kontakt formu: https://adriahost.rs/contact/

      Odgovori
  3. Josko Misulic

    Poštovani!
    Gdje mogu i da li mogu skinuti kompletan kod tutoriala.
    Hvala unaprijed

    Odgovori
    • Ivan Blagojević

      Poštovani, u našem tekstu se nalazi kompletan kod. Ako zatreba još nešto ili se ne snađete javite nam pa ćemo pomoći.

      Odgovori

Prosledi komentar

Kategorije

Adriahost razglednica

Ćirilica na internetu

cPanel za početnike

Hosting sajta (50)

Interesantno

Internet zarada

Iskustva Adriahost

Izrada sajta

Obaveštenje

Photoshop uputstva

SEO i Marketing sajta

Serveri i VPS

Škrabalica

SMS Marketing

Svet domena

WordPress za početnike

Besplatan email kurs i novosti sa bloga

Prijavite se na našu email listu
Ime i prezime *
Email adresa *
Dobijaćete obaveštenje o novostima na blogu i kurs web poslovanja i marketinga u 9 lekcija.

Pratite Adriahost:

Najpopularniji tekstovi

Pridružite se našem jatu