fix mail
This commit is contained in:
@@ -412,11 +412,115 @@ function mark_token_as_used($token) {
|
||||
* @return bool True se inviata, false altrimenti
|
||||
*/
|
||||
function send_email($to, $subject, $message) {
|
||||
$headers = "MIME-Version: 1.0" . "\r\n";
|
||||
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
|
||||
$headers .= "From: " . MAIL_FROM_NAME . " <" . MAIL_FROM . ">" . "\r\n";
|
||||
|
||||
return mail($to, $subject, $message, $headers);
|
||||
if (USE_SMTP) {
|
||||
return send_smtp_email($to, $subject, $message);
|
||||
} else {
|
||||
// Fallback a mail() PHP nativo
|
||||
$headers = "MIME-Version: 1.0" . "\r\n";
|
||||
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
|
||||
$headers .= "From: " . MAIL_FROM_NAME . " <" . MAIL_FROM . ">" . "\r\n";
|
||||
|
||||
return mail($to, $subject, $message, $headers);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Invia email tramite SMTP (Gmail)
|
||||
*
|
||||
* @param string $to Email destinatario
|
||||
* @param string $subject Oggetto email
|
||||
* @param string $message Corpo email (HTML)
|
||||
* @return bool True se inviata, false altrimenti
|
||||
*/
|
||||
function send_smtp_email($to, $subject, $message) {
|
||||
try {
|
||||
// Connessione al server SMTP
|
||||
$smtp = fsockopen(SMTP_HOST, SMTP_PORT, $errno, $errstr, 30);
|
||||
|
||||
if (!$smtp) {
|
||||
error_log("SMTP Error: Impossibile connettersi a " . SMTP_HOST . ":" . SMTP_PORT);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Funzione helper per leggere risposta
|
||||
$read = function() use ($smtp) {
|
||||
return fgets($smtp, 515);
|
||||
};
|
||||
|
||||
// Funzione helper per inviare comando
|
||||
$send = function($cmd) use ($smtp) {
|
||||
fputs($smtp, $cmd . "\r\n");
|
||||
};
|
||||
|
||||
// Leggi il banner di benvenuto
|
||||
$read();
|
||||
|
||||
// Inizia handshake SMTP
|
||||
$send("EHLO " . SMTP_HOST);
|
||||
$read();
|
||||
|
||||
// Inizia TLS se richiesto
|
||||
if (SMTP_ENCRYPTION === 'tls') {
|
||||
$send("STARTTLS");
|
||||
$read();
|
||||
stream_socket_enable_crypto($smtp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
|
||||
|
||||
$send("EHLO " . SMTP_HOST);
|
||||
$read();
|
||||
}
|
||||
|
||||
// Autenticazione
|
||||
$send("AUTH LOGIN");
|
||||
$read();
|
||||
|
||||
$send(base64_encode(SMTP_USERNAME));
|
||||
$read();
|
||||
|
||||
$send(base64_encode(SMTP_PASSWORD));
|
||||
$response = $read();
|
||||
|
||||
// Verifica autenticazione
|
||||
if (strpos($response, '235') === false) {
|
||||
error_log("SMTP Error: Autenticazione fallita - " . $response);
|
||||
fclose($smtp);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Imposta mittente
|
||||
$send("MAIL FROM: <" . MAIL_FROM . ">");
|
||||
$read();
|
||||
|
||||
// Imposta destinatario
|
||||
$send("RCPT TO: <" . $to . ">");
|
||||
$read();
|
||||
|
||||
// Inizia corpo messaggio
|
||||
$send("DATA");
|
||||
$read();
|
||||
|
||||
// Costruisci headers
|
||||
$headers = "From: " . MAIL_FROM_NAME . " <" . MAIL_FROM . ">\r\n";
|
||||
$headers .= "To: <" . $to . ">\r\n";
|
||||
$headers .= "Subject: " . $subject . "\r\n";
|
||||
$headers .= "MIME-Version: 1.0\r\n";
|
||||
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
|
||||
$headers .= "Date: " . date('r') . "\r\n";
|
||||
|
||||
// Invia email
|
||||
$send($headers . "\r\n" . $message . "\r\n.");
|
||||
$read();
|
||||
|
||||
// Chiudi connessione
|
||||
$send("QUIT");
|
||||
$read();
|
||||
fclose($smtp);
|
||||
|
||||
return true;
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log("SMTP Error: " . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user