Bygg en mailingtjänst
Förord
Det är många som frågat om hur man skriver en mailinglista och jag tänkte försöka förklara hur man skulle kunna göra det. I denna artikel använder jag två formulär, ett registreringsformulär och ett administrativt verktyg för att kunna göra mailutskicket. Tänk på: den ljusgråa koden på sidorna visar bara vart den aktuella koden skall in, så kopiera inte hela sidorna och tro att det skall fungera direkt.Vi börjar med formuläret
Här har jag ritat upp ett enkelt formulär i html där det finns tre val, namn, epost samt en checkbox om man vill ha prenumeration eller inte. Börja med att designa upp en sida innehållande dessa delar och kalla sidan mail.asp:
Nu är det dags att börja titta på hur vi skall lagra den information som användarna skriver. Vi tar en access-databas som du kanske redan har och skapar en ny tabell i den. Tabellen döper vi till Mailinglist och lägger till följande fält:
Id, räknare
Name, text 50
Email, text 50
Accept, (ja/nej)
Nu när databasen är färdig så är det dags att börja skriva den programkoden som adderar en post när besökaren lägger in sin information.
Innan vi fortsätter så skall vi kontrollera att personens mailadress inte redan finns i tabellen så det bara finns unika poster. Vi skulle kunna sätta en unikflagga på fältet för email men för att slippa felhantering i ASP så gör vi istället på detta sätt.
Vi börjar med att ta reda på om submit-knappen är tryckt, därefter börjar vi med att ställa en sql-fråga till databasen för att kolla om den angivna mailadressen redan finns.
Om inte mailadressen fanns så adderar vi posten till databasen. Detta gör vi med ett sql-script. Här ställer vi även om flaggan för accept så det blir J eller N som behövs i accessdatabasens ja/nej fält.
Nu har vi lyckats addera posten och det är dags att börja titta på hur vi skall göra för att kunna skicka ett mail till alla dom som nu har status = J och finns i tabellen.
Här är det nu dags att skriva ett brev och sedan posta det till alla dom som vill ha det. Vi börjar med att göra en ny html-sida som innehåller en textruta, en textbox samt en submit-knapp för att kunna posta mailet. Klistra in följande htmlkod och döp sidan till send.asp.
Innan du använder CDONTS så bör du förvissa dig om att SMTP-tjänsten är konfigurerad i IIS. Om du är osäker på något så ta kontakt med din webbansvarige.
Vi börjar med att öppna databasen, välja ut alla poster ur tabellen som följer kriteriet att dom vill ha mail och sedan så loopar vi igenom posterna. För varje post så skapas ett mail och skickas. När du nu postar till alla användare så är det så att man måste för varje mail frigöra cdonts-objektet för annars så går det inte iväg korrekt.
För att jag skall kunna veta vad ni tycker om kursen så ber jag dig rösta uppe till höger. Skicka gärna ett iMail om du vill kommentera något som är felaktigt eller du tycker borde förtydligas ytterligare.
Här har jag ritat upp ett enkelt formulär i html där det finns tre val, namn, epost samt en checkbox om man vill ha prenumeration eller inte. Börja med att designa upp en sida innehållande dessa delar och kalla sidan mail.asp:
Prenumerera
Nu är det dags att börja titta på hur vi skall lagra den information som användarna skriver. Vi tar en access-databas som du kanske redan har och skapar en ny tabell i den. Tabellen döper vi till Mailinglist och lägger till följande fält:
Id, räknare
Name, text 50
Email, text 50
Accept, (ja/nej)
Nu när databasen är färdig så är det dags att börja skriva den programkoden som adderar en post när besökaren lägger in sin information.
Godkänn inte dubletter
Innan vi fortsätter så skall vi kontrollera att personens mailadress inte redan finns i tabellen så det bara finns unika poster. Vi skulle kunna sätta en unikflagga på fältet för email men för att slippa felhantering i ASP så gör vi istället på detta sätt.Vi börjar med att ta reda på om submit-knappen är tryckt, därefter börjar vi med att ställa en sql-fråga till databasen för att kolla om den angivna mailadressen redan finns.
<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "min_dsn"
btn = LCase(Request("btn"))
If Btn = "prenumerera" Then
name = Request("name")
email = Request("email")
accept = Request("accept")
sql = "select email from mailinglist where email = '" & email & "'"
Set Rst = Con.Execute SQL
If Not Rst.Eof Then
Response.Write "Mailadressen finns redan i databasen"
Response.End
Else
' ... se nedan!
End If
End If
Set Con = Nothing
%>
Prenumerera
Adderar posten till databasen
Om inte mailadressen fanns så adderar vi posten till databasen. Detta gör vi med ett sql-script. Här ställer vi även om flaggan för accept så det blir J eller N som behövs i accessdatabasens ja/nej fält.
If Not Rst.Eof Then
Response.Write "Mailadressen finns redan i databasen"
Response.End
Else
if accept = "1" then status = "J" else status = "N"
sql = "insert into mailinglist (name, email, accept) values(" & _
"'" & name & "'," & _
"'" & email & "'," & _
"'" & status & "',"
con.execute sql
End If
Nu har vi lyckats addera posten och det är dags att börja titta på hur vi skall göra för att kunna skicka ett mail till alla dom som nu har status = J och finns i tabellen.
Bygg ett administrationsformulär
Här är det nu dags att skriva ett brev och sedan posta det till alla dom som vill ha det. Vi börjar med att göra en ny html-sida som innehåller en textruta, en textbox samt en submit-knapp för att kunna posta mailet. Klistra in följande htmlkod och döp sidan till send.asp.
Maila mig
Teknik för att posta till alla
Innan du använder CDONTS så bör du förvissa dig om att SMTP-tjänsten är konfigurerad i IIS. Om du är osäker på något så ta kontakt med din webbansvarige.Vi börjar med att öppna databasen, välja ut alla poster ur tabellen som följer kriteriet att dom vill ha mail och sedan så loopar vi igenom posterna. För varje post så skapas ett mail och skickas. När du nu postar till alla användare så är det så att man måste för varje mail frigöra cdonts-objektet för annars så går det inte iväg korrekt.
<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "min_dsn"
btn = LCase(Request("btn"))
If Btn = "skicka" Then
subject = Request("subject")
message = Request("message")
sql = "select name, email from mailinglist where accept = 'J' "
Set Rst = Con.Execute SQL
If Not Rst.Eof Then
Do While Not Rst.Eof
antal = antal + 1
Set cdonts = Server.CreateObject("CDONTS.NewMail")
cdonts.from = "jag@min_server.se"
cdonts.to = rst("email")
cdonts.subject = subject
cdonts.message = message
cdonts.send
set cdonts=nothing
Rst.MoveNext
Loop
Response.Write "Mailet skickades till " & antal & " mottagare."
Else
Response.Write "Det finns inga prenumeranter som vill ha brev ännu!"
End If
End If
Set Con = Nothing
%>
Jonas Boman
Är inte att rekommendera att göra en loop när man har många (>1000) adresser. Webbhotellen tycker inte om det heller då det är "onödig" belastning på webbservern. Jag skall skriva en artikel om hur man skapar en subrutin för snabb mailhantering.