Salta al contenuto

PHP Warning: mail() has been disabled for security reasons

Pubblicato il Aggiornato il

In breve: il messaggio “PHP Warning: mail() has been disabled for security reasons” significa che lo script ha provato a usare la funzione PHP mail() , ma il server non consente di eseguirla. Non è un errore della casella del destinatario. Per un sito WordPress, la soluzione normalmente più affidabile è configurare l’invio autenticato tramite SMTP, senza tentare di riattivare la funzione dal sito.

Che cosa significa l’avviso

PHP può disabilitare funzioni interne mediante la direttiva disable_functions. Quando mail è inclusa nell’elenco, un’applicazione che la richiama direttamente non può usarla. Sulle versioni PHP moderne la funzione può anche risultare non definita, quindi il messaggio preciso cambia in base alla versione e al codice eseguito.

In WordPress, wp_mail() usa normalmente PHPMailer e, nella configurazione predefinita, si appoggia al sistema di posta locale. Un plugin SMTP modifica questo flusso e invia i messaggi verso un server SMTP autenticato.

Individuare il componente che invia

  1. Annota l’azione che produce l’errore: modulo contatti, reset password, ordine WooCommerce o script personalizzato.
  2. Leggi il percorso del file indicato nell’avviso o nel log PHP. Ti aiuta a identificare plugin, tema o applicazione interessata.
  3. Controlla se il componente usa direttamente mail() oppure la funzione WordPress wp_mail().
  4. Verifica se il sito possiede già un plugin SMTP e se la sua configurazione è ancora valida.

Non pubblicare sul Web un file phpinfo() per eseguire il controllo: può esporre dettagli sensibili della configurazione. Se ne crei uno per una diagnosi autorizzata, proteggilo e rimuovilo subito dopo.

Configurare un invio SMTP autenticato

Su WordPress installa o usa un plugin SMTP affidabile e configura un account autorizzato all’invio. Inserisci hostname, porta, cifratura, nome utente e password forniti per la casella o per il servizio SMTP scelto. Non ricavare questi valori da esempi trovati online.

Usa come mittente un indirizzo coerente con il dominio e con l’account autenticato. Questa scelta riduce errori di autorizzazione e rende più semplice allineare SPF, DKIM e DMARC. Se l’applicazione non è WordPress, cerca nelle sue impostazioni la modalità SMTP oppure usa la libreria di invio prevista dal progetto.

Conserva le credenziali fuori dal codice pubblico quando l’applicazione lo permette. Non inserirle in screenshot, log allegati al ticket o repository accessibili.

Come verificare il risultato

  1. Invia un messaggio di prova dalla funzione SMTP del plugin o dell’applicazione.
  2. Ripeti l’azione reale che prima generava l’avviso.
  3. Controlla sia la ricezione sia le cartelle Spam e Posta indesiderata.
  4. Se WordPress conferma l’invio ma il messaggio non arriva, consulta i log del plugin e gli strumenti di tracciamento email disponibili nel servizio.
  5. Verifica l’autenticazione del dominio con la guida Email Deliverability.

Un valore true restituito da wp_mail() indica soltanto che WordPress ha elaborato la richiesta senza rilevare un errore immediato; non garantisce che il destinatario abbia ricevuto il messaggio.

VPS o server amministrato autonomamente

Se amministri direttamente un VPS o un dedicato, verifica quale file di configurazione PHP viene caricato dal processo Web e se disable_functions è imposto a livello globale o dal pool PHP-FPM. Rimuovere una restrizione modifica la superficie di sicurezza del server: valuta l’applicazione, il sistema di posta locale e le policy di invio prima di intervenire.

Su hosting condiviso non tentare di aggirare una direttiva del server con ini_set(), .htaccess o copie locali di php.ini. La direttiva potrebbe non essere modificabile dall’account e il tentativo non risolve la configurazione di consegna.

Cosa non fare

  • non nascondere l’avviso con @mail(): l’invio continuerebbe a non funzionare;
  • non disattivare controlli di sicurezza senza conoscere il motivo della restrizione;
  • non usare porte, hostname o credenziali presi da una guida generica;
  • non confondere l’accettazione del messaggio da parte dell’applicazione con la consegna finale.

Quando contattare l’assistenza Xlogic

Apri un ticket se non conosci i parametri corretti del servizio, l’autenticazione SMTP fallisce oppure il messaggio viene accettato ma non consegnato. Indica dominio, applicazione, data e ora del test, mittente, destinatario e testo completo dell’errore. Non inviare la password della casella.

Guide Xlogic correlate

Domande frequenti

Posso riattivare mail() dal php.ini del mio account?

Non sempre. Se disable_functions è imposto dal server o dal pool PHP, l’account non può sovrascriverlo. Su hosting condiviso è preferibile usare SMTP autenticato; su un server amministrato autonomamente la modifica va valutata dall’amministratore.

Configurare SMTP elimina l’uso di mail()?

Sì, se il plugin o l’applicazione invia realmente attraverso una connessione SMTP. Dopo la configurazione esegui sia il test integrato sia l’azione reale che generava l’errore.

L’errore dipende dall’indirizzo del destinatario?

No. L’avviso viene generato prima della consegna perché PHP non può eseguire mail(). Un indirizzo destinatario errato produce invece un errore o un rifiuto successivo nel flusso di posta.

wp_mail() restituisce true: il messaggio è arrivato?

Non necessariamente. Significa che WordPress ha elaborato la richiesta senza un errore immediato, ma il messaggio può ancora essere rifiutato, filtrato o consegnato nella cartella Spam.

Fonti

PHP Warning: mail() has been disabled for security reasons ultima modifica: 2017-10-17T08:06:21+02:00 da Team tecnico Xlogic

Ti è piaciuto questo Post?