Problema con Mail

Soulfearor

Utente Attivo
16 Set 2014
54
0
6
Torino
www.serenagraficatorino.it
Buona sera,
ho questo form:

HTML:
<form action="" method="post">
	<input type="text" class="inputform" name="oggetto" placeholder="Oggetto dell'email">
    <input type="text" class="inputform" name="header" value="From: " placeholder="Header">
    <input type="text" class="inputform" name="destinatario" placeholder="Scrivi l'email del destinatario">
    <textarea name="messaggio" class="inputform" rows="5" placeholder="Messaggio della newsletter"></textarea>
    <input type="text" class="inputform" name="conferma" placeholder="1 conferma, 0 nega" value="0">
    <button type="submit" name="submit" style="margin:10px 0px;">Invia newsletter</button>
</form>

E questo script:

PHP:
include '../php/connessione.php';	

$Oggetto = isset($_POST['oggetto']) ? trim($_POST['oggetto']) : '';
$Messaggio = isset($_POST['messaggio']) ? trim($_POST['messaggio']) : '';
$Header = isset($_POST['header']) ? trim($_POST['header']) : '';
$Destinatario = $_POST['destinatario'];

$query = mysqli_query($connessione, "SELECT email FROM newsletter WHERE data_scadenza = 'CONFERMATO'") or die(mysqli_error());

if(isset($_POST['submit'])) {
	if($_POST['conferma'] == 1) {
		if($Destinatario != "") {
			mail($Destinatario, $Oggetto, $Messaggio, $Header);
			echo "email inviata a ".$Destinatario."<br />";
		}
		
		else {
			while($post = mysqli_fetch_assoc($query)) {
				mail($post['email'], $Oggetto, $Messaggio, $Header);
				echo "email inviata a ".$post['email']."<br />";
			}
		}
	}
}

Quando premo il pulsante "Invia newsletter" e il campo "conferma" ha valore 1, il sistema dovrebbe inviare una newsletter, ma a chi la invia? Se il campo "destinatario" è pieno la invia a quel destinatario, altrimenti a tutti quelli salvati in una tabella.

Una volta concluso il ciclo while mi appare il messaggio "email inviata a" e il destinatario ma le email non vengono fatte partire, come mai?
Il sito è su hosting aruba.

Inoltre ho sentito che l'invio della newsletter può interrompersi, come faccio a farlo ripartire?
Spero che almeno il codice che ho riportato sia corretto.

Confido in un vostro aiuto,
grazie mille.
 
Inoltre ho sentito che l'invio della newsletter può interrompersi, come faccio a farlo ripartire?
Salvo che tu non abbia un server dedicato lo script in genere si interrompe dopo 30 secondi. Per ovviare al problema io ho fatto così come illustrerò più avanti. Al momento con 40 iscritti tutto regge a meraviglia.
Mando le mail a 99 la volta, modificando per quelle spedite un valore nel db es: spedito, da 0 ad 1, così che nel secondo ciclo da 99 quelli a cui la mail è stata già spedita non verranno selezionati. Quando completo la lista, per resettare tutto ho creato un altro metodo che mi riporta tutta la lista a spedito 0.

Di seguito il metodo che uso per creare l'elenco dei destinatari presi a 99 la volta e inseriti tutti nel campo BCC tipo copia carbone nascosta.

PHP:
		protected function CreateDest()
		{
			include "../connection.php";
			// Estraggo i destinatarii da db  
			  try
			{
			  $sql = 'SELECT nome, email FROM users WHERE inviato=0 AND ver=1 ORDER BY nome DESC LIMIT 99';
			  $result = $pdo->query($sql);
			}
			catch (PDOException $e)
			{
			  $error = 'Error: ' . $e->getMessage();
			  include '../outputpage.php';
			  exit();
			}     
			foreach ($result as $row)
			{
			  $dests[] = array(
				'nome' => $row['nome'],
				'email' => $row['email']
			  );
			}
			// fine estrazione destinatari da db

//creo un pattern che utilizzerò per sprintf per la creazione dell'elenco destinatari
			$pattern = '%s <%s>';

//Parto con un ciclo che crea l'elenco			
			foreach ($dests as $dest) {
				$destlist[] = sprintf($pattern, $dest["nome"], $dest["email"]);
			}
			
			$destmail = 'Bcc: ' . implode(', ', $destlist);
			
			
			return $destmail;  
			
		}

In questo modo almeno fino ad ora funziona.

In questo modo otterrò un risultato del tipo: Bcc: [email protected] <nome>, [email protected] <nome2> ecc..
 
Ultima modifica:
Ciao otto9due e grazie per la risposta,
scusa se ti rispondo solo adesso ma ultimamente il mio tempo libero scarseggia.

Le mie conoscenze di php non sono ai livelli del tuo script ma tralasciando questo,
come faccio con Aruba ad avere un server dedicato per l'invio delle email?
E' un servizio che posso implementare?

Grazie mille,
buona serata!
 
Avere un server dedicato per mandare mail veramente non vale la pena. Costa tanti soldini e rischieresti comunque di entrare in blacklist. Se la tua esigenza è quella di spedire newsletter la migliore soluzione è quella di affidarsi a servizi quali MailUp e similari. Con dei piccoli abbonamenti otterrai i risultati che ti servono con un servizio professionale ed all'avanguardia nel settore. Un server dedicato ( che tra l'altro va anche gestito ) non credo sia la soluzione nel tuo caso specifico sopratutto.


Saluti.
G.G.
 

Discussioni simili