form con phpmailer

  • Creatore Discussione Creatore Discussione Kirsolo
  • Data di inizio Data di inizio

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Ciao,
vorrei spedire una mail da form, come servizio host ho "ar**a", mi potete aiutare con i dati?

io ho come al solito la seguente form:
PHP:
<form action="webo.php" method="POST" enctype="multipart/form-data"> 
   <p>
   <label for="nome">Nome(*)</label>
   <input type="text" name="nome" id="nome" /></p>
   <p>
   <label for="prezzo">prezzo</label>
   <input type="text" name="prezzo" id="prezzo" />€</p>
   <p>
   <label for="ins_mail">eMail *</label>
   <input type="text" name="ins_mail"  value="[email protected]" id="ins_mail" /></p>
   <p>
   <label for="privacy">Dichiaro di aver letto <a href="privacy.php">l'informativa sulla privacy</a></label>
   <input type="checkbox" name="privacy" class="chk" value="privacy"/>  
   </p>
   <p>
    <input type="file" name="files[]" id="files" size="40" multiple/> 
    <input type="submit" name="invia"/> 
  </p>
  <p> (*) campo obbligatorio</p>
 </form>

e in webo.php la phpmailer seguente:
PHP:
<?php
require "php_mailer/class.phpmailer.php";

//istanziamo la classe
$messaggio = new PHPmailer();
$messaggio->IsSMTP();
$messaggio->Host='smtp.aruba.it';

//definiamo le intestazioni e il corpo del messaggio
$messaggio->From='[email protected]';
$messaggio->AddAddress('[email protected]');
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject='Prova di email';
$messaggio->Body=stripslashes('Ciao!!!!');

//definiamo i comportamenti in caso di invio corretto 
//o di errore
if(!$messaggio->Send()){ 
  echo $messaggio->ErrorInfo; 
}else{ 
  echo 'Email inviata correttamente!';
}

//chiudiamo la connessione
$messaggio->SmtpClose();
unset($messaggio);

?>

cosa devo settare ulteriormente? anche username e psw dell'accesso ad "Ar**a" ?
$messaggio->Username = "username";
$messaggio->Password = "password";
 
se metto 2 mail mie, come scritto:
[email protected] a [email protected] , la mail viene spedita.

con l'host ho la mail: " [email protected] "

non riesco a far andare se imposto la mail di partenza [email protected], nonostante queste impostazioni:
PHP:
..
$messaggio = new PHPmailer();
$messaggio->IsSMTP();
$messaggio->Host='smtp.DOMINIO.it';
$messaggio->Username ="[email protected]"; //di solito la mail utilizzata
$messaggio->Password ='PSW'; //di solito la password della mail
$messaggio->SMTPAuth = true;
..

mi dice Email inviata correttamente, ma non la ricevo.Qualcuno può aiutarmi?
 
ciao
intanto da che ne so aruba non accetta (o accettava) l'invio di email dal server via smtp, quindi dovresti togliere
$messaggio->IsSMTP();
$messaggio->Host='smtp.aruba.it';
e
$messaggio->SmtpClose();
poi cosa intendi con "aiutare con i dati"?
poi vuoi inviare in formato html e a chi deve essere inviata l'email? da quello che vedo non a te o sbaglio?
 
Ultima modifica:
ciao
intanto da che ne so aruba non accetta (o accettava) l'invio di email dal server via smtp, quindi dovresti togliere
$messaggio->IsSMTP();
$messaggio->Host='smtp.aruba.it';
e
$messaggio->SmtpClose();
poi cosa intendi con "aiutare con i dati"?
poi vuoi inviare in formato html e a chi deve essere inviata l'email? da quello che vedo non a te o sbaglio?

si la vorrei inviare in formato html, la mail va inviata a [email protected].
 
ciao
se hai pazienza ti butto giu qualcosa.
però guarda che devi fare i soliti controlli dei dati inviati dal form.
sia sul testo che sui file allegati, corri il rischio che ti inviino 1000 file e qualcuno un bell exe.
intanto cerca nel forum in quanto, mi sembra, la'argomento è gia stato trettato
 
ciao
se hai pazienza ti butto giu qualcosa.
però guarda che devi fare i soliti controlli dei dati inviati dal form.
sia sul testo che sui file allegati, corri il rischio che ti inviino 1000 file e qualcuno un bell exe.
intanto cerca nel forum in quanto, mi sembra, la'argomento è gia stato trettato

Bhè i controlli li ho già, posso recuperare quelli, cambia soltanto che invece di inviarlo al database lo invia ad una mail. Giusto?
 
ciao
ecco alcune indicazioni
prova poi se non funzia posta quello che hai fatto
PHP:
<?php
//i vari controlli
require_once "phpmailler/class.phpmailer.php";//richiamo la classe
$messaggio = new PHPmailer();
//e la instanzio
$messaggio->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta
$messaggio->IsHTML(true); // invio l'email in formato HTML
$messaggio->FromName= $nome;//il nome che ti risulta dal form
$messaggio->Subject="oggetto dell'email";//o quanto ti risulta dal form se fai scrivere l'oggetto
$messaggio->From=$email;//l'email che ti risulta dal form
$messaggio->AddAddress("[email protected]");//destinatario
$messaggio->AddReplyTo($email,"");//l'email che ti risulta dal form
$messaggio->Body=$invio_il_testo;//prima devi impostare il testo con i tag html che ti servono
$messaggio->AltBody="il client non è impostato per ricevere il formato html";//non so se ti serve
if($allegare !=""){//qui dovrai ciclare gli allegati se sono più di uno con il solito foreach
	$messaggio->AddAttachment($allegare);
}
//fine preparazione del corpo dell'email e allegato
//invio l'email
if(!$messaggio->Send()){ //errore di trasmissione
  	$messaggio_OK_KO="errore di trasmissione, riprova più tardi";
}else{ //invio avvenuto
	$messaggio_OK_KO="grazie di avermi contattato, ti sarà risposto quanto prima";
}//fine if-else invio
//e gli avvisi
//....
?>

p.s.
perchè non fai tutto su una pagina?
 
ciao
ecco alcune indicazioni
prova poi se non funzia posta quello che hai fatto
PHP:
<?php
//i vari controlli
require_once "phpmailler/class.phpmailer.php";//richiamo la classe
$messaggio = new PHPmailer();
//e la instanzio
$messaggio->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta
$messaggio->IsHTML(true); // invio l'email in formato HTML
$messaggio->FromName= $nome;//il nome che ti risulta dal form
$messaggio->Subject="oggetto dell'email";//o quanto ti risulta dal form se fai scrivere l'oggetto
$messaggio->From=$email;//l'email che ti risulta dal form
$messaggio->AddAddress("[email protected]");//destinatario
$messaggio->AddReplyTo($email,"");//l'email che ti risulta dal form
$messaggio->Body=$invio_il_testo;//prima devi impostare il testo con i tag html che ti servono
$messaggio->AltBody="il client non è impostato per ricevere il formato html";//non so se ti serve
if($allegare !=""){//qui dovrai ciclare gli allegati se sono più di uno con il solito foreach
	$messaggio->AddAttachment($allegare);
}
//fine preparazione del corpo dell'email e allegato
//invio l'email
if(!$messaggio->Send()){ //errore di trasmissione
  	$messaggio_OK_KO="errore di trasmissione, riprova più tardi";
}else{ //invio avvenuto
	$messaggio_OK_KO="grazie di avermi contattato, ti sarà risposto quanto prima";
}//fine if-else invio
//e gli avvisi
//....
?>

p.s.
perchè non fai tutto su una pagina?

grazie, cmq prima di provare, funziona anche in locale? o solo in remoto?

il p.s. mi è piu comodo così, facendo delle prove questa non è la form originaria, quella originaria è piu grossa quindi molte piu righe di codice, praticamente mi va meglio così invece che scorrere centinaai di righe di codice =)
 
ciao
così funziona solo in remoto sul tuo dominio.
per farla funzionare in locale devi aggiungere
PHP:
<?php
//....
//per inviare da locale SMTP*** INIZIO*************************************************************
$messaggio->IsSMTP();  // send via SMTP
$messaggio->Host     = "smtp.fastwebnet.it"; // SMTP servers: o alice o tim o quello che usi con (es.) outlook
$messaggio->SMTPAuth = true;     // turn on SMTP authentication
$messaggio->Username = "tuo_username";  // SMTP username
$messaggio->Password = "tua_passord"; // SMTP password
//per inviare da locale SMTP *** FINE***************************************************************
//...
?>
due cose:
1) guarda che il server SMTP è quello che usi dal tuo pc (non aruba) e così la password e l'username
2) verifica che nella cartella phpmailler esista il file class.smtp.php, che non devi richiamare perche ci pensa phpmailler a richiamerselo in automatico se trova le istruzioni di cui sopra

dimenticavo: quando carichi in remoto toglile o commentale
 
Ultima modifica:
ciao
così funziona solo in remoto sul tuo dominio.
per farla funzionare in locale devi aggiungere
PHP:
<?php
//....
//per inviare da locale SMTP*** INIZIO*************************************************************
$messaggio->IsSMTP();  // send via SMTP
$messaggio->Host     = "smtp.fastwebnet.it"; // SMTP servers: o alice o tim o quello che usi con (es.) outlook
$messaggio->SMTPAuth = true;     // turn on SMTP authentication
$messaggio->Username = "tuo_username";  // SMTP username
$messaggio->Password = "tua_passord"; // SMTP password
//per inviare da locale SMTP *** FINE***************************************************************
//...
?>
due cose:
1) guarda che il server SMTP è quello che usi dal tuo pc (non aruba) e così la password e l'username
2) verifica che nella cartella phpmailler esista il file class.smtp.php, che non devi richiamare perche ci pensa phpmailler a richiamerselo in automatico se trova le istruzioni di cui sopra

dimenticavo: quando carichi in remoto toglile o commentale

ok provato direttamente con le impostazioni di prima in remoto, la mail funziona, però ho tolto la parte allegato.

mi spieghi meglio proprio questa parte?
PHP:
$messaggio->AltBody="il client non è impostato per ricevere il formato html";//non so se ti serve 
if($allegare !=""){//qui dovrai ciclare gli allegati se sono più di uno con il solito foreach 
    $messaggio->AddAttachment($allegare); 
} 
//fine preparazione del corpo dell'email e allegato

dovrei dichiarare $allegare prima del IF, in che modo?

devo rimettere tutto questo controllo prima dell'IF?
PHP:
if ($err==""){
    $ammessi=array('jpg','gif','png','bmp'); 
    $size=2097152; 
    $dir="images/"; 
    //metto questi due per vedere meglio la query 
    //if($_FILES['files']['name'][0]==""){    // solo se obbligatorio foto
      //  echo "non hai selezionato alcun file<br />"; 
    //}else{//inizio i controlli 
        foreach($_FILES['files']['name'] as $ch => $nome_file){ 
            $est=strtolower(pathinfo($nome_file, PATHINFO_EXTENSION)); 
            if (!in_array($est, $ammessi)) {//verifica estenzione 
                //se non ammessi elimino 
                unset($_FILES['files']['name'][$ch],$_FILES['files']['type'][$ch], $_FILES['files']['tmp_name'][$ch],$_FILES['files']['error'][$ch],$_FILES['files']['size'][$ch]); 
            }else{ 
                //verifico che sia rimasto qualcosa 
                if(count($_FILES['files']['name'])>0){ 
                    if($_FILES['files']['size'][$ch] >$size){ 
                        //verifico la grandezza se maggiore elimino 
                        unset($_FILES['files']['name'][$ch],$_FILES['files']['type'][$ch], $_FILES['files']['tmp_name'][$ch],$_FILES['files']['error'][$ch],$_FILES['files']['size'][$ch]); 
                    }else{ 
                        //riverifico che sia rimasto ancora qualcosa 
                        if(count($_FILES['files']['name'])>0){ 
                            //sposto nella cartella 
                            if(move_uploaded_file($_FILES['files']['tmp_name'][$ch],$dir.$_FILES['files']['name'][$ch])){ 
                                //file caricato quindi prendo il nome del file per il db 
                                $per_db[]=$_FILES['files']['name'][$ch]; 
                            }//fine if spostamento 
                        }//fine controllo grandezza 
                    }//fine secndo if rimasri 
                }//fine primo if rimasri 
            }//fine if ammessi 
        }//fine del foreach controlli 
}// fine if iniziale
 
ciao
intanto questo
PHP:
$messaggio->AltBody="il client non è impostato per ricevere il formato html";//non so se ti serve
si usa quando non si sa se il client di posta di chi riceve non è settato per ricevere le email in formato html, probabilmente il tuo si quindi inviando a te non ti dovrebbe servire.
è come per il db, soltanto che al posto dell'insert nel db fai l'invio dell'email.
aspetta poi che ti posto per gli allegati
 
ciao
intanto questo
PHP:
$messaggio->AltBody="il client non è impostato per ricevere il formato html";//non so se ti serve
si usa quando non si sa se il client di posta di chi riceve non è settato per ricevere le email in formato html, probabilmente il tuo si quindi inviando a te non ti dovrebbe servire.
è come per il db, soltanto che al posto dell'insert nel db fai l'invio dell'email.
aspetta poi che ti posto per gli allegati

Per ora va, aspettando il pezzo x gli allegati =)

cmq ti chiedo una cosa in remoto:
- se faccio 2 file, form.php e uno per il controllo della form, ad esempio action="upload.php" , mi va regolare
- invece se faccio tutto su un unico file , form.php e mettendo action='<?php echo $_SERVER['PHP_SELF'] ?>' , il browser (provato sia con firefox che con chrome) appena scrivo la pagina comincia a caricare e non si ferma più, quindi non potendo interagire
 
ciao
si puoi fare anche due pagine, ma se
invece se faccio tutto su un unico file , form.php e mettendo action='<?php echo $_SERVER['PHP_SELF'] ?>' , il browser (provato sia con firefox che con chrome) appena scrivo la pagina comincia a caricare e non si ferma più, quindi non potendo interagire
probabilmente sta sbagliando qualcosa, hai messo l'if isset subimit?
in giornata per il resto
 
QUOTE=borgo italia;141358]ciao
si puoi fare anche due pagine, ma se

probabilmente sta sbagliando qualcosa, hai messo l'if isset subimit?
in giornata per il resto[/QUOTE]
questo è
PHP:
<form id="form-login" action="controllo-login.php" method="post" enctype="multipart/form-data" >

<p class="p_psw">Effettua il login per inserire l'immobile</p> 

<p class="p_psw">Password<span class="gold"> *</span> 
<input class="psw_input" type="text" name="password"  />
<input id="button_login" type="submit"  value="login" name="login"/></p>
 
</form>
<?php
if(isset($_POST['login']) && $_POST['password'] == "xxxxxxxxx") { 
    echo include("si.php"); 
} else { 
	echo include("login.php"); 
}
?>
 
ciao
l'ultimo form che hai postato mi sembra che sia un form per il login, comunque schematicamente:
PHP:
<?php
if(isset($_POST['invia'])){
	//i controlli
	//poi se tttto ok
	//richiami phpmasiller
	//invii
	//e ritorni al form pulito
}else{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<!-- i vari campi di input..... -->
<input type="submit" name="invia"/> 
</form>
<?php
}
?>
 
ciao
se anche nella parte php del form hai chiamato i file da allegare $per_db[] potresti fare cosi

PHP:
<?php
//.....
if(is_array($per_db[])){//qui dovrai ciclare gli allegati se sono più di uno con il solito foreach 
    $conta=0;
	foreach($per_db as $ch => $allegare){
		if($conta > 3){//ho messo 3 per inviare al massimo 4 allegati
			break;//interrompi il ciclo e vai alinvio
		}else{
			$messaggio->AddAttachment($allegare);
			$conta++;
		}
	}
} 
//...
?>
prova e sappimi dire
 
ciao
l'ultimo form che hai postato mi sembra che sia un form per il login, comunque schematicamente:
PHP:
<?php
if(isset($_POST['invia'])){
	//i controlli
	//poi se tttto ok
	//richiami phpmasiller
	//invii
	//e ritorni al form pulito
}else{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<!-- i vari campi di input..... -->
<input type="submit" name="invia"/> 
</form>
<?php
}
?>
non confondere, quella del phpmailer è un'altra questione.
Questa della form del login che mi carica all'infinito è un altra, ma non capisco cmq cosa cè di sbagliato.
 

Discussioni simili