Mail in php da testo a html

  • Creatore Discussione Creatore Discussione IImanuII
  • Data di inizio Data di inizio
Il problema era lì. Ho corretto il controllo (poi l'ho rimosso)

Il fatto è che adesso mi da un fatal error


Fatal error: Uncaught exception 'phpmailerException' with message 'Message body empty' in /percorso/class.phpmailer.php:615 Stack trace: #0 /percorso/class.phpmailer.php(587): PHPMailer->PreSend() #1 /percorso/invio.php(72): PHPMailer->Send() #2 {main} thrown in /percorso/class.phpmailer.php on line 615

Il codice è questo:
PHP:
if ($_POST['Submit'] == 'Invia')
{

//registro l'ip di chi invia la mail su un file php

$file = "logip.php"; 
$open = fopen($file, "a+"); 
$testo = 'Ip mittente: '.$_SERVER['REMOTE_ADDR']. ' - Destinatario: '.$_POST['emaildichiriceve']. ' - Ora accesso: ' . date("G:i:s Y/m/d") . "<br />\r\n"; 
$write = fwrite ($open, $testo); 
fclose($open); 

// Recupero il valore dei campi del form  
   
$fromname = $_POST['nomedichiinvia'];  
$fromemail = $_POST['maildichiinvia'];  
$destinatario = "mai@mail.io";   
$oggetto = $_POST['oggetto'];   
$messaggio = $_POST['messaggio'];   
$verif_box = $_POST["verif_box"]; 


require_once 'class.phpmailer.php';  

$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch  

//settiamo su true il metodo che indica alla classe 
//il formato HTML
$mail->IsHTML(true);

// ...controlla tutte le variabili che non devono essere vuote per inviare la mail, e poi settale nulle se inviata o fai un redirect 

//vista la situazione non credo ti serva un try catch per gestire le eccezioni 
  $mail->AddReplyTo($destinatario, 'Tuo sito');  
  $mail->AddAddress($fromemail, $fromname); 
  $mail->SetFrom($destinatario, 'Tuo sito');  
  $mail->Subject = $oggetto;  
  $mail->AltBody = 'Usa un editor mail compatibile con l\'html per vedere il messaggio!'; // optional - MsgHTML will create an alternate automatically  
  $mail->MsgHTML = $messaggio;  
  //$mail->AddAttachment($_FILES['input']['tmp_name'],$_FILES['input']['name']);  //Ti serve uno o piu allegati? 

// controllo se il codice di verifica è corretto
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	$mail->Send();
	// cancello il cookie in modo che non può essere inviato nuovamente aggiornando la pagina
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
} else {

	header('Location: ops.php');
	
	exit;
	}

	
} //fine dell'invio
 
Ultima modifica:
Infatti sta li perchè nella condizione tu dici che se tutte quelle variabili non sono vuote fa un redirect sennò invia la mail, allora dovresti
invertirli cioè mettere i codici per l'invio della mail nella prima condizione e il redirect nell'else
 
Il problema era lì. Ho corretto il controllo (poi l'ho rimosso)

Il fatto è che adesso mi da un fatal error


Fatal error: Uncaught exception 'phpmailerException' with message 'Message body empty' in /percorso/class.phpmailer.php:615 Stack trace: #0 /percorso/class.phpmailer.php(587): PHPMailer->PreSend() #1 /percorso/invio.php(72): PHPMailer->Send() #2 {main} thrown in /percorso/class.phpmailer.php on line 615

Il codice è questo:
PHP:
if ($_POST['Submit'] == 'Invia')
{

//registro l'ip di chi invia la mail su un file php

$file = "logip.php"; 
$open = fopen($file, "a+"); 
$testo = 'Ip mittente: '.$_SERVER['REMOTE_ADDR']. ' - Destinatario: '.$_POST['emaildichiriceve']. ' - Ora accesso: ' . date("G:i:s Y/m/d") . "<br />\r\n"; 
$write = fwrite ($open, $testo); 
fclose($open); 

// Recupero il valore dei campi del form  
   
$fromname = $_POST['nomedichiinvia'];  
$fromemail = $_POST['maildichiinvia'];  
$destinatario = "mai@mail.io";   
$oggetto = $_POST['oggetto'];   
$messaggio = $_POST['messaggio'];   
$verif_box = $_POST["verif_box"]; 


require_once 'class.phpmailer.php';  

$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch  

//settiamo su true il metodo che indica alla classe 
//il formato HTML
$mail->IsHTML(true);

// ...controlla tutte le variabili che non devono essere vuote per inviare la mail, e poi settale nulle se inviata o fai un redirect 

//vista la situazione non credo ti serva un try catch per gestire le eccezioni 
  $mail->AddReplyTo($destinatario, 'Tuo sito');  
  $mail->AddAddress($fromemail, $fromname); 
  $mail->SetFrom($destinatario, 'Tuo sito');  
  $mail->Subject = $oggetto;  
  $mail->AltBody = 'Usa un editor mail compatibile con l\'html per vedere il messaggio!'; // optional - MsgHTML will create an alternate automatically  
  $mail->MsgHTML = $messaggio;  
  //$mail->AddAttachment($_FILES['input']['tmp_name'],$_FILES['input']['name']);  //Ti serve uno o piu allegati? 

// controllo se il codice di verifica è corretto
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	$mail->Send();
	// cancello il cookie in modo che non può essere inviato nuovamente aggiornando la pagina
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
} else {

	header('Location: ops.php');
	
	exit;
	}

	
} //fine dell'invio
PHP:
$mail->MsgHTML = $messaggio;

Sostituiscilo con
PHP:
$mail->MsgHTML($messaggio);

E' una funzione non una variabile
 
PHP:
$mail->MsgHTML = $messaggio;

Sostituiscilo con
PHP:
$mail->MsgHTML($messaggio);

E' una funzione non una variabile

Ok sono un pirla :P

Comunque così la mail è stata spedita... Tuttavia (in spam) è arrivato questo messaggio

This is the mail system at host postlady.000webhost.com.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The mail system

<asd@io.io>: host mailer2.io[193.223.78.141] said: 550 5.1.1 <asd@io.io>...
User unknown (in reply to RCPT TO command)

asd@io.io è l'email di prova che ho inserito io, alla quale avrei dovuto rispondere...... Con questa mail mi è giunto un allegato che conteneva questo

HTML:
Return-Path: <miamail@yahoo.it>
Received: by postlady.000webhost.com ([000webhost.com Mail Server], from userid 99)
	id E64E2AA1A9; Tue,  3 Jul 2012 07:03:40 -0400 (EDT)
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on
	postlady.000webhost.com
X-Spam-Level: ****
X-Spam-Status: No, score=4.9 required=7.0 tests=FREEMAIL_FROM,HTML_MESSAGE,
	HTML_SHORT_CENTER,LOCALPART_IN_SUBJECT,MPART_ALT_DIFF,TVD_RCVD_SPACE_BRACKET
	autolearn=disabled version=3.3.2
Received: from srv45.000webhost.com (srv45.000webhost.com [31.170.160.109])
	by postlady.000webhost.com ([000webhost.com Mail Server]) with ESMTP id 7C906AA108
	for <asd@io.io>; Tue,  3 Jul 2012 07:03:40 -0400 (EDT)
Received: by srv45.000webhost.com (Postfix, from userid 2089413)
	id 6126516F660; Tue,  3 Jul 2012 07:03:40 -0400 (EDT)
To: ad <asd@io.io>
Subject: asd
X-PHP-Script: sito.com/percorso/invio.php for 151.77.181.194
Date: Tue, 3 Jul 2012 07:03:40 -0400
From: Tuo sito <miamail@yahoo.it>
Reply-To: Tuo sito <miamail@yahoo.it>
Message-ID: <2e653b3df16042309e984f40e260c002@orkestra.herobo.com>
X-Priority: 3
X-Mailer: PHPMailer 5.2.1 (http://code.google.com/a/apache-extras.org/p/phpmailer/)
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="b1_2e653b3df16042309e984f40e260c002"

--b1_2e653b3df16042309e984f40e260c002
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Usa un editor mail compatibile con l'html per vedere il messaggio!


--b1_2e653b3df16042309e984f40e260c002
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

<center>asd</center>



--b1_2e653b3df16042309e984f40e260c002--

Ma che è???
Vedi l'allegato 1289
 
La mail è arrivata correttamente? Forse c'è un qualche errore nel header(strano), hai provato a rispondere all'e-mail?
 
La mail è arrivata correttamente? Forse c'è un qualche errore nel header(strano), hai provato a rispondere all'e-mail?

Guarda l'immagine che ti ho allegato, la mail non mi arriva proprio. Mi arriva un messaggio d'errore dell'host.

Non è che il problema sta nell'allegato?

Nel form c'è il campo per l'allegato ma nel php non ho messo nulla, nemmeno un richiamo non è che inviando l'allegato vuoto e non gestendolo nel php si genera quell'errore?

Nel form ho inserito l'allegato così

<!-- inserisco l'allegato della mail -->
<label>Allega file</label><input type="file" name="allegato" id="allegato" size="32" />

Ma nel php non ho alcun riferimento
 
Ultima modifica:
Hai provato senza allegato? Il file allegato esiste?

Ho rimosso l'allegato e tutto funziona a dovere... :\ mi ero dimenticato uno strascico del vecchio codice nel php. :P

Ma adesso sorge spontaneo.... come gestisco l'allegato?

Il php ora è pulito c'è solo da inserirlo.

Se il form è questo:

HTML:
                        <!-- inserisco l'allegato della mail -->		
			<label>Allega file</label><input type="file" name="allegato" id="allegato" size="32" />

Il php dovrò modificarlo così?

PHP:
  $mail->AltBody = 'Usa un editor mail compatibile con l\'html per vedere il messaggio!'; // optional  
  $mail->MsgHTML($messaggio);    
  $mail->AddAttachment($_POST['allegato']); //codice aggiunto pr l'allegato

E se ne voglio più d'uno?

Il codice da te postato prima era questo

PHP:
for($i=1;$i<=3;$i++) if(!empty($_POST['allegato'.$i]))$mail->AddAttachment($_POST['allegato'.$i]);

Mi spieghi il funzionamento?
 
Il codice che ho postato prima era un esempio, in questo caso dovresti uppare il file ($_FILES['allegato']) e copiare il path
di esso per poi metterlo nella funzione AddAttachment() del phpmailer
 
Il codice che ho postato prima era un esempio, in questo caso dovresti uppare il file ($_FILES['allegato']) e copiare il path
di esso per poi metterlo nella funzione AddAttachment() del phpmailer

Ho risolto così

PHP:
$mail->AddAttachment($_FILES['allegato']['tmp_name'],$_FILES['allegato']['name']); // Valorizzo le variabili relative all'allegato

Se volessi mettere più allegati? Come risolvo?
 
Ho risolto così

PHP:
$mail->AddAttachment($_FILES['allegato']['tmp_name'],$_FILES['allegato']['name']); // Valorizzo le variabili relative all'allegato

Se volessi mettere più allegati? Come risolvo?

Inoltre quando invio un'immagine nel messaggio non la invia ma mi appare una mail bianca, come mai?
 
Per mettere piu allegati aggiungi degli attachment

Ti ringrazio, :) avevo risolto. A volte impazzisco posto e poi risolvo un momento dopo :faraone:

per l'immagine forse metti il path locale e per questo è bianca (nel body)

Mh... cioè? Il problema dell'immagine bianca non sussiste con l'allegato ma con la mail. Cioè se nella textarea scrivo
Codice:
<center>manu</center>
allora mi arriva una mail con il testo centrato.

Ma se ad es scrivo

HTML:
<html>
<body>

<img src="http://www.w3schools.com/tags/smiley.gif" alt="Smiley face" width="42" height="42"> ciao

</body>
</html>

L'immagine non arriva ed esce scritto solo ciao, a volte manco quello.
 
Ecco l'errore che si presenta quando provo a inserire una faccina nel messaggio......

Fatal error: Uncaught exception 'phpmailerException' with message 'Could not access file: ' in /percorso/class.phpmailer.php:1513 Stack trace: #0 /percorso/invio.php(64): PHPMailer->AddAttachment(NULL, NULL) #1 {main} thrown in /percorso/class.phpmailer.php on line 1513

:/
 
Ecco l'errore che si presenta quando provo a inserire una faccina nel messaggio......

Fatal error: Uncaught exception 'phpmailerException' with message 'Could not access file: ' in /percorso/class.phpmailer.php:1513 Stack trace: #0 /percorso/invio.php(64): PHPMailer->AddAttachment(NULL, NULL) #1 {main} thrown in /percorso/class.phpmailer.php on line 1513

:/

Scusa non una faccina ma un allegato. Non lo fa sempre è questo il bello.... lo fa solo a volte......
 
Riepilogo un momento.

I problemi sono due:

1. L'allegato: vorrei far si che l'allegato non sia un campo obbligatorio. Se invio la mail con l'allegato spedisce senza problemi. Se invece non lo inserisco esce questo:
HTML:
Fatal error: Uncaught exception 'phpmailerException' with message 'Could not access file: ' in /percorso/class.phpmailer.php:1513 Stack trace: #0 /percorso/invio.php(64): PHPMailer->AddAttachment(NULL, NULL) #1 {main} thrown in /percorso/class.phpmailer.php on line 1513

2. L'html della mail: prende solo la formattazione del testo (manco il colore) e non fa visualizzare il resto dell'html

Non riesco a risolvere......
 
Ultima modifica:
Riepilogo un momento.

I problemi sono due:

1. L'allegato: vorrei far si che l'allegato non sia un campo obbligatorio. Se invio la mail con l'allegato spedisce senza problemi. Se invece non lo inserisco esce questo:
HTML:
Fatal error: Uncaught exception 'phpmailerException' with message 'Could not access file: ' in /percorso/class.phpmailer.php:1513 Stack trace: #0 /percorso/invio.php(64): PHPMailer->AddAttachment(NULL, NULL) #1 {main} thrown in /percorso/class.phpmailer.php on line 1513

Risolto il problema dell'allegato, PARE e ripeto PARE che non dia più tale errore se al posto di
PHP:
$mail = new PHPMailer(true);
lo richiamo così
PHP:
$mail = new PHPMailer();

Rimane come problema:

2. L'html della mail: prende solo la formattazione del testo (manco il colore) e non fa visualizzare il resto dell'html

Non riesco a risolvere......
 
Potrebbe essere dovuto all'editor e-mail che viene usato, hai provato con altri provider e-mail che offrono editor diversi?
 
Potrebbe essere dovuto all'editor e-mail che viene usato, hai provato con altri provider e-mail che offrono editor diversi?

Ogni volta che posti tu, io risolvo XD

Adesso adesso ho visto qual'era il problema.

Il problema erano i magic quote, ho fatto in questo modo

PHP:
$msg = stripslashes($messaggio);
$mail->MsgHTML($msg);

E tutto vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......come deve andareeeeeee..... o per lo meno cosi dicònoooooo...... xD
 
Ogni volta che posti tu, io risolvo XD

Adesso adesso ho visto qual'era il problema.

Il problema erano i magic quote, ho fatto in questo modo

PHP:
$msg = stripslashes($messaggio);
$mail->MsgHTML($msg);

E tutto vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......come deve andareeeeeee..... o per lo meno cosi dicònoooooo...... xD
Meglio cosi, almeno hai piu soddisfazione poi :vampiro:
 

Discussioni simili