- Home
- Categorie
- Coding e Sistemistica
- PHP
- errore invio mail
-
Ciao Paolibo,
lo script che ti ha postato danny1975 è il minimo per eseguire l'invio di una mail con PHP, ma proprio per questo è il meglio a disposizione:
[php]$header = "From:[email protected]";
// costruiamo le intestazioni specifiche per il formato HTML
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/html; charset="UTF-8"\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";$testo="Gentile utente
questa e-mail ti è stata inviata in quanto iscritto/a al Sito pippo
Per non ricevere più questa e-mail scrivi a [email protected]
Distinti Saluti da pippo";
$destinatario = "[email protected]";
$oggetto_mail = "CIAO";
mail($destinatario,$oggetto_mail, $testo, $header);
[/php]
A cosa fai riferimento quando chiedi codice migliore?Una dritta:
Siccome l'invio delle mail di fatto 'blocca' il server, ossia mette in coda le richieste di chi sta visitando il sito, ti conviene considerare l'ipotesi, a fronte di molte email da inviare (diciamo più di 100), di eseguire l'invio a blocchi di 100 email.Inviate le prime 100 email, ricarichi la pagina per inviarne altre 100:
questo fa si che gli utenti ricevano i dati richiesti prima di bloccare il server inviando nuove mail.Spero di essere stato chiaro.
-
Grazie per le risposte, ma il mio problema è un altro..
Lo script che io uso sfrutta la classe phpmailer che permette di gestire al meglio l'invio di mail e funziona bene..
Nel codice interagisco con un db dove sono memorizzate mail e nomi dei soci..
Per far si che la mail arrivi a tutti i soci utilizzo il while che fa il suo dovere prendendo tutti i dati del db e inviando la mail a tutti e sin qui tutto ok..
Il problema è il seguente:
Voglio fare in modo che ad ogni socio la mail arrivi nel formato Egregio Dott. "nomesocio" e per questo memorizzo in una variabile l'id del socio:$id=$_GET['id_cantina'];
poi faccio il select in questo modo:
$sql = "SELECT * FROM cantina WHERE id_cantina ='$id'";e per l'invio uso il while:
while ($row=mysql_fetch_array ($query))
{
$m ail->AddBCC("$row[e mail]");
$m ail->Body = "Egregio Dott. $row[soci]";in questo modo mi esce impossibile inviare il messaggio..
se tolgo il id_cantina ='$id'";
la mail arriva correttamente..
quindi è come se desse fastidio quella variabile..
Se avete qualche dritta sul perchè di questa anomalia ve ne sarei grato
-
Ciao paolibo,
forse può essere un problema di concatenamento delle stringhe.Prova così:
Se id_cantina è un numero:
[php]"SELECT * FROM cantina WHERE id_cantina =" . $id;[/php]Se id_cantina non è numero:
[php]"SELECT * FROM cantina WHERE id_cantina ='" . $id . "'" ;[/php]Poi,
nella stringa che componi per valorizzare la proprietà body dell'email il punto dopo 'Dott.' forse nella forma attuale da noia. Usa il metodo classico anche qui:
[php]$mail->Body = "Egregio Dott. " . $row['soci'];[/php]Prova e facci sapere.
-
Ho risolto togliendo il where e mettendo tutto nel while e funziona tutto a dovere ecco il codice per chi ne avesse bisogno:
<? require_once("../phpmailer/class.phpmailer.php"); require_once ("../Connections/cantina.php"); $db = @mysql_select_db($database_cantina,$cantina); $sql = "SELECT * FROM cantina"; $query = mysql_query ($sql, $cantina) or die ("impossibile eseguire la query"); while ($row=@mysql_fetch_array ($query)) { $mail = new PHPMailer(); $mail->From = "vostramail"; $mail->FromName = "vostronome"; $mail->AddEmbeddedImage("images/logo.jpg", "logo", "logo.jpg", "base64", "image/jpg"); $mail->AddBCC($row['email']); $mail->IsHTML(true); $mailBody = "Egregio Dott. "; $mailBody .= $row['soci'] ."<br />"; $mailBody .= $_POST['messaggio']; $mailBody .= '<br><br><br><table><tr><td><img alt="blabla" src="cid:logo" /></td></tr></table>'; $mail->Body .= $mailBody; $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; } ?> ```Grazie per l'aiuto :)
-
Ciao,
forse funzionava anche prima.C'è un errore di sintassi:
[PHP]$mail->Body = "Egregio Dott. $row['soci']";[/PHP]anziché:
[PHP]$mail->Body = "Egregio Dott. $row[soci]";[/PHP]Ciao
-
Ciao paolibo,
sono contento per te.
A me invece sorge un problema che oso definire odioso:
a tutti arrivano le mail tranne a libero.
Ho provato iversi moduli, ma niente.
Spero tanto sia un loro problema, perchè in se inviare una meil non è poi cosi difficile, a te come vanno le cose?
Ciao da danny 1975
-
Prova a togliere il sender e l' smtp e fammi sapere..
ciao
-
Ciao,
non so cosa fare.
Il codice è quello che ti ho segnalato sopra,
solo a libero non mi arriva niente.
Quale sara mail il problema?
Ciao da danny1975
-
Ciao danny1975,
forse è dovuto ad una gestione di sicurezza che attua Libero.it, mi spiego meglio:Mi è capitato che le mail scritte ad un amico gli andassero tutte nella cartella SPAM semplicemente perchè lui non aveva mai salvato il mio indirizzo di posta tra i suoi contatti.
Tu hai salvato l'indirizzo del mittente tra i tuoi contatti?
Invii email da server segnalati per spam o 'zozzeria' simile?
Non so, non mi viene in mente altro: non è un problema di software ed è dovuto a qualcos'altro che magari non dipende neanche da te.
-
Ciao,
sto continuando a mandare mail ed a tutti arivano tranne che a me con la posta di libero
credo proprio che abbia ragione tu, lo script va bene
ciao da danny
-
Ciao a tutti,
come volevasi dimostrare il cliente mi ha chiesto
come mai agli iscritti di libero non arrivano le mail?
quindi sono di nuovo qua a chiedervi aiuto;
avete voi uno script di invio mail che vada bene?
Vi ringrazio in anticipo
ciao da danny 1975