PDA

View Full Version : [php] invio email


Alecoaq
26-04-2006, 13:03
Vorrei inviare una mail automaticamente dal mio sito, però non ho la possibilità di modificare il php.ini, e di conseguenza non posso utilizzare il classico mail()


Esiste un modo per inviare ugualmente l'email, magari specificando un smtp.?

andbin
26-04-2006, 14:03
Vorrei inviare una mail automaticamente dal mio sito, però non ho la possibilità di modificare il php.ini, e di conseguenza non posso utilizzare il classico mail()Non è affatto necessario avere accesso al php.ini per poter utilizzare la funzione mail(). Puoi usarla tranquillamente!!! L'importante è che tra gli headers tu specifichi il "From".

Un esempio:
$headers = "To: Pippo <[email protected]>\r\n" .
"From: Pluto <[email protected]>\r\n";

mail ("[email protected]", "Hello Pippo", "Ciao da Pluto", $headers);

Alecoaq
26-04-2006, 17:29
[mail function]
SMTP=localhost
sendmail_from = [email protected]

quello che intendevo dire è che non posso mettere la function sendmail nel php.ini....

uhm.. con il codice che mi hai postato tu non va... [\r\n che vuol dire?]

aiuuuuuuuutoooooooooooooooooooooooooooooooo

andbin
26-04-2006, 17:56
[mail function]
SMTP=localhost
sendmail_from = [email protected]

quello che intendevo dire è che non posso mettere la function sendmail nel php.ini....In che senso ... non devi mettere niente di particolare. Ovviamente chi ha realmente accesso al php.ini si suppone che abbia configurato a dovere i parametri per la gestione della posta.

uhm.. con il codice che mi hai postato tu non va... [\r\n che vuol dire?]A me funziona (ho messo delle email reali, ovviamente ;) ). \r\n indicano carriage-return + line-feed. Sono obbligatori per separare le righe negli headers.

Alecoaq
26-04-2006, 18:13
In che senso ... non devi mettere niente di particolare. Ovviamente chi ha realmente accesso al php.ini si suppone che abbia configurato a dovere i parametri per la gestione della posta.



quello che volevo dire io è proprio che i parametri per l'invio non sono settati. E volevo sapere se è possibile inviare lo stesso email, magari appoggiandosi ad un smtp [insomma, tipo outlook]

mynos79
26-04-2006, 19:49
Con asp e asp.net si possono inserire i vari parametri, tra cui il server smtp, direttamente da codice senza toccare il file di configurazione ... presumo che si possa pure in php (purtroppo lo conosco poco il php).

andbin
26-04-2006, 20:39
quello che volevo dire io è proprio che i parametri per l'invio non sono settati. E volevo sapere se è possibile inviare lo stesso email, magari appoggiandosi ad un smtp [insomma, tipo outlook]Ci sono 4 parametri di configurazione in PHP per la posta (riporto pari pari dal manuale del PHP):
Name Default Changeable
------------------------------------------------------------------------
SMTP "localhost" PHP_INI_ALL
smtp_port "25" PHP_INI_ALL (Available since PHP 4.3.0)
sendmail_from NULL PHP_INI_ALL
sendmail_path NULL PHP_INI_SYSTEM Il quarto parametro può essere impostato solo in php.ini o httpd.conf (siccome è dichiarato PHP_INI_SYSTEM) mentre per gli altri si può usare, ad esempio, la funzione ini_set.
<?php
ini_set ("SMTP", "xyz");
ini_set ("smtp_port", "99");
ini_set ("sendmail_from", "[email protected]");
?>

Alecoaq
27-04-2006, 01:25
mi son documentato meglio... allora:

io dal phpinfo() vedo:

SMTP localhost
smtp_port 25
sendmail_from [email protected]
sendmail_path /usr/sbin/sendmail -t -i

ho fatto un semplice scriptino di test, ma non riesco a farmi arrivare l'email in alcun modo!! lo scriptino che ho fatto io è:

<?php
mail("[email protected]", "Account attivato", "Account attivato", "From: <[email protected]>");
?>

ho provato anche con
<?php
$result= mail("[email protected]", "Web mail", "Messaggio");
if (result){echo "mail inviata con successo<br>";}
else {echo "mail non inviata<br>";}
echo "vediamo se funfa<br>";
echo "$result";
?>

ho come risultato 1, ma di email.. mai arrivate!! :mc:

andbin
27-04-2006, 10:03
ho fatto un semplice scriptino di test, ma non riesco a farmi arrivare l'email in alcun modo!! lo scriptino che ho fatto io è:

<?php
mail("[email protected]", "Account attivato", "Account attivato", "From: <[email protected]>");
?>

ho provato anche con
<?php
$result= mail("[email protected]", "Web mail", "Messaggio");
if (result){echo "mail inviata con successo<br>";}
else {echo "mail non inviata<br>";}
echo "vediamo se funfa<br>";
echo "$result";
?>

ho come risultato 1, ma di email.. mai arrivate!! :mc:Confermo che dovrebbe andare, nel senso che i tuoi script sono corretti.
A volte però ci possono essere problemi con filtri e antispam vari (di cui generalmente non si ha il controllo), motivo per cui è necessario inserire degli header validi e completi (in particolare, che io sappia, il Message-ID).
Prova questo codice:
<?php
$to = "[email protected]";
$from = "[email protected]";

$headers = "";
$headers .= "From: $from\r\n";
$headers .= "Message-ID: <" . md5(uniqid(time())) . "@{$_SERVER['SERVER_NAME']}>\r\n";

$ret = mail ($to, "Account attivato", "Account attivato", $headers);

if ($ret)
echo "OK";
else
echo "ERRORE";
?>Cambia ovviamente gli indirizzi. Poi dimmi se ti funziona o meno.

Alecoaq
27-04-2006, 22:16
Ecco. L'email viene inviata, ma Libero non la riceve, mentre gmail la mette direttamente come Spam :cry:

Questo è l'ultimo codice che ho provato:

$headers .= "From Staff <[email protected]>\r\n";
$headers .= "Message-ID: <" . md5(uniqid(time())) . "@{$_SERVER['ggame.it']}>\r\n";
$conferma= mail("[email protected]", "Web mail", "Messaggio", $headers);

è corretto? cioè.. {$_SERVER['ggame.it']} ho scritto bene qui ggame.it?
[ho provato anche a metterlo così "@ggame.it>\r\n", ma cmq appare nello spam]
[ho anche provato a lasciare {$_SERVER['SERVER_NAME']}.. che mi sembra la cosa corretta :D .. cmq nessun miglioramento]


Ah.. ho notato, che l'email che arriva nello spam ha come mittente: APACHE <[email protected]>

solo una delle tante ha come mittente Staff, ma non son riuscito a rifarlo :muro: , cmq anche questa è tra lo spam.

ah, poi esce From Staff <[email protected]>
Message-ID: <d686abc2d0c6d3b74b14dac7aae34b4b@>

Alecoaq
27-04-2006, 22:41
posto l'ultima versione del magagnoso script.. che nonostante gli sforzi viene considerata SPAM da gmail:

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: Staff <[email protected]>\r\n";
$headers .= "Reply-to: [email protected]\r\n";
$headers .= "Message-ID: <" . md5(uniqid(time())) . "@{$_SERVER['SERVER_NAME']}>\r\n";
$conferma= mail("[email protected]", "Web mail", "Messaggio", $headers);

in questo caso come mittente è Staff [forse per il reply to?..o forse prima era errato il codice di from, bho] e nell'intestazione dell'email non vedo il lungo codice.

Rubberick
27-04-2006, 22:50
Ciao =)

Non so se ti puo' essere utile, per mandare le emails in modo comodo e pratico puoi usare un'ottima lib orientata agli oggetti:

http://phpmailer.sourceforge.net/

Si chiama phpmailer... ci puoi fare praticamente tutto e non hai bisogno manco delle funzioni integrate di mail.. lavora coi socket direttamente =P

Alecoaq
27-04-2006, 23:26
ehm.. mi risulta complicatino.... :p

da quel che ho capito è anche necessario installare qualche cosa da installare nel php [cosa che non ho le autorizzazioni per fare]... :mc:

cionci
28-04-2006, 01:38
Praticamente tutti gli spazi free e la maggior parte di quelli a pagamento non permettono di usare i socket in php...

Alecoaq
28-04-2006, 12:31
^^ ah ecco, quindi è una questione che non si riguarda. :p


permane il mio problema: esiste un modo per non esser filtrati dagli antispam?

cionci
28-04-2006, 12:32
Come mai è staff@gmail ?
Mancano i ":" dopo From...

Alecoaq
28-04-2006, 15:38
ahh ecco, l'ultima versione dello scriptino è questa. [staff@gmail è scritto qui come esempio, in realtà è scritta la mia email]

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: Staff <[email protected]>\r\n";
$headers .= "Reply-to: [email protected]\r\n";
$headers .= "Message-ID: <" . md5(uniqid(time())) . "@{$_SERVER['SERVER_NAME']}>\r\n";
$conferma= mail("[email protected]", "Web mail", "Messaggio", $headers);


esiste un qualche modo per non farlo filtrare dagli antispam?