invio newsletter a 50 indirizzi per volta

aurora.solari

Nuovo Utente
23 Ott 2009
21
0
0
buongiorno a tutti!
ho creato una pagina asp per l'invio di una newsletter agli indirizzi di un database.
la mailing list ha circa 1200 indirizzi e immagino che non riuscirò ad inviare la mail a tutti allo stesso momento.
vorrei quindi inviarla a 50indirizzi per volta con una pausa tra un invio e l'altro..

riporto qui di seguito la mia pagina asp:

<%@ Language=VBScript %>

<%
'Mi collego al db ed estraggo gli indirizzi email
Dim rs, conn, sql
Set rs = Server.CreateObject("ADODB.Recordset")
conn = "driver={Microsoft Access Driver (*.mdb)};dbq="& server.MapPath("/mdb-database/db1.mdb")
sql = "SELECT Email FROM tabella"
rs.Open sql, conn

'Inserisco dentro la variabile bcc tutti i destinatari
x = 0
do until rs.eof
x = x + 1
if x = 1 then
bcc = rs("email")
else
bcc = bcc & "; " & rs("email")
end if
rs.moveNext
loop
rs.close
Set rs = Nothing

Dim iMsg
Dim iConf
Dim Flds
set iMsg = CreateObject("CDO.Message")
set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds("http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion") = True
Flds.Update

With iMsg

Set .Configuration = iConf

.CreateMHTMLBody "http://www.miosito.it/Newsletter.html"

.To = "[email protected]"

.From = "[email protected]"
.BCC = bcc
.Subject = "Newsletter"
.Send
End With

%>
<title>Newsletter</title>
pagina html inviata

ho trovato uno script che manderebbe 50messaggi per volta ma nn so dove inserirlo nel mio codice.
qualcuno può aiutarmi?
 
no paolo. lo script che ho riportato è quello che uso per inviare la newsletter a tutti gli indirizzi insieme.

per mandarne 50 alla volta ho trovato questo:

<%@LANGUAGE = VBScript%>
<%
' Recupero tutte le variabili per l'applicazione
Dim messaggio, pag, cn, rs, quante, tot, i, email

' Recupero il corpo della mail
messaggio = "Corpo della mail da recuperare da un form..."

' Recupero e controllo il numero di pagina corrente
pag = Request.QueryString("pag")
If IsNumeric(pag) = False Or pag < 1 Then pag = 1

' Memorizzo il messaggio in una sessione per disporne
If messaggio <> "" Then
Session("messaggio") = messaggio
Else
Response.End
End If

' Mi connetto al database
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open ' QUI LA STRINGA DI CONNESSIONE

' Lancio la query
rs.Open "SELECT email FROM newsletter", cn, 1

' Predispongo la paginazione
quante = 50
rs.CacheSize = quante
rs.PageSize = quante
rs.AbsolutePage = pag
tot = CInt(rs.PageCount)
i = 0

' Invio le mail una alla volta a blocchi da 50
Do While Not rs.EOF
Set email = Server.CreateObject("CDO.Message")
email.From = "[email protected]"
email.To = rs("email")
email.Subject = "Newsletter del " & Date()
email.TextBody = Session("messaggio")
email.Send
Set email = Nothing
i = i + 1
If i = quante Then Exit Do
rs.MoveNext
Loop

' Un po di pulizia
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

' Mi sposto al blocco della pagina successiva
If CInt(pag) < CInt(tot) Then
Response.redirect "newsletter.asp?pag=" & CInt(pag) + 1
End If

' Monitorizzo il numero di pagina corrente
Response.write ("Pagina corrente: " & pag)
%>

così com'è nn funziona, probabilmente anche perchè io nn devo mandare un messaggio ma una pagina html come ho descritto nel primo post
 
Allora Aurora, intanto ti posto il codice modificato poi ti spiego come personalizzarlo:

Codice:
<%
' Recupero tutte le variabili per l'applicazione
Dim messaggio, pag, cn, rs, quante, tot, i, email

' Recupero il corpo della mail
messaggio = "Corpo della mail da recuperare da un form..."

' Recupero e controllo il numero di pagina corrente
pag = Request.QueryString("pag")
If IsNumeric(pag) = False Or pag < 1 Then pag = 1

' Memorizzo il messaggio in una sessione per disporne
If messaggio <> "" Then
Session("messaggio") = messaggio
Else
Response.End
End If

' Mi connetto al database
strConnect = "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("NewsPad.mdb") 

Set rs = Server.CreateObject("ADODB.Recordset")
	rs.ActiveConnection = strConnect
	rs.Source = "SELECT Email FROM tblNPMembers" 
	rs.CursorType = 1
'	rs.CursorLocation = 2
'	rs.LockType = 1
	rs.Open()

' Predispongo la paginazione
quante = 50
	rs.CacheSize = quante
	rs.PageSize = quante
	rs.AbsolutePage = pag
tot = CInt(rs.PageCount)
	i = 0

' Invio le mail una alla volta a blocchi da 50
Do While Not rs.EOF

' QUI METTO IL CODICE PER INVIARE L'EMAIL

' STAMPO IL VALORE i PER VEDERE SE FUNZIA :)))
response.Write i&"<br>"

i = i + 1
If i = quante Then Exit Do
rs.MoveNext
Loop

' Un po di pulizia
rs.Close
Set rs = Nothing

' Mi sposto al blocco della pagina successiva
If CInt(pag) < CInt(tot) Then
Response.redirect "newsletter.asp?pag=" & CInt(pag) + 1
End If

' Monitorizzo il numero di pagina corrente
Response.write ("Pagina corrente: " & pag)
%>

Modifica il nome del tuo DB: ("NewsPad.mdb")
Modifica il nome della tabella ove vi sono le e-mail: "SELECT Email FROM tblNPMembers"
Se hai fatto tutto correttamente all'esecuzione del file dovresti trovare un progressivo da 1 a 50 e così vià.

Devi aggiungere solo il codice per inviare una mail... intanto vedi se funziona questo blocco.
 
Ultima modifica:
funziona alla perfezione, grazie ancora!
l'unica cosa che vorrei cambiare è che nella pagina di controllo mi vengono stampati i numeri
0
1
2
3 ecc ecc
pag 1
anzichè i numeri sarebbe possibile far stampare gli indirizzi email a cui è stata inviata la newsletter o è troppo complicato?
 
ho parlato troppo presto. in realtà nn funziona. sigh!
le email vengono inviate correttamente, ma sempre una alla volta.
ho messo nel campo TO il mio indirizzo email e nel campo CCN 52 indirizzi.
a me il messaggio arriva 52 volte!
visto che di email ne avrei 1000 da mandare non vorrei che mi si intasasse la posta!
 
...mmmm, allora, per quanto riguarda i numeri la stringa è questa:
Codice:
' STAMPO IL VALORE i PER VEDERE SE FUNZIA :)))
response.Write i&"<br>"

era una cosa che ho aggiunto per vedere se il ciclo funzionava, se vuoi visualizzare l'indirizzo e-mail basta modificarlo così:

Codice:
' STAMPO IL VALORE i PER VEDERE SE FUNZIA :)))
response.Write email&"<br>"

Per il discorso invio singolo o multiplo non ho ben afferrato il problema, in pratica lo script invia una mail, in successione, ad ogni singolo indirizzo inserito nella tabella "email".
A parer mio questa è la modalità idonea per la privacy e per non sovraccaricare il server SMTP.
Infatti, non trovo giusto che il destinatario sia in grado di visualizzare 50 indirizzi e-mail nella casella "destinatario" mentre, utilizzando questo sistema, visualizza solo il proprio.

In caso di necessità sono in MSN dalle 09,00 alle 12,00 [email protected]
byeee
 
per il problema privacy, io metto gli indirizzi in copia per conoscenza nascosta quindi il destinatario vede solo il mio indirizzo alla voce TO.
probabilmente può funzionare anche in questo modo, a questo punto metto il destinatario direttamente alla voce TO e non in copia per conoscenza così nn ho neanche il problema di ricevere troppo email nella mia casella!

grazie mille per l'aiuto!
 
c'è un modo per proteggere la pagina del form per l'invio con username e password di modo che solo chi ha l'autorizzazione possa inviare la newsletter?
 
mi basta un unico username e password. vorrei che non fosse possibile accedere alla pagina semplicemente digitando l'url sulla barra del browser! spero di essermi spiegata :b
 
questa è la mia pagina newsletter.htm


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' deve essere valida.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' necessaria.\n'; }
} if (errors) alert('Inserire email valida:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>

<head>
<title></title>
<style type="text/css">
.style1
{
font-family: Arial;
}
</style>
</head>
<body>

<form action="mailing.asp" method="POST" name="form1" onSubmit="MM_validateForm('from','','RisEmail');return document.MM_returnValue">

<table style="width:50%;" class="style1">
<tr>
<td>

Da</td>
<td>
<input type="text" name="from" size="20" /></td>
</tr>
<tr>
<td>
Oggetto</td>
<td>
<input type="text" name="subject" size="20" /></td>
</tr>
<tr>
<td>
<span lang="it">Pagina da inviare</span></td>
<td>
<input type="text" name="newsletter" size="50" /></td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
<input type="submit" name="Submit" value="Invia" /></td>
</tr>

</table> </form>
</body>
</html>
 
Iniziamo..
crea una pagina chiamata login.asp
inserisci al suo interno il seguente codice:
Codice:
<%
' PRELEVA L'USERNAME E LA PASSWORD INSERITI
Username = Replace(Request.Form("username"), "'", "''")
Password = Replace(Request.Form("password"), "'", "''")
Action   = Request.Form("B1")

' CONTROLLA INNANZITUTTO SE E' STATO PASSATO UN VALORE
IF Username <> "" and Password <> "" then

	' QUI TROVI IL NOME UTENTE E PASSWORD DA TE IMPOSTATI
	UsernameImpostata = "nome"
	PasswordImpostata = "password"
	
		If Username = UsernameImpostata AND Password = PasswordImpostata Then
			' ok, i dati coincidono continuo
				Session("Loggato") = True
				Session("Username") = Username
		Else
			' altrimenti 
				Session("Loggato") = False
		End IF
	
IF Session("Loggato") = True then
' nome pagina protetta
	Response.Redirect "newsletter.asp"
Else
%>
<hr>
<p align="center"><b><font face="Verdana" size="2">Username/Password non corretti!</font></b></p>
<hr>
<%
End IF

End IF
%>
<p>&nbsp;</p>
<p align="center"><b><font face="Verdana" size="3">Sezioni Riservate - Login</font></b></p>
<form method="POST" action="login.asp">
  <div align="center">
    <center>
    <table border="0" width="61%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="50%"><font face="Verdana" size="2">Username:</font></td>
        <td width="50%"><input type="text" name="username" size="20"></td>
      </tr>
      <tr>
        <td width="50%"><font face="Verdana" size="2">Password:</font></td>
        <td width="50%"><input type="password" name="password" size="20"></td>
      </tr>
      <tr>
        <td width="100%" colspan="2">
          <p align="center"><input type="submit" value="Login" name="B1"><input type="reset" value="Reimposta" name="B2"></p></td>
      </tr>
    </table>
    </center>
  </div>
</form>
<p align="left">&nbsp;</p>

Personalizzazione:
Inserisci qua il nome/password da te scelti
' QUI TROVI IL NOME UTENTE E PASSWORD DA TE IMPOSTATI
UsernameImpostata = "nome"
PasswordImpostata = "password"
Se il login ha successo il sistema ti invia nella pagina da te protetta:
IF Session("Loggato") = True then
' nome pagina protetta
Response.Redirect "newsletter.asp"
Else
...ovviamente newsletter.asp dovrai cambiarlo con il nome file da proteggere.

-------------------------------------------
2° fase

devi inserire in testa alla pagina da proteggere il seguente codice:

Codice:
<%
' VERIFICHIAMO SE L'UTENTE E' IDENTIFICATO (LOGGATO)
    IF Session("Loggato") = False and Session("Username") = "" then
' UTENTE NON LOGGATO
' PORTA L'UTENTE NELLA PAGINA LOGIN.ASP
    Response.Redirect "login.asp"
End IF
%>

se vuoi a metà pagina inserisci questo:
Codice:
<p align="left"><b><font face="Verdana" size="3">Benvenuta e buon lavoro
<i> <%=Session("Username")%> </i></font></b></p>

:mavieni:
 

Discussioni simili