Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22099

Re: mail() fallisce solo se tutti i destinatari vengono respinti?

From Umberto Salsi <salsi@icosaedro.it>
Newsgroups it.comp.www.php
Subject Re: mail() fallisce solo se tutti i destinatari vengono respinti?
Date 2018-06-18 12:05 +0200
Organization Aioe.org NNTP Server
Message-ID <pg8051$1t1u$1@gioia.aioe.org> (permalink)
References <pfoa20$66j$1@gioia.aioe.org>

Show all headers | View raw


Umberto Salsi <salsi@icosaedro.it> wrote:

> Sto esplorando l'affidabilità di mail() per l'invio "massivo" a due o
> più destinatari. Sebbene il manuale non lo dica, sembra che:
> 
> 1. Non si può avere retroazione del motivo del fallimento.

Aggiornamenti sulla mia indagine:

Sembra che qualcuno sia riuscito ad ottenere il motivo del
fallimento di mail() andando a guardare l'ultimo errore generato con
error_get_last()['message']), ma non è chiaro il contesto di questi
casi; a me risulta invece che non viene mai settato, e neppure mail()
genera E_WARNING per cui non c'è nessun errore da gestire.

Ho scoperto che in realtà qualche retroazione si può ottenere sfruttando
il parametro opzionale di mail() che consente di impostare opzioni
custom. L'effetto di queste opzioni dipende dallo specifico processo
"sendmail" usato. Per esempio, con Exim e Sendmail si può mettere "-oep
-oeq -oi" per cui mail() ha sempre successo anche se alcuni destinatari
vengono respinti e anche se il messaggio è formalmente sbagliato (cioè
non rispetta il formato RFC822); in tali casi:

- l'errore viene loggato da sendmail nello stderr e quindi va a finire
nel log degli errori del server;

- il messaggio non viene inviato a nessun destinatario, neanche quelli
validi;

- nessun bounce viene generato.

Ne segue che il programma non ha più retroazione del fallimento, però
rimane una traccia permanente nel log file del server e si riducono i
fastidiosi bounce.

Per avere retroazione dell'errore a livello del programma bisogna per
forza usare direttamente il processo sendmail e catturarne lo stderr con
la triade popen(), fwrite() e pclose(), una cosa abbastanza acrobatica
che sto cercando di far fare a PHPMailer.

L'ultima possibilità è ricorrere direttamente al protocollo SMTP
perché solo questo dà il massimo controllo su quello che accade e
permette di saper quali destinatari sono stati accettati e quali no,
e sapere se alla fine della fiera il messaggio è stato accettato per
il recapito oppure no; anche questo sto cercando di curarlo in PHPMailer.

Spero che possa tornare utile a qualcuno.

Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  www.icosaedro.it

Back to it.comp.www.php | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

mail() fallisce solo se tutti i destinatari vengono respinti? Umberto Salsi <salsi@icosaedro.it> - 2018-06-12 13:16 +0200
  Re: mail() fallisce solo se tutti i destinatari vengono respinti? Alessandro Pellizzari <shuriken@amiran.it> - 2018-06-12 12:35 +0100
    Re: mail() fallisce solo se tutti i destinatari vengono respinti? Umberto Salsi <salsi@icosaedro.it> - 2018-06-13 11:24 +0200
  Re: mail() fallisce solo se tutti i destinatari vengono respinti? Umberto Salsi <salsi@icosaedro.it> - 2018-06-18 12:05 +0200

csiph-web