Podręcznik PHP
Poprzedni |  | Następny

# mail

(PHP 3, PHP 4 )

mail -- Wysyła e-maila

## Opis

bool mail ( string do, string temat, string treść [, string dodatkowe_nagłówki [, string dodatkowe_parametry]])

mail() automatycznie wysyła wiadomość określoną w `treść` do odbiorcy określonego w `do`. Można wysłać wiadomość do kilku odbiorców na raz, wypisując ich adresy po przecinku w argumencie `do`. Poprzez tę funkcję można też wysłać listy zawierające załączniki lub inne typy wiadomości. Jest to możliwe dzięki kodowaniu MIME - po więcej informacji, zajrzyj http://www.zend.com/zend/spotlight/sendmimeemailpart1.php lub Klasy Mime PEAR.

Zapoznanie się z poniższymi RFC może być przydatne: RFC 1896, RFC 2045, RFC 2046, RFC 2047, RFC 2048 i RFC 2049.

mail() zwraca `TRUE` jeśli e-mail został zaakceptowany przez przekaźnik pocztowy do wysłania lub `FALSE` w przeciwnym wypadku.

Ostrzeżenie
Implementacja funkcji mail() w systemie Windows różni się od implementacji w systemie Unix. Po pierwsze, funkcja nie używa lokalnych programów do komponowania wiadomości pocztowych, tylko operuje na połączeniach socketowych, co oznacza, że do działania potrzebny jest Agent Transferu Poczty (`MTA`), który nasłuchuje na odpowiednim porcie. (Agent może znajdować się zarówno na maszynie lokalnej, jak i zdalnej). Po drugie, nagłówki użytkownika, takie jak `From:`, `Cc:`, `Bcc:` oraz `Date:` nie są w pierwszej kolejności interpretowane przez `MTA`, gdyż wcześniej są parsowane przez `PHP`. `PHP` < 4.3 obsługiwał spośród wyżej wymienionych tylko nagłówek `Cc:` (wymagana była odpowiednia wielkość liter); natomiast `PHP` <= 4.3 obsługuje już wszystkie wyżej wymienione nagłówki i nie wymaga odpowiedniej wielkości liter.

Przykład 1. Wysyłanie e-maila
    mail("joecool@example.com", "Temat listu", "Linia 1\nLinia 2\nLinia 3");

Jeśli zostanie podany czwarty argument, będzie on dopisany na końcu nagłówka wiadomości. Ten argument wykorzystuje się do wstawienia dodatkowych nagłówków. Dodatkowe nagłówki rozdziela się znakiem powrotu karetki i nowego wiersza.

> Notatka: Aby rozdzielić nagłówki, trzeba użyć sekwencji `\r\n`, chociaż niektóre uniksowe agenty pocztowe obsługują także pojedynczy znak nowej linii (`\n`).

Przykład 2. Wysyłanie listu z dodatkowymi nagłówkami.
    mail("nobody@example.com", "temat", $wiadomosc,
         "From: webmaster@$SERVER_NAME\r\n"
        ."Reply-To: webmaster@$SERVER_NAME\r\n"
        ."X-Mailer: PHP/" . phpversion());

Argumentu `dodatkowe_parametry` używa się do przekazania dodatkowego paramteru do programu wysyłającego pocztę skonfigurowanego w dyrektywie `sendmail_path`. Używa się tego na przykład do ustawienia adresu zwrotnego koperty (envelope sender adress) przy wysyłaniu listu za pomocą sendmaila. Możesz być zmuszony dodać użytkownika jakim jest twój serwer www do listy zaufanych użytkowników w pliku konfiguracyjnym sendmaila, aby sendmail nie dodał nagłówka "X-warning" do wiadomości przy wysyłaniu koperty (envelope) tą metodą.

Przykład 3. Wysyłanie listu z dodatkowymi nagłówkami i przełącznikami.
    mail("nobody@example.com", "temat", $wiadomosc,
         "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVER_NAME");

> Notatka: Piąty argument funkcji mail() został dodany w PHP 4.0.5. Począwszy od PHP 4.2.3 argument ten jest zablokowany w trybie bezpiecznym. W przypadku próby użycia, funkcja mail() wygeneruje ostrzeżenie i zwróci `FALSE`.

Można tez użyć zwykłych operacji na łańcuchach znaków do tworzenia złożonych wiadomości e-mail.

Przykład 4. Wysyłanie złożonego e-maila.
    /* adresaci */
    $do  = "Marysia <marysia@example.com>" . ", " ; // zwróc uwagę na przecinek
    $do .= "Kasia <kasia@example.com>";

    /* temat */
    $temat = "Przypomnienie o urodzinach w Sierpniu";

    /* wiadomość */
    $wiadomosc = '
    <html>
    <head>
     <title>Przypomnienie o urodzinach w Sierpniu</title>
    </head>
    <body>
    <p>Te urodziny będziemy świętować w Sierpniu!</p>
    <table>
     <tr>
      <th>Osoba</th><th>Dzień</th><th>Miesiąc</th><th>Rok</th>
     </tr>
     <tr>
      <td>Jan</td><td>3.</td><td>Sierpnia</td><td>1970</td>
     </tr>
     <tr>
      <td>Szymon</td><td>17.</td><td>Sierpnia</td><td>1973</td>
     </tr>
    </table>
    </body>
    </html>
    ';

    /* Aby wysłać e-mail w formacie HTML, należy ustawić nagłówek Content-type. */
    $naglowki  = "MIME-Version: 1.0\r\n";
    $naglowki .= "Content-type: text/html; charset=iso-8859-1\r\n";

    /* dodatkowe nagłówki */
    $naglowki .= "From: Przypominacz o urodzinach <urodziny@example.com>\r\n";

    $naglowki .= "Cc: archiwum_mailingu@example.com\r\n";
    $naglowki .= "Bcc: kontrola_mailingu@example.com\r\n";

    /* a teraz wyślij */
    mail($do, $temat, $wiadomosc, $naglowki);

> Notatka: Upewnij się, że nie ma żadnych znaków nowej linii w argumencie `do` lub `temat`, gdyż w przeciwnym razie, e-mail może nie być wysłany poprawnie.

> Notatka: Argument `do` nie może być adresem w postaci "Ktośtam <someone@example.com>". Funkcja mail() nie przetworzy prawidłowo takiego adresu w czasie transakcji z Agentem Transferu Poczty (MTA).

Patrz także: imap_mail().

Poprzedni | Spis treści | Następny
ezmlm_hash | Początek rozdziału | mailparse functions