Newsgroup: it.comp.www.php
Titolo: inviare un'email

$to = ...
 
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: 
webm...@example.com
" . "\r\n" .
"CC: 
somebo...@example.com
";
 
var_dump(
mail($to,$subject,$txt,$headers)
);
 
 
$subject = 'the subject';
$message = 'hello';
$headers = 'From: 
webm...@example.com
' . "\r\n" .
     'Reply-To: 
webm...@example.com
' . "\r\n" .
     'X-Mailer: PHP/' . phpversion();
 
var_dump(
mail($to, $subject, $message, $headers)
);
 
 
 
l'email non viene inviata, infatti viene restituito sempre false

 l'email non viene inviata, infatti viene restituito sempre false
 
Quando mail torna false, nella maggior parte dei casi significa che il 
mailserver è mail configurato. Se sei su Windows, controlla le 
impostazioni nel php.ini. Se sei sotto Linux controlla i log del 
mailserver.
 
Bye.
 

 mailserver.
 
Quali file esattamente?

 Quali file esattamente?
 
/var/log/*mail*
 
Bye.
 

 /var/log/*mail*
 
Sep 26 16:10:38 miopc postfix/postdrop[20320]: warning: unable to look 
up public/pickup: No such file or directory
 
 

 up public/pickup: No such file or directory
 
https://www.google.co.uk/search?client=ubuntu&channel=fs&q=warning%3A
 
+unable+to+look+uppublic%2Fpickup%3A+No+such+file+or
+directory&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=lJwHVtKaHuzH8gf_67qwBw
 
Primi due risultati:
 
https://dietbrand.eu/fix-for-postdrop-warning-unable-to-look-up-
 
publicpickup-no-such-file-or-directory/
 
 
http://www.databasically.com/2009/12/02/ubuntu-postfix-error-postdrop-
 
warning-unable-to-look-up-publicpickup-no-such-file-or-directory/
 
"Turns out that sendmail was previously installed and that was messing 
things up"
 
Bye.

, relay=none, delay=32, 
delays=1.8/0.01/30/0, dsn=4.4.1, status=deferred (connect to 
example.com
[93.184.216.34]:25: Connection timed out)
Sep 27 12:27:13 comex postfix/smtp[8998]: connect to 
mx3.hotmail.com
[65.54.188.72]:25: Connection timed out
Sep 27 12:27:13 comex postfix/smtp[8997]: connect to 
mx1.hotmail.com
[65.54.188.94]:25: Connection timed out
Sep 27 12:27:43 comex postfix/smtp[8998]: connect to 
mx4.hotmail.com
[65.54.188.94]:25: Connection timed out
Sep 27 12:27:44 comex postfix/smtp[8997]: connect to 
mx4.hotmail.com
[65.55.33.135]:25: Connection timed out
 

 
mx4.hotmail.com
[65.55.33.135]:25: Connection timed out
 
Sono tutti timeout.
O hai seri problemi di rete o hai malconfigurato il server.
 
In ogni caso un mailserver non si installa in 10 minuti con un apt-get 
install. O meglio, si può anche fare, ma devi sapere cosa fa e come 
funziona, soprattutto se hai intenzione di metterlo pubblico.
 
Postfix in Debian arriva abbastanza sicuro, ma io ti consiglio di leggere 
bene come funziona un SMTP prima di fare troppi danni.
 
Quando avrai finito di studiare, trova qualcuno che ti faccia relay e 
configura il tuo server per accettare connessioni solo da localhost e 
consegnare solo tramite quel relay.
 
Bye.
 

,
 
 >> relay=none, delay=32,
 
 >> delays=1.8/0.01/30/0, dsn=4.4.1, status=deferred (connect to
 
 >> 
example.com
[93.184.216.34]:25: Connection timed out)
 
 >> Sep 27 12:27:13 comex postfix/smtp[8998]: connect to
 
 >> 
mx3.hotmail.com
[65.54.188.72]:25: Connection timed out Sep 27 12:27:13
 
 >> comex postfix/smtp[8997]: connect to 
mx1.hotmail.com
[65.54.188.94]:25:
 
 >> Connection timed out Sep 27 12:27:43 comex postfix/smtp[8998]: connect
 
 >> to 
mx4.hotmail.com
[65.54.188.94]:25: Connection timed out Sep 27
 
 >> 12:27:44 comex postfix/smtp[8997]: connect to
 
 >> 
mx4.hotmail.com
[65.55.33.135]:25: Connection timed out
 
 >
 
 > Sono tutti timeout.
 
 > O hai seri problemi di rete o hai malconfigurato il server.
 
 >
 
 
A questo punto credo ci sia da studiare
 
 > In ogni caso un mailserver non si installa in 10 minuti con un apt-get
 
 > install. O meglio, si può anche fare, ma devi sapere cosa fa e come
 
 > funziona, soprattutto se hai intenzione di metterlo pubblico.
 
 >
 
 
come sopra
 
 > Postfix in Debian arriva abbastanza sicuro, ma io ti consiglio di leggere
 
 > bene come funziona un SMTP prima di fare troppi danni.
 
 >
 
 > Quando avrai finito di studiare, trova qualcuno che ti faccia relay e
 
 > configura il tuo server per accettare connessioni solo da localhost e
 
 > consegnare solo tramite quel relay.
 
 
 
Come sopra.
Eppure qualche anno fa (sotto windows) ho mandato in esecuzione uno 
script simile a quello che ho presentato all'inizio, e come per magia 
l'email è arrivata: non ho configurato niente, non ho installato niente, 
insomma non ho fatto niente di niente.
Era tutto già installato/configurato?
Oppure è stato merito della versione dell'interprete php di allora che 
faceva tutto da se?
Si collegava all'smtp del mio provider (alice) e spediva l'email, senza 
bisogno di programmucoli/driver intermediari, boh :-|
 
Ho fatto la stessa prova adesso (in windows7), ma come per ubuntu, la 
faccenda non sembra più funzionare.
 
Passano gli anni e tutto si complica :-|

 faccenda non sembra più funzionare.
 
Molto probabilmente alice (o quello che hai adesso) ha stretto i cordoni 
per evitare spam.
Quasi sicuramente devi spedire con un mittente @
alice.it
, o magari devi 
passare username e password per usare il loro relay.
 
La posta è uno dei protocolli (o meglio, insieme di protocolli) più 
complicati di tutto Internet, soprattutto adesso che ci sono decine di 
tecniche antispam di cui tenere conto.
 
Bye.

 l'email non viene inviata, infatti viene restituito sempre false
 
Un consiglio?
Non configurare nulla sulla tua macchina, fai una classe che gestisce
l'invio di mail e che chiama mail() sul server (dove è tutto già configurato
per te dal sysadmin) e file_put_contents() in locale.
 
Se sei su linux esiste anche un vecchio trucco: puoi anche chiamare sempre
la funzione mail(), e siccome PHP chiama sempre l'applicativo "sendmail",
puoi creare un file chiamato così (di solito quindi /usr/bin/sendmail, con
permessi d'esecuzione) con dentro qualcosa tipo:
#!/usr/bin/php
<?php
$input = file_get_contents('php://stdin');
$filename = /* quello che è */;
file_put_contents($filename, $input);
 
Guadagni in salute e in tempo di debug.
 
Ciao!

 Guadagni in salute e in tempo di debug.
 
Questo script salva l'email su un file?
Ma a che serve?
 


 
Serve a fare le tue prove in locale.
 
Sulla tua macchina di sviluppo non devi mica inviare email al mondo, devi
solo controllare che quello che mandi alla mail() funzioni come ti aspetti.
Quando metterai il tuo codice sul server di produzione tutto il sistema di
invio mail sarà già settato per te.
 
Che senso ha configurarsi tutto un server di posta sulla macchina di
sviluppo? :/
 
Ciao!


 
Adesso che l'hai detto è chiaro :)
Un ottimo sistema per catturare l'input.
Ma si può cambiare l'applicazione?
Se ad esempio volessi usare /usr/sbin/mio_sender_test.sh?
 


puoi cambiare la variabile "sendmail_path" nel php.ini (o, se il tuo PHP gira
come modulo, sovrascriverla nella configurazione del webserver).
 
Ciao!


ho provato ad impostare /tmp/test.sh, ma va sempre a cercare 
/usr/sbin/sendmail
 


Strano, dovrebbe andare: prova un phpinfo() e vedi se la variabile è presa
correttamente.
 
Ciao!


la variabile è impostata su /tmp/test.sh, ma l'applicazione dice
sh: 1: /usr/sbin/sendmail: not found
 
Ma c'è da diventare cretini?


Vedrai che sarà una piccolissima scemenza da qualche parte, è sempre così
che si perdono le ore! :D
 
Ciao!


si, ma dov'è questa scemenza?


innanzitutto in php esiste una funzione tipo get_mailer_path()?