Avatar billede Slettet bruger
22. august 2004 - 19:32 Der er 12 kommentarer og
1 løsning

Bekræftigelses-mail med aktiveringslink. Hvordan?

Hejsa.

Ved tilmelding på mit website, kan personer tilmelde sig min nyhedsmail.
Disse personer tilmelder sig ved at skrive deres navn og mail-adresse (som jeg gemmer i min Access-database).
Deres mail-adresse ønsker jeg at sikre mig er helt korrekt, med en Bekræftigelses-mail.
Derfor ønsker jeg at tilsende en bekræftigelses-mail med et aktiveringslink, som de tilmeldte skal klikke på, for automatisk at tildele dem et password.
Dette password skal jo også genereres på en eller anden måde...

Men hvordan gør man det?

Jeg har ASP (foretrukkent scriftssprog), PHP og andre muligheder til rådighed.
Se den komplette liste for de komponenter og scriftssprog jeg har til rådighed: http://www.gullestrup.net/page/226/257/257/windowswebhotel.htm
Avatar billede Slettet bruger
22. august 2004 - 19:40 #1
Jeg undrer også over mail-systemet... kan jeg mon bare bruge min egen E-mail? Jeg har MS Outlook 2003 DK, men jeg er jo ikke altid online.
Burde det egentligt ikke være via en eller anden komponent som fx. JMail, eller...?
Avatar billede eagleeye Praktikant
22. august 2004 - 20:06 #2
Ja man bruger Jmail til at sende mail med du skal ikke bruge noget på din egen PC.

her noget kode, før en fil som kan hedde tilmeld.asp  Du skal havde rettet connection strengen så den passer med din database, samt tabelnavn og kolonnenavne. Hvis du ikke har en database fil kan du oprette en med
Tabel : nyhedsmail
id : autonummer
brugernavn : tekst
email : teskt
userpass : tekst
aktiv : tal  '0=ikke aktiv, 1 aktiv

I Jmail delen skal du havde rette denne linje til den mail server du må sende mail igennem fra dit domæne, det kan du få oplyst hos dit web-hotel, de har sikket skrevet det til dig i en mail, eller kan det ses på en supprt side.
    JMail.ServerAddress = "websmtp.domæne.dk"


<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
function lavPassword(antal)
  tilladtkarakter = "abcdefghijklmnopqrstuvwxyz1234567890"
  str = ""
  randomize
  for i = 1 to antal
    index = Int(rnd * len(tilladtkarakter))+1
    str = str & Mid(tilladtkarakter,index,1)
  next
  lavPassword = str
end function


  Set Conn = server.CreateObject("ADODB.Connection")
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
 
  brugernavn = replace(Request.Form("navn"),"'","")
  email = replace(Request.Form("email"),"'","")

  'tjek om email findes
  sql = "select * from nyhedsmail where email = '" & email & "'"
  Set rs=Conn.Execute(SQL)
  if rs.EOF then
    'bruges findes ikke.
    password = lavPassword(10)
    sql = "insert into nyhedsmail (aktiv, email, brugernavn, userpass) values (0, '" & email & "','" & brugernavn & "','" & password & "')"
    Conn.Execute(sql)

    Set JMail          = Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress = "websmtp.domæne.dk"
    JMail.Sender        = "admin@domæne.dk"
    JMail.Subject      = "Tak for tilmeldingen"
    JMail.AddRecipient  email
 
    str = "Hej " & vbCrLf
    str = str & "Du skal aktivere din bruge ved at gå ind på dette <a href=""http://www.domæne.dk/godkend.asp"">link</a>"
    str = str & vbcrLf
    str = str & "Dit password er : " & password
    str = str & vbCrstr
    str = str & "Hilsen web-master"
   
    JMail.Body = str
 
    JMail.Execute
 
    Conn.Close
    Set Conn = Nothing
    Set JMail = Nothing
    Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?tak") 
  end if
  Response.Redirect(Request.ServerVariables("SCRIPT_NAME"))
end if
%>
<html>
<head><title>Tilmeld nyheds brev</title></head>
<body>

<% if Request.QueryString = "tak" then %>
<center> Tak for din tilmelding du vil modtage en mail med dit password du skal bruge for at aktivere din bruger.</center>
<% else %>
<table>
<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="POST">
<tr><td>Navn: </td><td><input type="text" name="navn"></td></tr>
<tr><td>Email: </td><td><input type="text" name="email"></td></tr>
<tr><td colspan="2"><input type="submit" name="Tilmeld" value="Tilmeld"></td></tr>
</form>
</table>
<% end if %>
</body>
</html>
Avatar billede eagleeye Praktikant
22. august 2004 - 20:06 #3
denne kode skal i en fil som hedder godkend.asp


<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set Conn = server.CreateObject("ADODB.Connection")
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
   
  brugernavn = replace(Request.Form("navn"),"'","")
  password = replace(Request.Form("password"),"'","")

  'tjek om email findes
  sql = "select * from nyhedsmail where userpass = '" & password & "' AND brugernavn = '" & brugernavn & "'"
  Set rs=Conn.Execute(SQL)
  if not rs.EOF then
    sql = "update nyhedsmail set aktiv=1 where userpass = '" & password & "' AND brugernavn = '" & brugernavn & "'"
    Conn.Execute(sql)
    Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?tak")
  end if
  Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?fejl")
end if
%>

<html>
<head><title>Aktiver din bruger</title></head>
<body>

<% if Request.QueryString = "tak" then %>
<center> Tak din bruger er nu aktiveret.</center>
<% else %>
      <% if Request.QueryString = "fejl" then %>
        <center> Forkert brugernavn eller password, prøv igen.</center>
      <% end if %>
<table>
<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="POST">
<tr><td>Navn: </td><td><input type="text" name="navn"></td></tr>
<tr><td>Password: </td><td><input type="password" name="password"></td></tr>
<tr><td colspan="2"><input type="submit" name="Aktiver" value="Aktiver"></td></tr>
</form>
</table>
<% end if %>
</body>
</html>
Avatar billede Slettet bruger
22. august 2004 - 20:43 #4
Hejsa igen, eagleeye.

Det ser jo kanon ud!  :-)

2 hurtige ting:
1: Jeg har sendt en mail til mit webhotel om hvilken version af JMail der er installeret.  Hvilken version af JMail tager du udgangspunkt i?
2: Bliver der genereret et tilfældigt password, eller skal brugern selv finde et password? Personligt er jeg ligeglad.

Jeg arbejder lidt videre på det i aften.
Avatar billede eagleeye Praktikant
22. august 2004 - 20:53 #5
1. Tja det er en ældre version, jeg må erkende jeg ikke kan huke versions nummeret, men JMAil koden er 1-2 år gammel, så det skulle virker på de fleres Jmail komponenter rundt omkring. Jeg har ikke umiddelbart oplevet problemer med det :)

2. Ja det er et tilfældigt password, det bliver lavet i denne funktion:

function lavPassword(antal)
  tilladtkarakter = "abcdefghijklmnopqrstuvwxyz1234567890"
  str = ""
  randomize
  for i = 1 to antal
    index = Int(rnd * len(tilladtkarakter))+1
    str = str & Mid(tilladtkarakter,index,1)
  next
  lavPassword = str
end function


I denne linj laves passwordet. Lige nu er det på 10 karakter du kan ændre tallet hvis du vil havde et kortere eller længere password:
    password = lavPassword(10)
Avatar billede Slettet bruger
23. august 2004 - 10:59 #6
--> eagleeye:

Jeg har modtaget mailen fra mit webhotel: Der skal ikke aktiveres noget og alting burde virke fint, vedr. JMail.
Der er også vedlagt et eksempel som burde virke. Men jeg kan altså ikke lige overskue hvordan jeg skal flette det sammen...  så nu prøver jeg at lægge det herud, for måske du kan finde ud af det, eagleeye?


<%@LANGUAGE = VBSCRIPT%> <html>
<body>

<%

' Create the JMail message Object
set msg = Server.CreateOBject( "JMail.Message" )

' Set logging to true to ease any potential debugging
' And set silent to true as we wish to handle our errors ourself
msg.Logging = true
msg.silent = true

' Most mailservers require a valid email address
' for the sender
msg.From = "test@mydomain.com"
msg.FromName = "My Realname"

' Next we have to add some recipients.
' The addRecipients method can be used multiple times.
' Also note how we skip the name the second time, it
' is as you see optional to provide a name.
msg.AddRecipient "recipient@hisDomain.com", "His Name"
msg.AddRecipient "recipientelle@herDomain.com"


' The subject of the message
msg.Subject = "How you doin?"

' The body property is both read and write.
' If you want to append text to the body you can
' use JMail.Body = JMail.Body & "Hello world! "
' or you can use JMail.AppendText "Hello World! "
' which in many cases is easier to use.
'
' Note the use of vbCrLf to add linebreaks to our email
msg.Body = "Hello Jim" & vbCrLf & vbCrLf & "How's it going? ..."

' There.. we have now succesfully created our message.
' Now we can either send the message or save it
' as a draft in a Database.
' To save the message you would typicly use the
' Message objects Text property
' to do something like this:
'
' SaveMessageDraft( msg.Text )
' Note that this function call is only an
' example. The function does not exist by
' default, you have to create it yourself.


' To send the message, you use the Send()
' method, which takes one parameter that
' should be your mailservers address
'
' To capture any errors which might occur,
' we wrap the call in an IF statement
if not msg.Send("mail.myDomain.net" ) then
    Response.write "<pre>" & msg.log & "</pre>"
else
    Response.write "Message sent succesfully!"
end if


' And we're done! the message has been sent.

%>
</body>
</html>
Avatar billede eagleeye Praktikant
23. august 2004 - 22:28 #7
Ok, her i denne kode er det sat ind, du skal stadig lige havde rette i mail serveren i denne linje i kodne :
' Her skal du rette og skrive den mail server du kan sende mail igennem fra din web side.
if not msg.Send("mail.myDomain.net" ) then


Her er koden til tilmeld.asp :

<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
function lavPassword(antal)
  tilladtkarakter = "abcdefghijklmnopqrstuvwxyz1234567890"
  str = ""
  randomize
  for i = 1 to antal
    index = Int(rnd * len(tilladtkarakter))+1
    str = str & Mid(tilladtkarakter,index,1)
  next
  lavPassword = str
end function


  Set Conn = server.CreateObject("ADODB.Connection")
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
 
  brugernavn = replace(Request.Form("navn"),"'","")
  email = replace(Request.Form("email"),"'","")

  'tjek om email findes
  sql = "select * from nyhedsmail where email = '" & email & "'"
  Set rs=Conn.Execute(SQL)
  if rs.EOF then
    'bruges findes ikke.
    password = lavPassword(10)
    sql = "insert into nyhedsmail (aktiv, email, brugernavn, userpass) values (0, '" & email & "','" & brugernavn & "','" & password & "')"
    Conn.Execute(sql)

set msg = Server.CreateOBject( "JMail.Message" )
msg.Logging = true
msg.silent = true
msg.From = "test@mydomain.com"
msg.FromName = "My Realname"

msg.AddRecipient  email

msg.Subject = "Tak for tilmeldingen"

    str = "Hej " & vbCrLf
    str = str & "Du skal aktivere din bruge ved at gå ind på dette <a href=""http://www.domæne.dk/godkend.asp"">link</a>"
    str = str & vbcrLf
    str = str & "Dit password er : " & password
    str = str & vbCrstr
    str = str & "Hilsen web-master"

msg.Body = str

' Her skal du rette og skrive den mail server du kan sende mail igennem fra din web side.
if not msg.Send("mail.myDomain.net" ) then
    Response.write "<pre>" & msg.log & "</pre>"
else
    Response.write "Message sent succesfully!"
end if
 
    Conn.Close
    Set Conn = Nothing
    Set msg = Nothing
    Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?tak") 
  end if
  Response.Redirect(Request.ServerVariables("SCRIPT_NAME"))
end if
%>
<html>
<head><title>Tilmeld nyheds brev</title></head>
<body>

<% if Request.QueryString = "tak" then %>
<center> Tak for din tilmelding du vil modtage en mail med dit password du skal bruge for at aktivere din bruger.</center>
<% else %>
<table>
<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="POST">
<tr><td>Navn: </td><td><input type="text" name="navn"></td></tr>
<tr><td>Email: </td><td><input type="text" name="email"></td></tr>
<tr><td colspan="2"><input type="submit" name="Tilmeld" value="Tilmeld"></td></tr>
</form>
</table>
<% end if %>
</body>
</html>
Avatar billede Slettet bruger
24. august 2004 - 18:18 #8
Hejsa igen, eagleeye.  :-)

Nu fik jeg det til at fungere! Tak!!!

Dog er der blot 3 små ting tilbage:

Til orientering:
Du har tilpasset scriptet til Jmail Professional ver. 4.3.0.0
Efter oplysning fra mit webhotel. Det er bare til orientering.  :-)

Problem A:
Hvis en bruger med samme E-mailadresse allerede er tilmeldt, så skal fx. skrives:
"Du er allerede tilmeldt med den E-mailadresse. Gå tilbage til tilmeldingssiden og få tilsendt et nyt password, hvis du bare har glemt det."

Problem B:
Når brugeren validerer sin konto med sit password, skal brugeren viderestilles til sin helt egen side:
Siden kunne passende hedde brugerens password: m2ry2tl96y.asp (som måske også skal gemmes i databasen?
Er det muligt? Eller har du en bedre ide?
Avatar billede Slettet bruger
24. august 2004 - 18:19 #9
Du må også gerne lige skrive et svar, så jeg kan tildele dig points for dit fine arbejde!  :-)
Avatar billede eagleeye Praktikant
24. august 2004 - 18:29 #10
Først tilmeld.asp


<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
function lavPassword(antal)
  tilladtkarakter = "abcdefghijklmnopqrstuvwxyz1234567890"
  str = ""
  randomize
  for i = 1 to antal
    index = Int(rnd * len(tilladtkarakter))+1
    str = str & Mid(tilladtkarakter,index,1)
  next
  lavPassword = str
end function


  Set Conn = server.CreateObject("ADODB.Connection")
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
 
  brugernavn = replace(Request.Form("navn"),"'","")
  email = replace(Request.Form("email"),"'","")

  'tjek om email findes
  sql = "select * from nyhedsmail where email = '" & email & "'"
  Set rs=Conn.Execute(SQL)
  if rs.EOF then
    'bruges findes ikke.
    password = lavPassword(10)
    sql = "insert into nyhedsmail (aktiv, email, brugernavn, userpass) values (0, '" & email & "','" & brugernavn & "','" & password & "')"
    Conn.Execute(sql)

set msg = Server.CreateOBject( "JMail.Message" )
msg.Logging = true
msg.silent = true
msg.From = "test@mydomain.com"
msg.FromName = "My Realname"

msg.AddRecipient  email

msg.Subject = "Tak for tilmeldingen"

    str = "Hej " & vbCrLf
    str = str & "Du skal aktivere din bruge ved at gå ind på dette <a href=""http://www.domæne.dk/godkend.asp"">link</a>"
    str = str & vbcrLf
    str = str & "Dit password er : " & password
    str = str & vbCrstr
    str = str & "Hilsen web-master"

msg.Body = str

' Her skal du rette og skrive den mail server du kan sende mail igennem fra din web side.
if not msg.Send("mail.myDomain.net" ) then
    Response.write "<pre>" & msg.log & "</pre>"
else
    Response.write "Message sent succesfully!"
end if
 
    Conn.Close
    Set Conn = Nothing
    Set msg = Nothing
    Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?tak") 
  else
    Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?findes")
  end if
  Response.Redirect(Request.ServerVariables("SCRIPT_NAME"))
end if
%>
<html>
<head><title>Tilmeld nyheds brev</title></head>
<body>

<% if Request.QueryString = "tak" then %>
<center> Tak for din tilmelding du vil modtage en mail med dit password du skal bruge for at aktivere din bruger.</center>
<% elseif Request.QueryString = "findes" then %>
<center> Du er allerede tilmeldt med den E-mailadresse. Gå tilbage til tilmeldingssiden og få tilsendt et nyt password, hvis du bare har glemt det.</center>
<% else %>
<table>
<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="POST">
<tr><td>Navn: </td><td><input type="text" name="navn"></td></tr>
<tr><td>Email: </td><td><input type="text" name="email"></td></tr>
<tr><td colspan="2"><input type="submit" name="Tilmeld" value="Tilmeld"></td></tr>
</form>
</table>
<% end if %>
</body>
</html>
Avatar billede eagleeye Praktikant
24. august 2004 - 18:33 #11
Ja man kan få den til at redirecte til <password>.asp siden. Er det meningne hver bruger skal havde sin engen side eller? normalt har man jo en bruger side og så fylder man folk oplysninger ind på siden fra en database sådan man ikke har en side pr. bruger. Nu ved jeg ikke lige hvad du har bruge for, det afhænger det jo mest af :)


Så godkend.asp


<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then

  Set Conn = server.CreateObject("ADODB.Connection")
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
   
  brugernavn = replace(Request.Form("navn"),"'","")
  password = replace(Request.Form("password"),"'","")

  'tjek om email findes
  sql = "select * from nyhedsmail where userpass = '" & password & "' AND brugernavn = '" & brugernavn & "'"
  Set rs=Conn.Execute(SQL)
  if not rs.EOF then
    sql = "update nyhedsmail set aktiv=1 where userpass = '" & password & "' AND brugernavn = '" & brugernavn & "'"
    Conn.Execute(sql)
    'Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?tak")
    Response.Redirect("" & password & ".asp")
  end if
  Response.Redirect(Request.ServerVariables("SCRIPT_NAME") & "?fejl")
end if
%>

<html>
<head><title>Aktiver din bruger</title></head>
<body>

<% if Request.QueryString = "tak" then %>
<center> Tak din bruger er nu aktiveret.</center>
<% else %>
      <% if Request.QueryString = "fejl" then %>
        <center> Forkert brugernavn eller password, prøv igen.</center>
      <% end if %>
<table>
<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="POST">
<tr><td>Navn: </td><td><input type="text" name="navn"></td></tr>
<tr><td>Password: </td><td><input type="password" name="password"></td></tr>
<tr><td colspan="2"><input type="submit" name="Aktiver" value="Aktiver"></td></tr>
</form>
</table>
<% end if %>
</body>
</html>
Avatar billede Slettet bruger
24. august 2004 - 18:38 #12
Det ser flot ud!!! Rigeligt! Du er bare super! 

Igen: Mange tak!  :-)

Kaster points efter dig med det samme.  :-)
Avatar billede Slettet bruger
24. august 2004 - 18:49 #13
Nu kommer så næste problem, men jeg opretter lige et nyt spørgsmål, for at gøre det helt korrekt iflg. Ekspertens regler og for at tildele dig endnu flere points, hvis du altså har tid/lyst til at løse det også.  :-)

Her er linket:
http://www.eksperten.dk/spm/532636
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester