PDA

View Full Version : [Html / PHP] Spedire mail


Qwertid
03-06-2006, 16:49
Ciao a tutti!
Dovrei creare una piccola pagina web dove poter spedire un form appena compilato a vari indirizzi mail.. Premetto che sono alle prime armi.. Come posso fare? Avevo pensato al comando mail() ma non riesce a funzionare.. Vi posto quello che ho scritto (forse sono tutte vongole :( )

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Prova Mail</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?PHP
$destinatario="Indirizzo@libero.it";
$soggetto="Ciao";
$corpo_messaggio"="Tutto bene? Come va il lavoro?";
$tuaemail="Indirizzo1@virgilio.it";
if (mail ($destinatario, $soggetto, $corpo_messaggio, "From: $tuaemail"))
echo "Messaggio inviato con successo a $destinatario";
else
echo "Errore. Nessun messaggio inviato.";
?>

</body>
</html>


Perchè non funziona? Thanks :)

P.S: Nell'esempio non c'è un form bensì un testo statico da inviare

TixXio
03-06-2006, 17:22
Magari il php.ini è configurato male.... dai un occhio lì

Qwertid
03-06-2006, 17:26
Quello è configurato bene perchè l'ho potuto verificare creando un database con mysql e interfacciandolo con php. Tu reputi che la sintassi che ho usato e, soprattutto la logica usata, sia coerente?

TixXio
03-06-2006, 17:35
A me pare di si... il parser php non ti da' errore?

Qwertid
03-06-2006, 17:46
Quando apro la pagina web corrispondente al codice scritto semplicemente esce bianca.. Come se quell'if lì non lo considerasse proprio :(

cionci
03-06-2006, 18:41
Prova a guardare il sorgente della pagina bianca che vedi con il browser...noti niente di strano ?

Qwertid
03-06-2006, 18:56
Ho allegato il sorgente... Forse un occhio più esperto del mio nota prima le cose :) L'ho scritto con dreamweaver e non so, ho come l'impressione che l'inghippo stia in qualche " ... Ma solo impressione è la mia..

cionci
03-06-2006, 19:02
Ma quello è sorgente della pgina bianca così come la vedi dal browser ?!?!?! Non voglio il sorgente della pgina, l'hai già incollato sopra, ma quello che ti visualizza il browser per capire se Apache interpreta o meno il php...

Qwertid
03-06-2006, 19:04
Sisi è proprio quello! Ho aperto la pagina e in firefox ho fatto "Visualizza-----> Sorgente pagina" e quello che ho allegato prima è il risultato

P.S: Ho qualche novità! Ho fatto un parse php come mi è stato consigliato prima e ho scoperto che l'errore era alla linea 12, una " in più.. Rifacendo il parser mi dice che è un problema di SMTP.. Eppure altervista supporta PHP, non dovrebbe funzionare tranquillamente visto che io faccio l'upload su tal sito?

cionci
03-06-2006, 19:05
Non è che devi mettere PHP in minuscolo ?!!? ;)

Qwertid
03-06-2006, 19:13
Ho risposto nel post precedente nel PS ;) Intanto grazie a tutti per l'aiuto prezioso

Qwertid
03-06-2006, 19:42
Ho risolto qualcosa.. Ecco la versione quasi finale del codice (che mi fa spedire la mail soltanto in locale, facendo cioè php Mail.htm - da altervista nisba):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Prova Mail</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?PHP


ini_set("SMTP", "smtp.virgilio.it");

ini_set("sendmail_from", "xxxx@virgilio.it");

$destinatario="xxxx@libero.it";
$soggetto="Ciao";
$corpo_messaggio="Tutto bene? Come va il lavoro?";
$tuaemail="xxxx@virgilio.it";
if (mail ($destinatario, $soggetto, $corpo_messaggio))
echo "Messaggio inviato con successo a $destinatario";
else
echo "Errore. Nessun messaggio inviato.";
?>

</body>
</html>


Adesso io vorrei inviare ad un indirizzo mail un form come corpo del testo (ho una pagina già scritta in html dove questo form è riempito), quindi credo che dovrei soltanto aggiungere al fondo della pagina questo codice e sostituire la parte corrispondente del corpo del messaggio, giusto?

cionci
04-06-2006, 08:14
Da altervista devi usare un server SMTP di altervista...che non so se c'è... Oppure uno dei tanti Open Realy che si trovano in giro...

gaglioppo
04-06-2006, 08:44
mi intrometto per informare che io uso altervista per il mio sito dove si mandano email in automatico e non ho avuto bisogno di settare il php.ini, mentre, natruralmente, in locale, ho dovuto mettere l'SMTP del mio gestore.

naturalmente con altervista si avrà accodato al messaggio una riga di riferimento ad altervista, nulla di fastidioso, cmq

a presto

cionci
04-06-2006, 08:53
mi intrometto per informare che io uso altervista per il mio sito dove si mandano email in automatico e non ho avuto bisogno di settare il php.ini, mentre, natruralmente ho dovuto mettere l'SMTP del mio gestore.
Qual'è il tuo gestore ?

Solitamente i grossi provider non permettono l'utilizzo del server SMTP da un indirizzo ip (in questo caso quello di altervista) diverso dal range di IP assegnato a loro... Questo vuol dire che se hai una mail su virgilio e ti connetti con tiscali non potrai mandare una mail attraverso l'SMTP di virgilio.. Stessa cosa succede sul server di altervista...virgilio non riconosce l'indirizzo ip come proprio e non permette la spedizione...

Ci sono tecniche alternative che permettono l'utilizzo del server SMTP con qualsiasi ip (come ad esempio l'autenticazione SMTP o l'autenticazione POP3 prima dell'invio SMTP), ma devono essere implementate dal provider e spesso non lo sono... Da notare che nessuna di queste tecniche è supportata dal mailer di php...

Qwertid
04-06-2006, 09:40
Alla fine non so come sono riuscito a far funzionare la cosa con altervista... Praticamente ho tolto l'istruzione dove definivo l'SMTP e magicamente è andato tutto a buon fine! :) (La fortuna del principiante)

Ma adesso ho un altro problema: dovrei utilizzare questo script php appena creato all'interno di una pagina web già esistente. In tale pagina vi è un questionario da riempire e io vorrei spedirlo via mail con il metodo php appena creato.. Come posso fare? Finora la pagina web in questione aveva un

ACTION FORM='sito internet' METHOD=POST name=appName return=DoSubmit() o qualcosa del genere... Dove devo andare a modificare? Se è necessario posso postare il codice. Ringrazio per l'attenzione ;)

cionci
04-06-2006, 09:52
Praticamente ho tolto l'istruzione dove definivo l'SMTP e magicamente è andato tutto a buon fine! :) (La fortuna del principiante)
Sì...giusto... C'è già il corretto SMTP impostato nel loro php.ini...

Qwertid
04-06-2006, 10:13
Ma adesso per me comincia la parte davvero dura...

Qwertid
04-06-2006, 11:38
Sto veramente impazzendo... Non riesco a trovare una soluzione, eppure la cosa dovrebbe essere semplice :cry:

Praticamente la pagina web dove devo inserire lo script della posta è un questionario che fa inserire vari testi. Alla fine c'è:

<FORM ACTION="http://cgi12.igl.net/ts/tdappfinish.php" METHOD=POST name=appForm onSubmit="return doSubmit();">

dove (nel caso servisse sapere le funzioni come sono implementate):

function doSubmit() {
disableButtons(document.appForm);
return true;
}


function disableButtons(objForm) {
var i;
for(i=0; i<objForm.elements.length; i++) {
if(objForm.elements[i].type == "submit" || objForm.elements[i].type == "button") {
objForm.elements[i].disabled = true;
}
}
}



Adesso io vorrei che oltre a fare questo, tale pagina spedisse quella famosa mail con tutti i campi riempiti nella pagina. Mi spiegate, per favore, come fare? Grazie :)

cionci
04-06-2006, 11:51
Non ha niente a che vedere con phishing vero ?

Qwertid
04-06-2006, 11:52
No no è una lega di canasta, sezione staff ;)

cionci
04-06-2006, 11:58
Allora...il metodo più semplice è fare una pagina di intermezzo fra l'action del form e la form...
In pratica metti un pagina sul tuo sito che riceve i dati della form (la metti come Action della form), li registra, invia la mail e poi fa un redirect verso la pagina orginale (con l'istruzione header di php)...

Non ho mai provato a fare un redirect su una form, ma in teoria dovrebbe funzionare...

Qwertid
04-06-2006, 12:02
Penso di aver capito che non è cosa mia... :p

Io avevo pensato ad una cosa del genere (non sono esperto, non so nemmeno se è possibile farlo), copio un frammento del codice come esempio:



<table width=75% background="rosso_04.gif" id="table3">
<tr>
<td style="font-size: 10px; color">
<div align="center">
<font color="#FFFFFF" face="Book Antiqua" size="3"><b>Da quanto giochi in questa lega (indica
i mesi)?:
</b>
</font><font size="3" color="#FFFFFF" face="Verdana">
<input name=tdmonths size=4 MAXLENGTH=3 style="font-weight: 700"></font><font color="#FFFFFF" face="Book Antiqua" size="3"><b>
<?php
$istruzione .="Tempo: ";
$istruzione .=$tdmonths;
$istruzione .="\n";
?>

Ho inserito io quell' $istruzione così che mi creasse una stringa che contenesse tutti i dati del form.. E tale stringa poi sarebbe diventata corpo del messaggio.. Il problema è che la mail la spedisce pure ma $tdmonths ad esempio è sempre bianco (credo sia logico perchè il form non è stato inviato).. E' una strada percorribile questa? Si accede in questo modo ai vari campi del form? Non mi interessa tanto la forma, ma piuttosto che funzioni... Un metodo artigianale come questo ne è la prova .. :D

cionci
04-06-2006, 12:23
Certo che è sempre bianco...perchè la pagina php viene generata dal server ed in quel momento è ovvio che tu non possa recuperare in alcun modo il valore di quel campo (perchè verrà compilato dal browser)...

gaglioppo
04-06-2006, 14:04
Qual'è il tuo gestore ?

Solitamente i grossi provider non permettono l'utilizzo del server SMTP da un indirizzo ip (in questo caso quello di altervista) diverso dal range di IP assegnato a loro... Questo vuol dire che se hai una mail su virgilio e ti connetti con tiscali non potrai mandare una mail attraverso l'SMTP di virgilio.. Stessa cosa succede sul server di altervista...virgilio non riconosce l'indirizzo ip come proprio e non permette la spedizione...

Ci sono tecniche alternative che permettono l'utilizzo del server SMTP con qualsiasi ip (come ad esempio l'autenticazione SMTP o l'autenticazione POP3 prima dell'invio SMTP), ma devono essere implementate dal provider e spesso non lo sono... Da notare che nessuna di queste tecniche è supportata dal mailer di php...

scusami, ma dopo qualceh minuto ho corretto il post, mi ero mangiato due parole:

"in locale": ebbene, in locale (mi collego con il gprs della wind) metto SMTP = localhost nel php.ini

mentre per quanto riguarda altervista non mi sono mai posto il problema perchè tutti quelli che si connettono riescono a mandare l'email (...a loro insaputa :-D). Scusami, ma altro nn so a riguardo.

a presto

Qwertid
04-06-2006, 21:33
Allora...il metodo più semplice è fare una pagina di intermezzo fra l'action del form e la form...
In pratica metti un pagina sul tuo sito che riceve i dati della form (la metti come Action della form), li registra, invia la mail e poi fa un redirect verso la pagina orginale (con l'istruzione header di php)...

Non ho mai provato a fare un redirect su una form, ma in teoria dovrebbe funzionare...

Il primo problema l'ho risolto.. Ovvero ho scritto uno script Posta.php che manda l'e-mail come si deve.. Ma adesso io dovrei anche fare l'action su quella determinata pagina web... Come posso fare? Grazie

Qwertid
04-06-2006, 22:33
Anche provando con header non risolvo granchè poichè (sempre se l'ho usata bene) vengo reindirizzato al sito contenente il form ma i campi si sono cancellati.. E anche se non si cancellassero, come farei ad usare lo stesso pulsante per inviarlo al link del nuovo FORM ACTION?

Qwertid
05-06-2006, 09:12
Anche provando con header non risolvo granchè poichè (sempre se l'ho usata bene) vengo reindirizzato al sito contenente il form ma i campi si sono cancellati.. E anche se non si cancellassero, come farei ad usare lo stesso pulsante per inviarlo al link del nuovo FORM ACTION?

Sempre in riferimento a questa richiesta avevo pensato anche ad una soluzione (non so quanto fattibile): ovvero dopo aver fatto l'Action e mandato il sito sul mio script php, si potrebbe reindirizzare lo script verso una pagina clone alla prima che faccia il secondo Action automaticamente? Solo come faccio a trasportare i dati inseriti nel form dallo script alla pagina clone? Grazie

roy20021
05-06-2006, 19:58
Scusa ma hai provato ad utilizzare le variabili globali $HTTP_GET[nome] e $HTTP_POST[nome] ?

Quando si fa una action da un form si crea una cella che ha per nome l'id del campo per esempio "nVolte" nel quale è contenuto il suo valore.

Esempio:
<form action="mio.php" method=get>
<input type="text" name="nVolte">
<input type="submit" value="VAI">
</form>

quando si invia il form si avrà la variabile $HTTP_GET["nVolte"] che conterrà il valore della textbox.

Non so se è questo il problema ma... tentar non nuoce :stordita:

Fammi sapere, ciao :cool:

Qwertid
05-06-2006, 22:24
Questo l'ho risolto per fortuna.. Adesso il mio problema sta nel fatto che io al form originale dovrei far fare due action.. Ti riassumo la situazione:

Allora questo form deve essere spedito sia a quello script php che ho creato io e fa quel che deve, sia ad un'altra pagina web. Adesso c'è un problema... I form possono avere al massimo una sola action.. Quindi mi trovo in difficoltà perchè le mie action sono 2 (lo script e la pagina web). Adesso io avevo pensato ad una cosa del genere:

Pagina dove c'è il form------(Premendo Invia il Form, mando la pagina allo script)---->Script.php

Modificare Script.php in modo che mi ricopi automaticamente i dati inseriti nel form in una pagina in tutto e per tutto uguale alla pagina da dove ho spedito il form (una pagina clone) e fare in modo che tale pagina clone abbia come action la pagina web a cui il form deve essere spedito...

Spero di essere stato chiaro

Grazie dell'aiuto :)

cionci
06-06-2006, 09:27
Ti ripeto...probabilmente con un redirect te la cavi con una sola riga di codice...

header("Location: http://linkformoriginale");

Non devi avere fatto alcun output prima di questa riga (quindi la tua pagina non deve contenere codice html)... Ti salvi i tuoi dati e poi fai il redirect...non sono sicuro che funzioni, ma è da provare...

Qwertid
06-06-2006, 18:15
Scusami però se io faccio con la funzione header, in che modo passerò i dati alla pagina del form originale visto che non glieli passo mediante POST o GET? Grazie :)

cionci
06-06-2006, 18:20
Ripeto, è una cosa che non ho provato, ma glieli dovrebbe passare il browser, fai una prova...

Qwertid
06-06-2006, 19:00
Purtroppo ho provato ma non passa alcun argomento con la sola chiamata ad header... :cry:

cionci
06-06-2006, 19:11
Allora ti conviene passare ad usare JavaScript client side...

Prendi la tua pagina della form e su onSubmit raccogli tutti i campi della form e compini una richiesta GET ad un altra pagina php che ti deve raccogliere i dati...
Questa pagina php la vai ad aprire tramite JavaScript in un frame di dimensione 0 o in un popup...

Qwertid
06-06-2006, 19:25
Grazie dell'aiuto principalmente :p
Per il resto credo di non essere così in alto da riuscire in questa cosa :D Immagino proprio che abbandonerò l'impresa :D