- Home
- Categorie
- Coding e Sistemistica
- PHP
- phpmailer e fckeditor
-
Non ho mai utilizzato fckeditor, ma credo sia un WYSIWYG Editor, cioè permette di scrivere in formato RTF.
In questo caso gli editor utilizzano un campo di testo per mostrare il messaggio effettivo e hanno un campo nascosto per "salvare" il formato html del messaggio.
La conversione viene fatta attraverso JS quando avviene una modifica nel campo di testo visibile dove l'utente modifica il messaggio (onclick, onkeydown, onchange, ecc.).
Forse nel tuo caso, il copia ed incolla del testo non provoca nessuna azione interpretata da JS e quindi il messaggio effettivo che viene spedito, cioè quello in formato html, rimane vuoto.
Prova ad utilizzare un browser diverso ed un debugger JS per vedere cosa avviene durante l'elaborazione.Ciao!
-
Non ho mai utilizzato fckeditor, ma credo sia un WYSIWYG Editor, cioè permette di scrivere in formato RTF.
In questo caso gli editor utilizzano un campo di testo per mostrare il messaggio effettivo e hanno un campo nascosto per "salvare" il formato html del messaggio.
La conversione viene fatta attraverso JS quando avviene una modifica nel campo di testo visibile dove l'utente modifica il messaggio (onclick, onkeydown, onchange, ecc.).
Forse nel tuo caso, il copia ed incolla del testo non provoca nessuna azione interpretata da JS e quindi il messaggio effettivo che viene spedito, cioè quello in formato html, rimane vuoto.
Prova ad utilizzare un browser diverso ed un debugger JS per vedere cosa avviene durante l'elaborazione.Ciao!
-
Grazie per la risposta..
il mio problema è proprio il fatto che la mail viene spedita perfettamente ma il contenuto non viene memorizzato nel database..
quindi il messaggio effettivo arriva a destinazione ma si "rifiuta" di andare a memorizzarsi nel db..
-
Quindi la mail contiene tutte le informazioni, compreso l'eventuale messaggio "incollato", mentre nel db non arriva niente ($mex e/o $mex2 sono vuoti)?
-
esatto, e nel db non memorizza nulla nemmeno gli altri campi input $ogg, $int, $data ecc.
-
Riesci a postare il codice per l'invio della mail oltre che per il db?
Mi sono accorto adesso, INSERT INTO lista_messaggi(data, ... è una parola chiave di SQL, prova a convertire la query in questo modo:
INSERT INTO lista_messaggi(
data
, ...` in linux = ALT GR + '
in windows = ALT + 96
-
Certo ecco il codice per l'invio (ho omesso una parte che si occupa di altro se vuoi te lo scrivo lo stesso):
<?php $db = @mysql_select_db($database_mailing,$mailing); $sql = "SELECT * FROM email"; $query = mysql_query ($sql, $mailing) or die ("impossibile eseguire la query"); while ($row=@mysql_fetch_array ($query)) { $mail = new PHPMailer(); $mail->From = "[email protected]"; $mail->FromName = "newsletter"; $mail->AddBCC($row['EMAIL']); $mail->IsHTML(true); //$mailBody = '<table><tr><td><img alt="Nanologico" src="cid:nanologico" /></td></tr></table>'; $mailBody = '<div style="width:800px; margin:0 auto; font: 12px/1.4 Verdana,Arial,sans-serif; background:#FFF; color: #444; text-align: center;"><div><table width="100%" style="background-image:url(link);border:1px solid #CCC)"><tr><td width="17%" align="center"><a href="link"><img src="link" border="0" align="middle" alt="a" width="65" height="114"style="margin: 5px 15px 5px 0"></a></td><td width="83%" align="center"><a href="link"><img src="link" alt="logo" width=179 height=38 border=0></a></td> </tr></table></div><table border=0 cellspacing=0 cellpadding=5 style="margin:0;font-size:12px;width:800px"> <tbody style="border:1px;"><tr> <td colspan="3" valign=top style="border-left:1px solid; border-right:1px solid; font:16px/1.4 Verdana, Geneva, sans-serif; text-align: center;">'; $mailBody .= $_POST['intestazione']; $mailBody .= '</td></tr><tr><td style="width:140px;border:1px solid" valign=top> <table width="100%" border="0" cellspacing="10"><tr><td><a href="'.$_POST['link1'] .'"><img src="'; $mailBody .= 'link'.$pathn1 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link2'] .'"><img src="'; $mailBody .= 'link'.$pathn2 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link3'] .'"><img src="'; $mailBody .= 'link'.$pathn3 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link4'] .'"><img src="'; $mailBody .= 'link'.$pathn4 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link5'] .'"><img src="'; $mailBody .= 'link'.$pathn5 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link6'] .'"><img src="'; $mailBody .= 'link'.$pathn6 .'" border="0"></a></td></tr><tr><td>'; $mailBody .= '</td></tr></table><td style="text-align: left;border-top:1px solid #ccc;" valign=top>'; $mailBody .= stripslashes($_POST['messaggio']); $mailBody .= '</td><td style="background: #ffffff;border-left:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;" valign=top><table width="100%" style="font: 12px/1.4 Verdana,Arial,sans-serif;"><tr><td>'; $mailBody .= stripslashes($_POST['messaggio_secondario']); $mailBody .= '</td></tr></table></td></tr></tbody></table><div style="border:1px solid;background: #ccc;color: #333;text-align:center;font-size:90%"> <p style="margin:5px">intestazione</p></div><br><div style="font-size:9px;"><p>Qualora non desideriate ricevere da parte nostra ulteriori informazioni vi preghiamo di volere inviare una eMail a pippo con l’oggetto cancellare. Vi porgiamo le nostre scuse per il disturbo.</p></div></div>'; $mail->Body .= $mailBody; // assegnare il body in un unico passaggio $mail->Subject = $_POST['oggetto']; $mail->AddAttachment($_FILES['allegato1']['tmp_name'],$_FILES['allegato1']['name']); $mail->AddAttachment($_FILES['allegato2']['tmp_name'],$_FILES['allegato2']['name']); $mail->AddAttachment($_FILES['allegato3']['tmp_name'],$_FILES['allegato3']['name']); $msg = "Mail inviata con successo"; if(!$mail->Send()) $msg = "Si e' verificato un errore nell'invio della mail<br />"; echo $msg; header("Refresh: 2; URL=link"); } $db2 = @mysql_select_db($database_email,$email); $sql2 = "SELECT * FROM lista_messaggi"; $query2 = mysql_query ($sql2, $email) or die ("impossibile eseguire la query"); //$lista = $row['EMAIL']; $mex = stripslashes($_POST['messaggio']); $mex2 = stripslashes($_POST['messaggio_secondario']); $ogg = $_POST['oggetto']; $int = $_POST['intestazione']; $data = date ("d-m-Y H:i:s"); $lnk1 = $_POST['link1']; $lnk2 = $_POST['link2']; $lnk3 = $_POST['link3']; $lnk4 = $_POST['link4']; $lnk5 = $_POST['link5']; $lnk6 = $_POST['link6']; $messaggio = "INSERT INTO lista_messaggi(data,oggetto,intestazione,messaggio,messaggio_secondario,messaggio_completo,img1,img2,img3,img4,img5,img6,link1,link2,link3,link4,link5,link6,allegato1,allegato2,allegato3) VALUES('$data','$ogg','$int','$mex','$mex2','$mailBody','$pathn1','$pathn2','$pathn3','$pathn4','$pathn5','$pathn6','$lnk1','$lnk2','$lnk3','$lnk4','$lnk5','$lnk6','$pathn7','$pathn8','$pathn9')"; $risultato = mysql_query($messaggio); ?>
-
A cosa ti serve un refresh con redirect nel codice:
header("Refresh: 2; URL=link");
Su link c'è l'url della pagina di ritorno.
Se questo avviene al primo invio dell'email esce dallo script e non salva nulla nel db, inoltre invia solo un'email, cioè la prima che ricava dalla query.
Modifica in questo modo:... $mail = new PHPMailer(); while ($row=@mysql_fetch_array ($query)) { $mail->AddBCC($row['EMAIL']); } $mail->From = "[email protected]"; $mail->FromName = "newsletter"; ... $mail->AddAttachment($_FILES['allegato3']['tmp_name'],$_FILES['allegato3']['name']); $db2 = @mysql_select_db($database_email,$email); ... $risultato = mysql_query($messaggio); $msg_a = "Mail inviata con successo<br />"; $msg_b = "Si e' verificato un errore nell'invio della mail<br />"; header("Refresh: 5; URL=link"); if(!$mail->Send()) echo $msg_b; else echo $msg_a;
Ora dovrebbe funzionare.
Inoltre fa attenzione ad utilizzare header dopo aver fatto echo di qualche cosa, perchè genera errore.
-
A cosa ti serve un refresh con redirect nel codice:
header("Refresh: 2; URL=link");
Su link c'è l'url della pagina di ritorno.
Se questo avviene al primo invio dell'email esce dallo script e non salva nulla nel db, inoltre invia solo un'email, cioè la prima che ricava dalla query.
Modifica in questo modo:... $mail = new PHPMailer(); while ($row=@mysql_fetch_array ($query)) { $mail->AddBCC($row['EMAIL']); } $mail->From = "[email protected]"; $mail->FromName = "newsletter"; ... $mail->AddAttachment($_FILES['allegato3']['tmp_name'],$_FILES['allegato3']['name']); $db2 = @mysql_select_db($database_email,$email); ... $risultato = mysql_query($messaggio); $msg_a = "Mail inviata con successo<br />"; $msg_b = "Si e' verificato un errore nell'invio della mail<br />"; header("Refresh: 5; URL=link"); if(!$mail->Send()) echo $msg_b; else echo $msg_a;
Ora dovrebbe funzionare.
Inoltre fa attenzione ad utilizzare header dopo aver fatto echo di qualche cosa, perchè genera errore.
-
Le tue considerazioni sono giuste e ti ringrazio ma il problema persiste..
cioè se scrivo in mex o mex2 del testo a mano la mail arriva e salva tutto nel db, se copio incollo dell'html esterno la mail arriva ma il db rimane vuoto..
A questo punto posso provare a cambiare WYSIWYG Editor, giusto per curiosità, e vedere se il problema persiste..
altro "esperimento" potrebbe essere quello di cambiare server (ormai mi appiglio a tutto :))..
-
Hai provato ad utilizzare un altro browser?
-
Si certo il problema lo da sia con IE che con Firefox
-
Prova a fare un echo di tutte le variabili, compresa la query che per inserire il messaggio nel db, poi posta il risultato.
Forse c'è qualche errore sql con determinati dati contenenti caratteri speciali.
-
Prova a fare un echo di tutte le variabili, compresa la query che per inserire il messaggio nel db, poi posta il risultato.
Forse c'è qualche errore sql con determinati dati contenenti caratteri speciali.
-
Mail inviata con successo
Ecco il testo incollato:
"ROMA, 2 settembre 2010 - "Annamo a vince". Ecco parte del messaggio che Daniele De Rossi ha spedito a Marco Borriello e che ha contribuito a spostare l'attenzione dell'attaccante da Torino a Roma. Nella conferenza stampa di presentazione, al termine del suo primo allenamento con Ranieri, l'ultimo acquisto giallorosso spiega così la sua scelta: "Rosella Sensi mi ha convinto, ho sentito la passione nelle sue parole. Poi De Rossi mi ha mandato quell'sms bellissimo, ho ancora la pelle d'oca. Mi ha scritto che sarà il miglior momento della mia vita e carriera. Si chiudeva con un annamo a vince"."
02-09-2010 14:17:59INSERT INTO lista_messaggi(data,oggetto,intestazione,messaggio,messaggio_secondario,messaggio_completo,img1,img2,img3,img4,img5,img6,link1,link2,link3,link4,link5,link6,allegato1,allegato2,allegato3) VALUES('02-09-2010 14:17:59','','','Ecco il testo incollato:
"ROMA, 2 settembre 2010 - "Annamo a vince". Ecco parte del messaggio che Daniele De Rossi ha spedito a Marco Borriello e che ha contribuito a spostare l'attenzione dell'attaccante da Torino a Roma. Nella conferenza stampa di presentazione, al termine del suo primo allenamento con Ranieri, l'ultimo acquisto giallorosso spiega così la sua scelta: "Rosella Sensi mi ha convinto, ho sentito la passione nelle sue parole. Poi De Rossi mi ha mandato quell'sms bellissimo, ho ancora la pelle d'oca. Mi ha scritto che sarà il miglior momento della mia vita e carriera. Si chiudeva con un annamo a vince"."
','','qui ho tolto la mail formattata in html
[CENTER]
[/CENTER]
','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','','','','','','','upload/','upload/','upload/')
-
Aggiungi questo è vedi se da errore:
... $risultato = mysql_query($messaggio); if(!$risultato) { die("ERRORE: " . mysql_error()); }
-
Aggiungi questo è vedi se da errore:
... $risultato = mysql_query($messaggio); if(!$risultato) { die("ERRORE: " . mysql_error()); }
-
Effettivamente da errore:
ERRORE: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'venuto il momento che l'Italia si dia una seria politica indust
e questo quello che ho incollato:
E' venuto il momento che l'Italia ecc. ecc.
-
Immaginavo, usa stripslashes() oppure addslashes() sul messaggio che inserisci nel db.
-
Lo avevo già inserito nel codice se vedi prima:
$mex = stripslashes($_POST['messaggio']);
$mex2 = stripslashes($_POST['messaggio_secondario']);