Inviare email reminds scadenza

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Salve, mi scuso se sto aprendo molti topic, ma ho molti dubbi, e visto la vostra gentilezza ne approfitto. Come posso fare in modo che avendo una data iniziale e una finale inviare a una x data inviare un email, per avvisare che quella data sta per arrivare?
Siccome lo script che sto realizzando, tratta pagamenti di contributi, che hanno una scadenze, mi piacerebbe, che tipo se io metto che il file caricato ha scadenza il 20/07/12 il 16/07/12 il cliente riceve un email di avviso....Ho reso l'idea? Per salvare le date io utilizzo questo:
PHP:
$date = (date("d/m/Y"));
va bene o converrebbe salvarlo in timestamp?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io uso per registrare nel db il timestamp.
da quel valore poi mi faccio tutto quello che serve, secondo me è più comodo da usare neglio ordinamenti, nei calcoli per differenze date, per quanti gg mancano...
questo perche quasi tutte le funzioni delle date di php vogliono la data in formato Y m d quindi comunque devo trasformarle in italiano, col tmestamp faccio quello che serve. guarda che però è una mia opinione certuni preferiscono usare i formati più umani (cosa che comunque a php e mysql non glene può frega de meno...)
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
ciao
io uso per registrare nel db il timestamp.
da quel valore poi mi faccio tutto quello che serve, secondo me è più comodo da usare neglio ordinamenti, nei calcoli per differenze date, per quanti gg mancano...
questo perche quasi tutte le funzioni delle date di php vogliono la data in formato Y m d quindi comunque devo trasformarle in italiano, col tmestamp faccio quello che serve. guarda che però è una mia opinione certuni preferiscono usare i formati più umani (cosa che comunque a php e mysql non glene può frega de meno...)

Ok, quindi ipotizzando che ho nel db ho salvato le date come timestamp, come data di scadenza il 16/07/12, vorrei che 5 giorni prima quindi il 11/07/12, venga eseguito lo script e l'invio della email. Come mi calcolo tale data?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intanto tieni presente che il timestamp è un intero espresso in secondi, quindi
se hai la scadenza in timestamp ad es potresti fare in questo modo
PHP:
<?php
//.....
$time_scadenza=$valore_da_db['scadenza'];
$oggi=time();//legge il timestamp attuale del server
$gg=abs(($time_scadenza- $oggi))/(24*60*60);//con i dovuti arrotondamenti in difetto o in eccesso
if($oggi > $time_scadenza){
	echo "contratto già scaduto da $gg giorni";
}else{
	echo "contratto scade tra $gg giorni";
}
?>
io ti ho messo un esempio, ma tu puoi giostrarti come vuoui (es) if ($gg <=5) invia email avviso
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Potresti spiegarmi, un po questo rigo?
PHP:
$gg=abs(($time_scadenza- $oggi))/(24*60*60);//con i dovuti arrotondamenti in difetto o in eccesso
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
1. abs ritorna il valore assoluto es. abs(-5) = 5 quindi per il calcolo non devo guardare quale è il più piccolo o il più grande
2. ($time_scadenza- $oggi) sono i secondi di differenza tra le due date
3. (24*60*60) un giorno (espresso in secondi) = 24 ore per 60 minuti per 60 secondi, avrei potuto scrivere ($time_scadenza- $oggi)/86400
4. quindi ($time_scadenza- $oggi)/(24*60*60) da l'intervallo in giorni, un numero float
5. poi puoi arrotondare o troncare
ceil(abs(($time_scadenza- $oggi))/(24*60*60)) in eccsso es ceil(5.4) = 6
(int)abs(($time_scadenza- $oggi))/(24*60*60)) tronca es (int)(5.4) = 5
... esistono anche round e floor

spero di essere stato chiaro
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Ciao, adesso mi è un po più chiaro, l'unica cosa che adesso ho difficoltà e "umanizzare" la data, ho provato con questa funzione:

PHP:
function timestamp_to_date($timestamp){
   return date("r", $timestamp);
}

echo timestamp_to_date('1342461442');

Ma il timestamp ricevuto dalla tua funzione, non viene riconosciuto e quindi convertito. Cosa mi consigli di fare?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non hai bisogno di tutto quell'ambaradan, ti faccio il solito esempio

PHP:
<?php
$data_tm_stamp=time();
$data_umana=date("d m Y", $data_tm_stamp);//o "d/m/Y" o d-m-Y" o per ore e sec "d m Y H:i:s"
echo "la data in tmestamp è $data_tm_stamp, tradotta in umano $data_umana";
?>
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
ciao
non hai bisogno di tutto quell'ambaradan, ti faccio il solito esempio

PHP:
<?php
$data_tm_stamp=time();
$data_umana=date("d m Y", $data_tm_stamp);//o "d/m/Y" o d-m-Y" o per ore e sec "d m Y H:i:s"
echo "la data in tmestamp è $data_tm_stamp, tradotta in umano $data_umana";
?>

Grazie per l'esempio adesso mi è chiaro come umanizzare un timestamp, ma trovo ancora difficoltà, con lo script sopra. Non pensavo che gestire le date fosse cosi complicato. Io avevo pensato, di inserire questo link per far inserire le date, ma in questo modo verrebbero salvate in 11/07/2012, dovrei a questo punto prima convertire in timestamp giusto?
Ritornando allo script, quello del tuo esempio mi restituisce un timestamp sempre diverso se aggiorno la pagina è normale? invece di calcolare i secondi non si può calcolare il giorno?


Io avevo pensato una cosa del genere ma non so se concettualmente e giusta.

Questa e l'ipotetica tabella dove salvo i dati:

iddata_scadezadata_remid_cliente
116/06/201211/06/20121
218/08/201213/08/20122

Poi facendo una select

PHP:
$oggi = (date("d/m/Y"));
$query = "SELECT * FROM doc WHERE data_rem= $oggi'";
$res = mysql_query($query);
if (isset ($res)){
// Invia email
}

Lo script, verrebbe lanciato ogni giorno in automatico dal server, ma non so come ricavarmi la data_rem che sarebbe data_scadenza-5giorni...
 
Ultima modifica:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Basandosi sulla tua tabella sarebbe (ad esempio):
PHP:
SELECT DATEDIFF(data_scadenza,data_rem) AS differenza FROM tabella WHERE id=xx
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Ciao, ma mi rimane ancora il dubbio, su come spedire più email contemporaneamente. In questo modo io estraggo, tutte le email che hanno la scadenza in quel giorno, ma come faccio poi a inviarle tutte?
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Ciao, ma mi rimane ancora il dubbio, su come spedire più email contemporaneamente. In questo modo io estraggo, tutte le email che hanno la scadenza in quel giorno, ma come faccio poi a inviarle tutte?

edit:
Ho fatto in questo modo che ne dite?
PHP:
<?php

include_once ('config.php');

$oggi = (date("d/m/Y"));

$query = "SELECT * FROM remid WHERE data_rem = '$oggi'";
$res = mysql_query($query);
while ($row = mysql_fetch_assoc($res))  
if (isset($res)) {

$destinatario = $row['email']; 
$oggetto = "Archivio: Scadenza pagamenti"; 
$messaggio = 
"Gentile Cliente, \n
Hai un dpcumento in scadenza. \n
Nome:  $nome; \n
Cordiali Saluti.";
mail($destinatario, $oggetto, $messaggio, "From: sito.it <[email protected]");

if (!$res) {
	die("Errore nella query $sql: " . mysql_error());

}
}
?>

Sembra che funzioni, ma vorrei un vostro parere per migliorarlo.
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco quelli che secondo me potrebbero essere dei miglioramenti.
comunque stai attento a quante email invii alla volta se superi un centinaio al gg corri rischio di essere messo in una bleack list per spam.
poi ho messo un intervallo di tempo tra un invio e l'altro (500 microsecondi = 0.5 sec) in modo da non intasare il server (puoi ridurlo di un po')
e la verifica delle email inviate e di quelle che ti danno errore
PHP:
<?php
include_once ('config.php');
$oggi = (date("d/m/Y"));
$query = "SELECT * FROM remid WHERE data_rem = '$oggi'";
$res = mysql_query($query);
if(mysql_num_rows($res)> 0){
	while ($row = mysql_fetch_assoc($res)){ 
		$destinatario = $row['email']; 
		$oggetto = "Archivio: Scadenza pagamenti"; 
		//la variabile $nome da dove salta fuori?
		//non la ricavi dalla query?
		//es. $nome=$row['nome']; 
		//nel messaggio metterie anche la data (anche se si legge nell intestazione)
		$messaggio = 
		"Gentile Cliente, \n
		Hai un documento in scadenza. \n
		Nome:  $nome; \n
		Cordiali Saluti. \n
		Ballonzi di sotto, $oggi
		";
		if(mail($destinatario, $oggetto, $messaggio, "From: sito.it <[email protected]")){
			$em_inviate[]=$destinatario;// invio ok
		}else{
			$em_errore[]=$destinatario;// invio ko
		}
		usleep(500);//mezzo secondo tra un invio e un altro per non strozzare il srver
	}
}else{
	echo "non ci sono indirizzi da spedire";
}
if(is_array($em_inviate)){
	echo "sono state inviate le seguenti email:<br>";
	foreach($em_inviate as $valore){
		echo "$valore<br>";
	}
}
if(is_array($em_errore)){
	echo "le seguenti email non sono state inviate:<br>";
	foreach($em_errore as $valore){
		echo "$valore<br>";
	}
}
?>
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Ciao, grazie mille, adesso, è strutturato meglio, ma c'è ancora un errore. Ho fatto una prova con 5 file in scadenza, quindi doveva mandare 5 email diverse, riesce a mandarle solo le prime 3 le altre due dice che non sono state inviate. puo esserci un errore nello script, oppure una limitazione del hosting? nel mio caso sto facendo delle prove con altervista....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
1. verifica che gli indirizzi siano giusti
2. invece di usare la funzione mail() dovresi usare la classe phpmailer o simile. la funzione mail() ha dei problemi con l'invio di alcune esmail es. @gmail.com e altri, ci sono alcuni che rifiutano la ricezione da mail() anch se non ti so dire perchè
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Capito, infatti i problemi, li ho riscontrati con account @gmail.com. del tipo se ne metto una sola parte tranquillamente, se ne metto due ne invia una sola. Ho rifatto un altra prova, mettendo 5 email di diversi gestori (gmail,tiscali,yahoo,libero,emailtemporanea) Vengono inviati solo ai primi 3 record, i successivi no. Ora provo a vedere se riesco a usare phpmailer, vedo che la consigliano in tanti. :byebye:
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Niente, ho provato con la class Php Mailer, ma nulla, oltre alle 3 email non va ecco il codice con la classe:

PHP:
<?php 
include_once ('config.php'); 
include_once('../archivio/phpmailer/class.phpmailer.php');
$mail = new PHPMailer();

$oggi = (date("d/m/Y")); 

$query = "SELECT * FROM mail WHERE data_rem = '$oggi'"; 
$res = mysql_query($query); 
if(mysql_num_rows($res)> 0){ 
    while ($row = mysql_fetch_assoc($res)){  
        $destinatario = $row['email'];
		$mail->From = "[email protected]";
		$mail->FromName = "Nome del sito";	
		$mail->Subject = "Archivio: Scadenza pagamenti"; 		
		$mail->Body =   
        "Gentile Cliente, \n 
        Hai un documento in scadenza. \n 
        Cordiali Saluti. \n 
        Ballonzi di sotto, $oggi 
        "; 
		$mail->AddAddress($destinatario);
		if($mail->Send()){
		$em_inviate[]=$destinatario;// invio ok 
        }
		else{ 
            $em_errore[]=$destinatario;// invio ko 
        } 
        usleep(500);//mezzo secondo tra un invio e un
	}
		
	if(is_array($em_inviate)){ 
    echo "sono state inviate le seguenti email:<br>"; 
    foreach($em_inviate as $valore){ 
        echo "$valore<br>"; 
		} 
	}	 
	if(is_array($em_errore)){ 
    echo "le seguenti email non sono state inviate:<br>"; 
    foreach($em_errore as $valore){ 
        echo "$valore<br>"; 
		} 
	} 	
} 
?>

Ho provato con diversi gestori, e il problema non sono loro, perché se tipo metto libero.it come 4° email non viene inviata, mentre se la metto seconda si.
1° esempio
image.png

2° esempio
image.png


Poi una altra cosa, che non va bene, e che tutti i destinatari vedono le email degli altri....
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
aggiungi le due righe dopo l'invio
PHP:
<?php 
include_once ('config.php'); 
include_once('../archivio/phpmailer/class.phpmailer.php');
$mail = new PHPMailer();
$oggi = (date("d/m/Y")); 
$query = "SELECT * FROM mail WHERE data_rem = '$oggi'"; 
$res = mysql_query($query); 
if(mysql_num_rows($res)> 0){ 
    while ($row = mysql_fetch_assoc($res)){  
        $destinatario = $row['email'];
        $mail->From = "[email protected]";
        $mail->FromName = "Nome del sito";    
        $mail->Subject = "Archivio: Scadenza pagamenti";         
        $mail->Body =   
        "Gentile Cliente, \n 
        Hai un documento in scadenza. \n 
        Cordiali Saluti. \n 
        Ballonzi di sotto, $oggi 
        "; 
        $mail->AddAddress($destinatario);
        if($mail->Send()){
        	$em_inviate[]=$destinatario;// invio ok 
        }else{ 
            $em_errore[]=$destinatario;// invio ko 
        } 
        //aggiungi queste due righe
		$mail->ClearAddresses();
		$mail->ClearAllRecipients();
		usleep(500);//mezzo secondo tra un invio e un
    }
    if(is_array($em_inviate)){ 
    	echo "sono state inviate le seguenti email:<br>"; 
    	foreach($em_inviate as $valore){ 
			echo "$valore<br>"; 
        } 
    }     
    if(is_array($em_errore)){ 
    	echo "le seguenti email non sono state inviate:<br>"; 
    	foreach($em_errore as $valore){ 
        	echo "$valore<br>"; 
        } 
    }     
} 
?>

poi per verificare che sia giusto il db fatti uno scriptnino che visualizzai solo le email (non le invii) che dovrebbero essere inviate
 

Bivio

Utente Attivo
19 Mag 2010
91
0
6
Ciao, con questa modifica, ho risolto il problema degli indirizzi, ora come destinatario vedo solo uno (il mio di utente del sito). Mentre non riesco a capire perché più di 3 tre non riesco a inviare....Ho provato diversi gestori ma nulla, ho creato lo script per verificare il db, e vengono estratti tutte e 6 le email che ho messo ...:hammer:
 
Discussioni simili
Autore Titolo Forum Risposte Data
D INVIARE PAGINA XHTML TRAMITE EMAIL HTML e CSS 1
S PHP: inviare via email contenuto di una funzione PHP 4
M inviare email con access MS Access 3
Shyson Inviare css con form email PHP 1
P inviare pagina visualizzata via email Javascript 5
P inviare email con contenuto javascript PHP 5
P Non riesco più ad inviare email con il php PHP 82
F Hosting gratis che mi permetta di inviare email senza pubblicità Hosting 6
S Inviare contenuto form a un indirizzo email HTML e CSS 1
G inviare thumbshot su email PHP 2
M catturare link e inviare email PHP 41
G inviare un collegamento ipertestuale in email Classic ASP 4
T inviare email a indirizzi pescati da query PHP 0
I Inviare due email per ordine PHP 5
borgo italia impossibile inviare email Discussioni Varie 0
R Inviare file tramite un form a un indirizzo email tramite pagina php PHP 1
R Inviare dati form a indirizzo email PHP 23
R Software per inviare e monitorare campagne SMS, EMAIL, MMS e FAX. Prova Gratuita! Offerte e Richieste di Lavoro e/o Collaborazione 0
M Inviare email con allegati usando PHP PHP 2
A Inviare immagine a un indirizzo email PHP 2
G ricevere una email dal web e inviare una risposta con allegato Classic ASP 2
S inviare dati a 1 indirizzo email Classic ASP 1
J inviare dati via email Javascript 2
I Inviare email senza allegati. HTML e CSS 2
G inviare email contenete dati da db Classic ASP 1
csi Inviare file jpg in locale alla stampante con php PHP 0
M Inviare un file su un server remoto con JavaScript Javascript 0
E Inviare variabile a PHP da ciclo in JS Javascript 0
M Inviare dati nel db dopo risposta alert PHP 0
L inviare i dati di un form ad un database PHP 6
O [PHP] inviare dati da form e script ajax PHP 0
D [HTML] Inviare un link contenente un' immagine HTML e CSS 4
M Inviare variabili da menu a tendina a pagina php con post PHP 6
I [PHP] inviare form con allegato tramite una mail PHP 1
I Guida/Tutorial configurare PHPMailer per inviare mails tramite contact form? PHP 2
A [PHP] Inviare mail con piu immagini allegate PHP 6
C non riesco a inviare la posta con account alice Posta Elettronica 1
F [Javascript] Inviare i campi di un form col metodo post Javascript 7
L [Javascript] aiuto non riesco a inviare in get dal server web locale su altervista con httpRequest Javascript 0
A Non riesco ad inviare una mail attraverso PHP su Xampp PHP 2
L 120 SMS Gratis da inviare in qualsiasi momento Vendere e Acquistare pubblicita' online 0
angelo85 Sito joomla che permetta agli utenti di inviare mail Joomla 2
H [PHP] Inviare dati PHP 3
E [PHP] inviare 2 form consecutivamente PHP 4
M Come inviare due mail diverse con phpmailer PHP 6
A Creare da form un PDF da inviare come allegato. PHP 1
M Inviare mail con PHP tramite Mozilla PHP 3
M Inviare mail dopo due giorni lavorativi PHP 3
P Creare form e inviare via mail HTML e CSS 2
M Inviare mail con href PHP 2

Discussioni simili