Debian server e funzione php mail()

3 risposte [Ultimo contenuto]
Ritratto di abe001
abe001
(Junior)
Offline
Junior
Iscritto: 30/07/2017
Messaggi: 27

Ciao, ho un server web fornito da un provider con debian 10 gestito via plesk e via ssh.
Fino ad ora e grazie alla rete ho risolto la maggior parte dei problemi ma ora ne ho uno al quale non so dare una spiegazione.
Ho implementato su un sottodominio uno script php che riceve via ajax un indirizzo mail dato dall'utente al quale deve inviare una mail.
La funzione che uso è mail() con il seguente codice:

  $to = $_POST['forTmp1'];
    $subject = "Contattare Abe";
    $txt = "Grazie dela fiducia!\nInserisci il seguente codice per contattarmi:$s";
    $headers = "From: noreply@abesplace.eu";
    $headers .= "Return-Path: The Sender <noreply@abesplace.eu>\r\n";
    $headers .= "Reply-To: The Sender <noreply@abesplace.eu>\r\n";
    $headers .= "Organization: Abe's Place\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=utf-8\r\n";
    $headers .= "X-Priority: 3\r\n";
    $headers .= "X-Mailer: PHP". phpversion() ."\r\n" ;
    mail($to,$subject,$txt,$headers);

Il server però non sempre invia la mail e non capisco per quale motivazione, infatti con alcuni indirizzi funziona con altri no.
Indirizzi anche nello stesso dominio (es gmail.com).

Mi aiuterste? Grazie

L'unica alternativa alla memoria sono le periferiche di input output https://abe001.wordpress.com/

Ritratto di thegreentux
thegreentux
(Newbie)
Offline
Newbie
Iscritto: 10/06/2012
Messaggi: 5

Ciao,
la prima cosa che mi viene in mente è verificare che i parametri siano giusti.

Quindi magari per prima cosa prova a mandare una mail un tuo indirizzo senza header aggiuntivi (a parte il From).

$headers = "From: noreply@abesplace.eu";
mail("mioindirizzo@daqualcheparte.com", "TEST", "Messaggio di prova", $headers);

Se funziona prova a verificare che l'indirizzo letto sia corretto: deve essere compatibile con RFC 2822.
Documentazione funzione mail

Altra prova è usare un array di stringhe come invece di una stringa singola.
vedo che hai usato "\r\n" come separatore (che è corretto) ma la documentazione dice:
"If messages are not received, try using a LF (\n) only. Some Unix mail transfer agents (most notably » qmail) replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with » RFC 2822."

Spero possa essere utile.

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1515

Inviare mail in quel modo, oggigiorno, credo sia una pratica non particolarmente sana (nel senso della propria sanità mentale Angel ).

La deliverability su email fornite da utenti è una faccenda tutt'altro che banale ed il server di posta deve essere configurato come un gioiello, perfettamente tirato a lucido e costantemente monitorato.

Io preferisco appoggiarmi a servizi esterni specializzati: mailgun è il mio preferito.
[ https://www.mailgun.com ] non costa molto, api e documentazione chiara per tutti i linguaggi e una bella dashboard.

Sendgrid è un'alternativa [ https://sendgrid.com ], a me piace meno ma ha un piano completamente gratis fino a 100 mail / giorno.

Altrimenti devi diventare cintura nera di Postfix! Cool

Ritratto di abe001
abe001
(Junior)
Offline
Junior
Iscritto: 30/07/2017
Messaggi: 27

Grazie mille darò un occhio ai link postati.
Grazie

L'unica alternativa alla memoria sono le periferiche di input output https://abe001.wordpress.com/