Come ottengo il mittente corretto in PHP con mail()? SMTP
Se usa la funzione mail() di PHP, come mittente risulta nomeaccount@nomedominio.xx. Non è possibile modificarlo e ciò causa errori oppure fa sì che l'e-mail venga considerata spam.
La soluzione migliore è usare SMTP. In rete si trovano molte classi PHP gratuite per farlo. In questo modo l'e-mail viene inviata via SMTP e il mittente può essere impostato facilmente.
Un'opzione molto usata è PHPMailer
Inoltre è possibile inviare e-mail direttamente via SMTP con PEAR Mail. È particolarmente utile per moduli o script personalizzati.
https://pear.php.net/package/Mail
https://pear.php.net/package/Net_SMTP
https://pear.php.net/package/Auth_SASL
Esempio: inviare un'e-mail SMTP con PEAR
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
// Caricare PEAR Mail
require_once 'Mail.php';
// Impostazioni SMTP
$smtp_host = 'ssl://mail.server.tld';
$smtp_port = 465;
$smtp_user = 'user@domein.nl';
$smtp_pass = 'password';
// Dati dell'e-mail
$to = 'destinatario@domein.nl';
$from = 'user@domein.nl';
$subject = 'Messaggio di prova';
$body = 'Questa è una e-mail di prova inviata via SMTP.';
$reply = 'user@domein.nl';
// Headers
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject,
'Reply-To' => $reply
);
// Oggetto SMTP
$smtp = Mail::factory('smtp', array(
'host' => $smtp_host,
'port' => $smtp_port,
'auth' => true,
'username' => $smtp_user,
'password' => $smtp_pass
));
// Inviare l'e-mail
$result = $smtp->send($to, $headers, $body);
if (PEAR::isError($result)):
echo $result->getMessage();
else:
echo 'E-mail inviata correttamente';
endif;
