a szerző önként hozzájárult ehhez az oktatóanyaghoz a Pepipost Write to Contribute program részeként.
Bevezetés
PHP jön egy alapértelmezett funkció mail (), amely lehetővé teszi, hogy sendmail közvetlenül a PHP script. Ebben az oktatóanyagban az e-mail küldésének előfeltételeiről, a szintaxisról és annak paramétereiről fogunk beszélni.
előfeltételek
- PHP4, PHP 5 vagy PHP 7
- PHP konfigurálva sendmail-re. Abban az esetben, ha a PHP beállítása nincs konfigurálva e-mail küldésére a külvilág felé, akkor kérjük, olvassa el a cikk végén említett lépéseket.
szintaxis
levél (címzett,tárgy,üzenet,fejlécek,paraméterek);
paraméterek
a
karakterlánc | szükséges
a címzett e-mail címe.
Megjegyzés: A készüléknek meg kell felelnie az RFC 2822 szabványnak. Egy vagy több e-mail címet vesszővel elválasztva adhat át.
néhány példa arra, hogy az értékek hogyan fognak kinézni:
- ,
- vevő neve <>
- vevő neve < >, Vevő Neve 2 <>
tárgy
String / Required
az elküldendő e-mail tárgya.
megjegyzés: az alanynak meg kell felelnie az RFC 2047 szabványnak.
üzenet
karakterlánc | kötelező
az elküldeni kívánt levél tartalma. Az e-mail minden sorát CRLF-el (\r\n) kell elválasztani, és minden sor nem haladhatja meg a 70 karaktert.
Windows gép esetén, amikor a PHP egy SMTP-kiszolgálóhoz csatlakozik a sendmailhez, eltávolítja a sor elején található pontpontot. Ennek megoldásához cserélje ki a pontot egy dupla pontra, az alábbi kód használatával:
<?php $text = str_replace("\n.", "\n..", $text); ?>
additional_headers
vegyes (String vagy Array) | opcionális
ez a paraméter a további e-mail fejlécek, például a From, Cc és a Bcc továbbítására szolgál. Minden további fejlécet CRLF-el (\r\n) kell elválasztani.
Megjegyzés: Az e-mail küldése közben ellenőrizze, hogy van-e From fejléc. Beállíthatjuk a From fejlécet, vagy az additional_headers paraméterrel, vagy beállíthatunk egy alapértelmezett értéket a php-ben.ini.
additional_parameters
String | Optional
ez az additional_parameter használható további zászlók továbbítására a Sendmail programnak a sendmail_path konfigurációs beállításban konfigurálva. Például; ezzel a paraméterrel beállíthatja a boríték feladójának címét, ha a Sendmail-f opcióval használja. A PHP alapértelmezés szerint belsőleg elkerüli az escapeshellcmd() paraméterben szereplő értékeket, hogy megakadályozza a parancs esetleges végrehajtását.
visszatérési érték
mail() függvény TRUE értéket ad vissza, ha az SMTP-kiszolgáló sikeresen elfogadta az e-mailt kézbesítésre, különben hamis.
a valóság megszerzése nem feltétlenül jelenti azt, hogy az e-mailt a címzett szerverére szállítják. A TRUE csak azt jelzi, hogy az e-mail sikeresen beküldte az SMTP-kiszolgáló küldési sorát.A
értéke TRUE, ha az e-mailt sikeresen elfogadták kézbesítésre, ellenkező esetben FALSE.
fontos megjegyezni, hogy csak azért, mert a levelet kézbesítésre elfogadták, ez nem jelenti azt, hogy a levél eléri a kívánt rendeltetési helyet.
megjegyzés: a mail() funkció nem fog működni a helyi szerveren. Az internethez csatlakoztatott szerver és a megnyitott SMTP portok szükségesek a levelek küldéséhez.
kevés használati eset és Munkapélda
1. Hogyan lehet HTML-levelet küldeni
<?php$to = ", ";$subject = "This is a test HTML email";$message = "<html><head><title>This is a test HTML email</title></head><body><p>Test email. Please ignore.</p></body></html>";// It is mandatory to set the content-type when sending HTML email$headers = "MIME-Version: 1.0" . "\r\n";$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";// More headers. From is required, rest other headers are optional$headers .= 'From: <>' . "\r\n";$headers .= 'Cc: ' . "\r\n";mail($to,$subject,$message,$headers);?>
2. Hogyan kell elküldenimail egy további parancssori paraméterrel.
a fent leírtak szerint ebben a használati esetben az additional_parameters paramétert kell használnia egy további paraméter továbbításához a sendmail_path használatával történő levélküldéshez konfigurált programnak.
<?phpmail('', 'This is a test subject line', 'The complete body of the message', null, ''); ?>
gyakori hibák/kivételek a PHP sendmail funkcióval
- nem lehet nagy mennyiségű e-mailt küldeni a mail() funkcióval
a mail() funkcióval nem ajánlott nagy mennyiségű e-mailt küldeni, mert minden e-mailhez megnyit és bezár egy SMTP socket kapcsolatot. Ez tényleg nem túl hatékony.
ha nagy mennyiségű e-mailt szeretne küldeni PHP-ben, akkor ajánlott a PEAR::Mail és a PEAR::Mail_Queue csomagok hivatkozása, vagy használjon egy jó e-mail szolgáltatót, amely segít az e-mail kötetének méretezésében. - nem kap e-maileket küldött a PHP mail() funkció
míg nem lehet N számú oka a hiba, de az egyik a wried probléma, amely sok találkozik van a Unix mail transfer ágensek, amelyek helyettesítik LF által CRLF automatikusan, ami megduplázódik CR ha CRLF már használják a kódot. Ebben az esetben csak LF (\n) értéket használjunk. További információ az RFC 2822 üzenetformátumáról. - figyelem: mail (): a “sendmail_from” nincs beállítva a php-ben.ini vagy egyéni “From:” fejléc hiányzik.
ez a hiba leginkább azért fordul elő, mert a levél küldése közben nem említette a From fejlécet az additional_headers paraméterek használatával.
PHP konfigurálása levél küldéséhez
a PHP-vel kapcsolatos dolgok konfigurálásához meg kell változtatnia a `php-t.ini ‘ dosszié. A php-t fogjuk szerkeszteni.ini fájl a Sendmail konfigurálásához.
könnyen megtalálhatja vagy megkeresheti a php-t.ini fájl Linuxban az alábbi parancs használatával:
locate php.ini
az alapértelmezett hely az ` / etc / php.ini ‘
ugyanez megtalálható a windows rendszerben, ahol az XAMPP vagy a LAMPP telepítve van:
pontosítás:
- Xampp (X (“egyes operációs rendszerek” esetén), Apache, MySQL, Perl, PHP)
- Lampp (Linux, Apache, MySQL, Perl, PHP)
változó php.ini fájl hozzáadása mail konfiguráció.
1. Nyissa meg a php-t.ini fájl az alábbi használatával:
Linux / Mac OS esetén:
vim /etc/php.in
Windows esetén:
jegyzettömb használata
2. Keresés a fájlban. Az alábbiakban látható lesz:
; For Win32 only.; http://php.net/smtpSMTP = localhost; http://php.net/smtp-portsmtp_port = 25; For Win32 only.; http://php.net/sendmail-from;sendmail_from = ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").; http://php.net/sendmail-pathsendmail_path = /usr/sbin/sendmail -t -i; Force the addition of the specified parameters to be passed as extra parameters; to the sendmail binary. These parameters will always replace the value of; the 5th parameter to mail(), even in safe mode.;mail.force_extra_parameters =; Add X-PHP-Originating-Script: that will include uid of the script followed by the filenamemail.add_x_header = On; The path to a log file that will log all mail() calls. Log entries include; the full path of the script, line number, To address and headers.;mail.log =
3. Adja hozzá a levelező szerver adatait a fájlhoz, vagy beládáz van egy meg lehet változtatni (mail szerver lehet a saját ie. helyi levelezőszerver, vagy bármilyen ESP-t használhat levelezőszerverként).
Linux / Mac OS esetén:
– ellenőrizze a `sendmail_path ‘ szót, és győződjön meg róla, hogy a; nem (pontosvessző jelzi a sor megjegyzését).
– alapértelmezés szerint a `/usr/bin/sendmail-t-i` parancsot fogja használni.Ablakhoz:
– ellenőrizze az `SMTP = localhost` szót, és változtassa meg a kívánt levelezőszerverre (bármilyen ESP vagy localhost) nincs szükség változtatásra, ha saját helyi szervert használ.
– vagy bármely e-mail szolgáltató smtp szerverét is használhatja, mint például a Pepipost, a Sendgrid, a Mailgun, a Sparkpost.
4. A php mentése/bezárása.ini fájl
5. Az utolsó lépés, ne felejtsd el újraindítani a webszervert / php-fpm.
Pro tipp: a fogadó egy egyszerű “info.php ” a webszerveren, hogy ellenőrizze a PHP minden konfigurációját az alábbi használatával 2 vonalhajózási kód:
vim php_info.php<?phpphpinfo();?>
mentse és lépjen ki a fájlból.
6. Töltse be újra a webszervert és a php-fpm-et.
7. Nyomja meg a http://localhost/php_info.php gombot a webböngészőben.
következtetés
Remélem, ez a bemutató képes segíteni, hogy küldjön e-mailt a PHP.