Forum und email

mail

(PHP 4, PHP 5)

mail — Levelet küld

Leírás

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Levelet küld.

Paraméterek

to

A levél címzettje vagy címzettjei.

E string alakjának eleget kell tennie az » RFC 2822-nek. Néhány példa:

subject

A küldendő levél témamegjelölése.

Caution

Ez nem tartalmazhat újsor karaktert.

message

Az elküldendő üzenet.

A sorokat LF (\n) karakterekkel kell elválasztani. A sorok nem lehetnek 70 karakternél hosszabbak.

Caution

(csak Windows esetén) Amikor a PHP az SMTP szerverrel kommunikál, ha egy pont szerepel a sor elején, azt eltávolítja. Ennek kivédésére helyettesítsd ezeket a pontokat két ponttal.

<?php
$text 
str_replace("\n.""\n.."$text);
?>

additional_headers (elhagyható)

Az email fejlécek végéhez beillesztendő string.

Ezt tipikusan további fejlécek hozzáadására használják (From, Cc, Bcc). Több fejléc elválasztására a CRLF-t (\r\n) kell használni.

Note: Levélküldéskor a levélnek kell tartalmaznia egy From fejlécet. Ez beállítható az additional_headers paraméterrel, vagy megadható egy alapértelmezés a php.ini-ben.
Ha ezt nem teszed meg, akkor ehhez hasonló üzenetet fogsz kapni: Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing.

Note: Ha az üzenetek nem érkeznek meg, próbálj meg csak LF-et (\n) használni. Egyes gyenge minőségű Unix levéltovábbítók a LF karaktereket CRLF karakerekpárokkal helyettesítik (amely dupla CR előfordulásokhoz vezet, ha CRLF használata esetén). Ezt csak vészmegoldásként szabad használni, mivel nem felel meg az » RFC 2822-nek.

additional_parameters (elhagyható)

Az additional_parameters paraméterrel adhatunk át további paramétereket a sendmail_path-al konfigurált levélküldő programnak. Ezzel például a levél mellé a feladó 'borítékot' is küldhet a sendmail-t használva, a sendmail -f paraméterével.

Szükség lehet a webszervert futtató felhasználót sendmail beállításai közé felvenni, hogy a levelekbe ne kerüljenek X-Warning fejlécek, ha ezzel a módszerrel küldesz 'borítékot' a levél mellé. Sendmail esetén ez a fájl: /etc/mail/trusted-users.

Visszatérési értékek

TRUE-val tér vissza, ha levelet sikeresen átvette továbbításra, máskülönben FALSE-szal.

Az, hogy átvette továbbításra a levelet, NEM jelenti azt, hogy a levél ténylegesen kézbesítve lesz a kívánt célba.

Változások naplója

Változat Leírás
4.3.0 (csak Windows esetében) Minden fejléc (mint pl. From, Cc, Bcc és Date) támogatott, és nincsenek megkülönböztetve a kis- és nagybetűk. (Mivel a felhasználó által megadott fejléceket először nem az MTA értelmezi, hanem a PHP, a PHP < 4.3 csak a Cc fejlécet támogatta és különbséget tett a kis- és nagybetűk között).
4.2.3 Az additional_parameters paraméter safe_mode-ban nem engedélyezett, használata esetén a mail() függvény figyelmeztető üzenetet ad, és FALSE-szal tér vissza.
4.0.5 A paraméterlista bővült az additional_parameters -el.

Példák

Example#1 Levél küldése.

A mail() használata egyszerű levélküldéshez:

<?php
// Az üzenet
$uzenet "1. sor\n2. sor\n3. sor";

// Ha létezhet 70 karakternél hosszabb sor, használjuk a wordwrap() függvény
$uzenet wordwrap($uzenet70);

// Küldés
mail('[email protected]''Tárgy'$uzenet);
?>

Example#2 Levél küldése további fejlécekkel.

Alapvető fejlécek hozzáadása, a MUA informálása a From és a Reply-To címekről:

<?php
$cimzett  
'[email protected]';
$targy    'the subject';
$uzenet   'hello';
$fejlecek 'From: [email protected]"\r\n" .
    
'Reply-To: [email protected]"\r\n" .
    
'X-Mailer: PHP/' phpversion();

mail($cimzett$targy$uzenet$fejlecek);
?>

Example#3 Üzenet küldése további parancssori paraméterrel.

Az additional_parameters paraméterrel adhatunk át további paramétereket a sendmail_path-al konfigurált levélküldő programnak.

<?php
mail
('[email protected]''targy''az uzenet'null,
   
'[email protected]');
?>

Example#4 HTML email küldése

A mail() függvénnyel lehetséges HTML email-ek küldése is.

<?php
// több címzett
$cimzett  '[email protected]', '// figyelj a vesszőre
$cimzett .= '[email protected]';

// tárgy
$targy 'Augusztusi Születésnapi Emlékeztető';

// üzenet
$uzenet '
<html>
<head>
  <title>Augusztusi Születésnapi Emlékeztető</title>
</head>
<body>
  <p>Itt van az augusztusi születésnapok listája!</p>
  <table>
   <tr>
    <th>Személy</th><th>Év</th><th>Hónap</th><th>Nap</th>
   </tr>
   <tr>
    <td>Jocó</td><td>1970</td><td>augusztus</td><td>3.</td>
   </tr>
   <tr>
    <td>Saci</td><td>1973</td><td>augusztus</td><td>17.</td>
   </tr>
  </table>
</body>
</html>
'
;

// HTML levél küldése esetén, a Content-type fejlécet be kell állítani
$fejlecek  'MIME-Version: 1.0' "\r\n";
$fejlecek .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";

// további fejlécek
$fejlecek .= 'To: Mary <[email protected]>, Kelly <[email protected]>' "\r\n";
$fejlecek .= 'From: Birthday Reminder <[email protected]>' "\r\n";
$fejlecek .= 'Cc: [email protected]"\r\n";
$fejlecek .= 'Bcc: [email protected]"\r\n";

// küldés
mail($cimzett$targy$uzenet$fejlecek);
?>

Note: Ha HTML vagy más összetett levelet szeretnél küldeni, a » PEAR::Mail nevű PEAR csomag használata ajánlott.

Megjegyzések

Note: A mail() Windows-os implementációja sokban különbözik az Unix-ostól. Előszöris nem használ helyi binárist az üzenetek létrehozásához, közvetlenül socket-eken dolgozik, ami azt jelenti, hogy egy MTA-ra van szükség, amely egy hálózati socket-en figyel (ami természetesen lehet a localhost-on vagy egy távoli gépen).
Másodszor, a From:, Cc:, Bcc: és Date:-hez hasonló fejléceket nem az MTA interpretálja először, hanem a PHP.
Harmadszor, a to paraméter nem lehet "Valami <[email protected]>" alakban. A mail parancs nem biztos, hogy jól értelmezi ezt, miközben az MTA-val beszél.s

Note: Csatolmányokkal ellátott vagy speciális tertalmú (pl. HTML) email-ek is küldhetők ezzel a függvénnyel. Ezt MIME kódolással lehet elérni - lásd: » Zend cikk vagy » PEAR Mime osztályok.

Note: Jó tudni, hogy a mail() függvény nem alkalmas ciklusban nagymennyiségű email-ek küldésére, mivel minden egyes levél esetén megnyit majd bezár egy SMTP socket-et, ami nem hatékony.
Nagymennyiségű email-ek küldésével kapcsolatban tanulmányozd a » PEAR::Mail, és a » PEAR::Mail_Queue csomagot.

Note: Az alábbi RFC-k hasznosak lehetnek: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049, és » RFC 2822.