[PHP] Jak wysłać maila?

Artykuł został zaktualizowany 16/05/2020.

Chcesz lub musisz wysłać maila z poziomu skryptu PHP, ale nie wiesz jak to zrobić? Jeśli tak to ten artykuł jest właśnie dla Ciebie. Do wysyłania wiadomości e-mail z poziomu PHP służy klasa PHPMailer lub funkcja mail.

Wysyłanie maila przy użyciu PHPMailer

PHPMailer to klasa stworzona do wysyłania wiadomości e-mail poprzez serwer pocztowy. PHPMailer pobierzesz tu.
Przykład:

<?php

require 'PHPMailerAutoload.php';

$recipient = 'adresat@example.com';
$subject = 'Temat wiadomości';
$message = 'To jest przykładowa wiadomość.';

$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->CharSet = PHPMailer::CHARSET_UTF8;
$mail->setFrom('support@example.com', 'Support');
$mail->addAddress($recipient);
$mail->Subject = $subject;
$mail->Body = $message;

if($mail->send()) {

echo 'Wiadomość została wysłana.';

}

else {

echo 'Wiadomość nie została wysłana.';

}

Wysyłanie maila przy użyciu funkcji mail

Przykładowa wysyłka maila z użyciem funkcji mail może wyglądać tak:

mail('adresat@example.com', 'Temat', 'Wiadomość');
Jednak nas ta prowizoryczna wysyłka nie zadowala, ponieważ chcemy wysyłać wiadomości z polskimi znakami diakrytycznymi w temacie i nagłówkach oraz wiadomości formatowane kodem HTML. W związku z tym poznajmy nieco funkcję mail. Funkcja ta przyjmuje trzy argumenty wymagane oraz dwa opcjonalne. Argumentami wymaganymi są adresat, temat oraz wiadomość. Argumenty opcjonalne to dodatkowe nagłówki oraz dodatkowe parametry. Nas interesują tylko cztery pierwsze argumenty, czyli: adresat, temat, wiadomość i dodatkowe nagłówki. Rozbudujmy zatem powyższy przykład tak, aby umożliwiał wysyłanie wiadomości także w formacie HTML oraz zawierał nagłówek 'From'.

Pierwsze co musimy zrobić to utworzyć sobie własną funkcje np. send_mail, która będzie zawierała w sobie między innymi wywołanie funkcji mail. Następnie musimy utworzyć wymagane nagłówki. Na początku tworzymy nagłówek, który będzie dodawany do każdej wiadomości, czyli nagłówek 'From'.

$headers = 'From: =?UTF-8?B?' . base64_encode($name) . '?= <' . $address . '>' . "\r\n";

Zapewne zauważyłeś, że w miejscu nazwy nadawcy dodajemy dość nietypowy ciąg znaków wraz z funkcją base64_encode. Dzięki takiemu zapisowi nie będzie problemów z polskimi literami w nazwie nadawcy oraz temacie. Argument temat także przekazujemy zakodowany base64.

W następnym kroku tworzymy kolejne nagłówki, ale będą one dodawane do wiadomości tylko wtedy, gdy wybierzemy jej format jako HTML:

$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

Teraz już tylko wywołujemy wbudowaną w PHP funkcję mail i gotowe. Oczywiście wywołujemy ją w warunku, by nasza funkcja zwróciła wartość adekwatną do wartości zwróconej przez funkcję mail:

if(mail($recipient, '=?UTF-8?B?' . base64_encode($subject) . '?=', $message, $headers))
                        
{
                        
   
 return true;
   
}
   
else
   
{
   
 return false;
   
}

Kompletna funkcja powinna wyglądać tak:

function send($name, $address, $recipient, $subject, $message, $format = 'text')
                
{
                
 $headers = 'From: =?UTF-8?B?' . base64_encode($name) . '?= <' . $address . '>' . "\r\n";
                        
 if($format == 'html')
                        
 {
                         
  $headers .= 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
   
 }
                        
 if(mail($recipient, '=?UTF-8?B?' . base64_encode($subject) . '?=', $message, $headers))
                        
 {
                        
   
  return true;
   
 }
   
 else
   
 {
   
  return false;
   
 }
  
}

Parametry dla funkcji send_mail:

  • (string) $name - nazwa nadawcy (dla nagłówka From)
  • (string) $address - adres e-mail nadawcy (dla nagłówka From)
  • (string) $recipient - adres e-mail odbiorcy
  • (string) $subject - temat wiadomości
  • (string) $message - treść wiadomości
  • (string) $format - format wiadomości (domyślnie czysty tekst)

Komentarze

Popular

[HTML] Jak wstawić obrazek?

[PHP|HTML] Odświeżenie strony

[HTML] Jak wycentrować stronę?