asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 7991
ASPCode.it - Store

  > > Articoli

Newsletter con JMail

Data di pubblicazione: 25/09/2006        Voto della community: 4,33 (Votanti: 1)

Lo scopo di questo articolo è creare una newsletter utilizzando il componente w3 JMail v 4.5 sviluppato dalla Dinamic Development con la possibilità di allegare un file; è possibile scaricare la versione free di questo componente dal sito del produttore.

Iniziamo con la creazione il DataBase dal quale andremo a recuperare gli indirizzi degli utenti ai quali dovremo inviare le nostre E-Mail e nel quale andremo a memorizzare la newsletter. Creiamo le tabelle utenti e newsletter così strutturate:

utenti
  idUser (Contatore) Chiave Primaria, contiene l’identificativo dell’utente
  cognome (Testo) contiene il cognome dell’utente
  nome (Testo) contiene il nome dell’utente
  email (Testo) contiene l’indirizzo E-Mail al quale verrà inviata la newsletter

newsletter
  id (Contatore) Chiave Primaria, contiene l’identificativo della newsletter
  data (Testo) contiene la data in cui è stata spedita l’E-Mail
  oggetto (Testo) contiene l’oggetto della E-Mail
  testo (Memo) contiene il testo della E-Mail
  allegato (Memo) contiene il percorso locale ed il nome del file che è stato eventualmente allegato

Per semplificare il tutto i campi sono tutti di tipo Testo o Memo.

Passiamo ora alla pagina per l’invio e l’elaborazione della nostra newsletter: newsletter.asp.

<%
oggetto = replace(Request.Form("oggetto"), "'", "''")
corpo = replace(Request.Form("corpo"), "'", "''")
allegato = Request.Form("allegato")

if oggetto<>"" and corpo<>"" then
  Dim conn, sql, rs
  Set conn = Server.CreateObject("ADODB.Connection")
  conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("DB.mdb")

  sql = "SELECT * FROM utenti"
  Set rs = conn.Execute(sql)

  if rs.eof = false then
    smtp_server_address = "mail.mioserver"
    Response.Buffer = True
    Set Jmail = Server.CreateOBject( "JMail.Message" )
    JMail.From = "mioindirizzo@mioserver"
    do while not rs.eof
      Jmail.AddRecipientBCC rs("email")
      response.Write("Inviato a: " & rs("cognome") & " " & rs("nome") & "<br>")
      rs.movenext
    loop

    JMail.Subject = "Newsletter Test: " & oggetto

    if allegato<>"" then
      JMail.AddAttachment allegato
      set allegati = JMail.Attachments
    end if

    JMail.Body = corpo
    JMail.Priority = 1

    If Not Jmail.Send(smtp_server_address) then
      Response.write ("Errore/i generati durante l'invio:<br>" & Jmail.log)
    Else
      Set JMail = Nothing
      Response.Write("<br><br>Newsletter inviata correttamente")

      allegato = replace(Request.Form("allegato"), "'", "''")

      sql = "insert into newsletter (data, oggetto, testo, allegato) values ('" & now & "','" & oggetto & "','" & corpo & "','" & allegato & "')"
      Set rs_inserisco = conn.Execute(sql)
      Response.Write("<br>Newsletter memorizzata nel DataBase per lo storico")

    End If
    Set JMail = Nothing
  else
    response.Write("Non è presente nessun utente")
  end if
else
%>

<html>
<head>
  <title>Newsletter e JMail</title>
</head>

<body>
  <form method="post" action="">
    <table width="500" >
    <tr>
      <td width="90">Oggetto</td>
      <td width="398"><input type="text" name="oggetto" /></td>
    </tr>
    <tr>
      <td width="90" valign="top">Messaggio</td>
      <td><textarea name="corpo" rows="10"></textarea></td>
    </tr>
    <tr>
      <td width="90" valign="top">Allega File</td>
      <td><input type="file" name="allegato"/></td>
    </tr>
    <tr>
      <td colspan="2"><center><input value="Invia" type="submit"/>  <input value="Reset" type="reset"/></center></td>
    </tr>
    </table>
  </form>
</body>
</html>
<%end if%>

Analizziamo i blocchi di codice principali:

oggetto = replace(Request.Form("oggetto"), "'", "''")
corpo = replace(Request.Form("corpo"), "'", "''")
allegato = Request.Form("allegato")

recupero le informazioni da inviare e raddoppio gli apici di oggetto e corpo per evitare che vengano generati errori;

if oggetto<>"" and corpo<>"" then

controllo se sono stati valorizzati o meno i campi oggetto e corpo; se non contengono valori vuol dire che la pagina viene caricata per la prima volta e quindi viene visualizzato il form html, in caso contrario le informazioni sono state già inserite e quindi si passa alla elaborazione;

Dim conn, sql, rs
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("DB.mdb")

sql = "SELECT * FROM utenti"
Set rs = conn.Execute(sql)

creo la connessione al DataBase e seleziono tutti gli utenti presenti nella tabella utenti;

smtp_server_address = "mail.mioserver"

specifico il server SMTP che verrà utilizzato per l’invio delle E-Mail;

Set Jmail = Server.CreateOBject( "JMail.Message" )
JMail.From = "mioindirizzo@mioserver"

creo l’oggetto JMail e specifico l’indirizzo che verrà utilizzare per spedire l’E-Mail;

do while not rs.eof
  Jmail.AddRecipientBCC rs("email")
  rs.movenext
loop

aggiungo gli indirizzi E-Mail prelevati dal DataBase dei destinatari della newsletter, il metodo AddRecipientBCC permette di visualizzare solo l’indirizzo del destinatario e di nascondere gli altri, se si volesse far in modo di far visualizzare tutti gli indirizzi E-Mail a tutti i destinatari bisogna utilizzare il metodo AddRecipient;

JMail.Subject = "Newsletter Test: " & oggetto

imposto l’oggetto della E-Mail;

if allegato<>"" then
  JMail.AddAttachment allegato
  set allegati = JMail.Attachments
end if

se ci sono allegati li aggiungo all’E-Mail;

JMail.Body = corpo
JMail.Priority = 1

imposto il corpo del messaggio e la priorità; per poter inviare un’E-Mail in formato HTML utilizzare la proprietà .HTMLBody;

Jmail.Send(smtp_server_address)

invio l’E-Mail;

sql = "insert into newsletter (data, oggetto, testo, allegato) values ('" & now & "','" & oggetto & "','" & corpo & "','" & allegato & "')"
Set rs_inserisco = conn.Execute(sql)

infine inserisco la newsletter appena inviata nella tabella newsletter per poter avere uno storico delle stesse.

Download

Cliccando sul link seguente è possibile scaricare il codice di esempio e il database relativo allo script presentato in questo articolo.




Utenti connessi: 7991