Bygg en egen webbaserad 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å: de kodexempel du ser här på sidorna är inte i fas utan dom är utbrytna så du får lägga in det på rätt ställe för att få det fungera.
Innehåll
» »
»
»
»
»
Relaterade artiklar
» Aktivera CDONTS på din nt/win2k server
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
Prenumerera
<;tr>
<;tr>
v/table>
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, (true/false)
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 True eller False som behövs i accessdatabasens true/false fält
If Not Rst.Eof Then
Response.Write "Mailadressen finns redan i databasen"
Response.End
Else
If accept = "1" Then status = True else status = False
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 = True 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
namn: epost: reklam:
Rubrik: Meddelande:
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 = True "
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
%>
Avslutningsvis
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. Se också relaterade artiklar ovan för att läsa mer om ämnet
Johan Moberg
Om jag exempelvis har 5 st prenumeranter så får den första prenumeranten som ligger i databasen ett vanligt mail dvs. ett som är som det ska vara. Men den andra prenumeranten får ett mail fast med dubbelt innehåll och det tredje prenumeranten 3 gånger innehåll osv. varför blir det så?