Jak w PHP uzyskać właściwego nadawcę przy użyciu mail()? SMTP
Przy korzystaniu z funkcji mail() w PHP nadawcą jest nazwakonta@domena.xx. Nie można tego zmienić, co będzie powodować błędy lub sprawi, że wiadomość zostanie uznana za spam.
Najlepiej korzystać z SMTP. W internecie można znaleźć wiele darmowych klas PHP do tego celu. Wtedy poczta jest wysyłana przez SMTP, a nadawcę można łatwo określić.
Często używaną opcją jest PHPMailer
Można też wysyłać pocztę bezpośrednio przez SMTP za pomocą PEAR Mail. Przydaje się to zwłaszcza w formularzach lub skryptach tworzonych na zamówienie.
https://pear.php.net/package/Mail
https://pear.php.net/package/Net_SMTP
https://pear.php.net/package/Auth_SASL
Przykład: wysyłanie poczty przez SMTP z PEAR
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
// Załaduj PEAR Mail
require_once 'Mail.php';
// Ustawienia SMTP
$smtp_host = 'ssl://mail.server.tld';
$smtp_port = 465;
$smtp_user = 'user@domena.pl';
$smtp_pass = 'haslo';
// Dane wiadomości
$to = 'odbiorca@domena.pl';
$from = 'user@domena.pl';
$subject = 'Wiadomość testowa';
$body = 'To jest testowa wiadomość wysłana przez SMTP.';
$reply = 'user@domena.pl';
// Nagłówki
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject,
'Reply-To' => $reply
);
// Obiekt SMTP
$smtp = Mail::factory('smtp', array(
'host' => $smtp_host,
'port' => $smtp_port,
'auth' => true,
'username' => $smtp_user,
'password' => $smtp_pass
));
// Wyślij wiadomość
$result = $smtp->send($to, $headers, $body);
if (PEAR::isError($result)):
echo $result->getMessage();
else:
echo 'Wiadomość e-mail została wysłana';
endif;
