Modulo Mail
Autore: Gesuino A.
Visite 2998,
Followers 4,
Condiviso 0
Ciao a tutti,
vorrei utilizzare il modulo mail per permettere ad un'utente di inviare un messaggio a tutti gli iscritti vorrei poter creare una stuttura simile in una nuova pagina
Nome = "Utente che ha fatto logon"
Oggetto = "Testo libero"
Messaggio = "Testo Libero"
Cliccando poi sul bottone "Invia" vado a spedire questa mail a tutti gli utenti censiti...
Posso farlo utilizzando il modulo Mail a disposizione nell'applicativo?
Grazi mille
Postato il
nel modulo invio email puoi inserire come destinatari delle email tutti gli indirizzi email che gli svrivi tu e non in automatico
Io utilizzo questo codice che funziona solo per gli utenti registrati in modo automatico, cioè presenti sul database.
Nella pagina modulo per l'invio mail (che deve essere sotto login) in un oggetto codice html inserisci questo codice:
<table><td><td center><b>Mailing list</b><tr>
</tr><tr><td> </tr>
</tr><form action="inviamail.php" method="POST" enctype="multipart/form-data">
<tr><td align=right>Oggetto: </td>
<td align=left><input type="text" size="30" name="oggetto" value="" /></td>
</tr><td> <tr >
<tr><td><br><td><tr>
<td align=right>Messaggio: </td>
<td align=left><textarea cols="40" rows="10" name="messaggio"></textarea></td>
<tr><td> <td align=left ><input type="submit" value="Invia" /> <input type="reset" value="Reset">
</tr></table></form>
in unaltra pagina che chiamerai inviamail.php (quindi deve essere php controlla nella propietà pagina l'estensione e il nome del file generat!) inserisci quest'altro codice:
<?php
require_once("res/x5engine.php");
require_once("res/access.inc.php");
$pa = Configuration::getPrivateArea();
$user = $pa->whoIsLogged();
$realname=$user['realname'];
$qchiave = array_keys($imSettings['databases']);
$qdati = getDbData($qchiave[0]);
$host = $qdati['host'];
$db_user = $qdati['user'];
$db_psw = $qdati['password'];
$db_name = $qdati['database'];
$qfolder = $imSettings['general']['public_folder'];
$tabella = $imSettings['access']['dbtable'];
$db = new mysqli ($host, $db_user, $db_psw, $db_name);
$db ->autocommit(FALSE);
if ($db->connect_error) { die("Connessione fallita: " . $db->connect_error); }
$sql = "SELECT * FROM $tabella WHERE realname ='$realname'";
$result = $db->query($sql);
$row=$result->fetch_assoc();
$mittente = $row['email'];
$sql = "SELECT * FROM $tabella";
$result = $db->query($sql);
if (!$result) {die("Errore nella query $query: " . $db->connect_error);}
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
$mail_headers = "From: " . $realname . " <" . $mittente . ">\r\n";
$mail_headers .= "Reply-To: " . $mittente . "\r\n";
$mail_headers .= "X-Mailer: PHP/" . phpversion();
$mail_headers .= "MIME-Version: 1.0\n";
$mail_headers .= "Content-type: text/html; charset=UTF-8\n";
while ($row = $result->fetch_assoc() )
{ $nome =$row['realname'];
$destinatario = htmlentities($row['email']);
// COSTRUIAMO IL CORPO DELLA MAIL
$mail_body = $messaggio . "<BR><BR>" . "\r\n";
if(mail($destinatario, $oggetto, stripslashes($mail_body), $mail_headers ))
{
echo "<p>Mail inviata a ". $nome."</p>";
}else{
echo "<p>Errore!</p>";
} }
?>
Un po' spartana ma funziona.
Ciao Giorgio, complimenti per gli script, ma non mi è chiaro alcuen cose:
- il form in codice html lo metti in una pagina protetta che la possono vedere solo chi è registrato?
Da quello che ho capito, un utente si registra automaticamente e tramite il form invia una email a tutti?
Oppure il form è accessibile a tutti?
- in quale contesti pratici si può usare?
Grazie!
Grazie per l'apprezzamento, spero di non aver fatto errori nell'adattarlo.
Si la pagina deve essere protetta per due motivi:
Ciao
Ok Giorgio, ma usando i forum e i mailing list di Google, ForumFree, Facebook,...
non trovo la necessità pratica di questa funzione..
Vedi tu. Io ho risposto a Gesuino A.
era un modo per scambiarci le idee, tutto qua.
Questo modulo io lo avevo pensato per fare una mailing list a tutti i soci del mio gruppo e/o per mandare avvisi agli iscritti.
Siccome i dati sono nel database del sito è più logico e funzionale usare quelli e non doverli copiare altrove.
Infatti prima usavo sendblaster che a livello di mail è più efficente ma devo gestire due liste e tenerle aggiornate.
Così invece ho già tutto aggiornato. Volendo con poche modifiche si possono mandare anche immagini... ma lo script diventerebbe più complesso.
Autore
Ciao a tutti e grazie mille per il suggerimento.
Inserendo il codice ho modificato i nome per il collegamento al mio db ma quando lo eseguo ho il seguente errore:
"Fatal error: Call to a member function fetch_assoc() on boolean in /membri/nomesito/inviamail.php"
cosa ho dimenticato?
grazie mille
Non devi modificare nulla. Se hai impostato la registrazione automatica i dati del dj vengono recuperati dallo script
Autore
Ciao a tutti,
scusatemi ho risolto il mio problema...è stato sufficiente riportare il tutto alla fase iniziale senza modifiche al codice che l'errore non mi è più comparso.
grazie ancora a tutti per l'aiuto.
Come dicevo lo script è.molto spartano e non ha funzioni di recupero di errori quindi necessità che il db sia popolato, che ci sia cioè qual uno già registrato.
Anche la mail è spartana. Se qualcuno volesse si potrebbe perfezionare per creare una modulo per inviare mailinglist
e c'è anche una leggerezza... nel senso che da per scontato che non ci siano registrazioni con lo stesso nome reale...