Avatar billede snebolle Nybegynder
04. oktober 2002 - 16:24 Der er 27 kommentarer og
1 løsning

Skal automatisk sende e-mail

Hej,
Jeg skal have lavet en glemt password funktion som automatisk sender oplysninger til brugerens e-mail. Ligeledes har jeg en formular som brugerne skal bruge til at blive medlem. Den smider så info ind i databasen men den skal også sende det til den nye bruger.

Jeg har skrevet to forskellige spørgsmål på én gang, fordi jeg går ud fra de næsten er ens.

Er der nogle som kan hjælpe mig igang eller mere til? fordi jeg har nogle bøger som jeg kigger i men kan ikke rigtig få det til at virker :(

Mvh René
Avatar billede hbhansen Nybegynder
04. oktober 2002 - 16:31 #1
Jeg har en asp medlems fil du kan prøve at kigge på !
Avatar billede snebolle Nybegynder
04. oktober 2002 - 16:37 #2
Okay, jeg kan da prøve at se om det kan bruges. Du kan sende den til rene@itkurven.dk hvis du ikke vil ligge den online.
Avatar billede eagleeye Praktikant
04. oktober 2002 - 16:44 #3
Har du mulighed for bruge komponenten JMail til at sende mail, for så kan jeg vise et par eksempler..
Avatar billede snebolle Nybegynder
04. oktober 2002 - 18:28 #4
jep jeg har JMail adgang.
Avatar billede eagleeye Praktikant
04. oktober 2002 - 18:33 #5
Her er form til en Glemt Password form:

<table border="1">
<form method="post" action="sendpassword.asp" name="sendpassword">
  <tr><td colspan="2" align="center">Jeg har glemt mit password, send det til mig.</td></tr>
  <tr><td>E-mail:</td><td><input name="email"></td></tr>
  <tr><td colspan="2" align="center"><input type="submit" value="Send" name="Action"></td></tr>
</form>
</table>

Og så koden som sender mailen ud:

<HTML>
<head>
<META HTTP-EQUIV=Refresh CONTENT="5; URL=login.asp">
</head>
<body><center>
<%
function fixSring(strInput)
  if len(strInput) > 0 then
    outString = replace(outString,"'","''")
    fixSring = outString
  else
    fixSring = strInput
  end if
end function

if Request.ServerVariables("REQUEST_METHOD") = "POST" then
  'Inkulder database forbindelsen.
  %>
  <!--#include file="dsn.asp"-->
  <%

  Set rs = Server.CreateObject("ADODB.RecordSet")

  email = fixSring(Request.Form("email"))
 
  strSQL= "SELECT * FROM dp_members WHERE email = '" & email & "';"

  Set rs = Conn.Execute (strSQL)

  if not rs.EOF then
    'send password til brugeren
    Set JMail= Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress = "websmtp.DIN_SERVER.dk"
    JMail.Sender        = "admin@xxxxx.dk"
    JMail.SenderName    = "xxxxx Forum"
    JMail.Subject      = "Password til xxxxx forum"
    JMail.AddRecipient  rs("email")
    JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
 
    BodyText = "Du har bedt om at få tilsendt dit password til xxxxx Forum." & vbCrLf
    BodyText = BodyText & "Dit password er: " & rs("userpassword")
   
    JMail.Body = BodyText
   
    JMail.Silent = true
    JMail.Execute
    Set JMail = Nothing 

    Response.Write "En mail med dit password er send til dig."
  else
    Response.Write "kunne ikke finde bruger oplysninger."
  end if

  Conn.Close
else
  Response.Redirect("login.asp")
end if
%>
<br><br>
Du vil automatisk bliver stillet om til login siden inden for 5 sekuner.
</center>
</body>
</HTML>
Avatar billede eagleeye Praktikant
04. oktober 2002 - 18:39 #6
Her er script som sender en mail ud når man opretter sig på siten:

Ført tabellen med en form:

<table border="1">
<form method="post" action="opret.asp" name="newmember">
  <tr><td colspan="2">Jeg vil gerne oprettes som bruger af XXXX forum.</td>
  <tr><td>Brugernavn</td><td><input name="username"></td></tr>
  <tr><td>Password</td><td><input name="password"></td></tr>
  <tr><td>Navn:</td><td><input name="realname"></td></tr>
  <tr><td>Email:</td><td><input name="email"></td></tr> 
  <tr><td colspan="2" align="center"><input type="submit" value="Tilmeld" name="Action"></td></tr>
</form>
</table> 

Og så koden som sender mailen ud.:

<HTML>
<head>
<META HTTP-EQUIV=Refresh CONTENT="5; URL=login.asp">
</head>
<body><center>
<%
function fixString(strInput)
  if len(strInput) > 0 then
    outString = replace(outString,"'","''")
    fixString = outString
  else
    fixString = strInput
  end if
end function

if Request.ServerVariables("REQUEST_METHOD") = "POST" then
  %>
  <!--#include file="dsn.asp"-->
  <%
  Set rs = Server.CreateObject("ADODB.RecordSet")

  brugernavn = fixString(Request.Form("username"))
  password = fixString(Request.Form("password"))
  rigtignavn = fixString(Request.Form("realname"))
  email = fixString(Request.Form("email"))
 
  strSQL= "SELECT * FROM dp_members WHERE username = '" & brugernavn & "' OR email = '" & email & "';"
  Set rs = Conn.Execute (strSQL)

  if (rs.EOF AND rs.BOF) then
    'OPRET BRUGERTEET
   
    strSQL = "INSERT INTO dp_members (username, userpassword, realname, email) "
    strSQL = strSQL & "VALUES ("
    strSQL = strSQL & "'" & brugernavn & "',"
    strSQL = strSQL & "'" & password & "',"
    strSQL = strSQL & "'" & rigtignavn & "',"
    strSQL = strSQL & "'" & email & "'"
    strSQL = strSQL & ");"
   
    conn.execute(strSQL)
   
SendMail = true
if SendMail = true then
      Set JMail= Server.CreateObject("JMail.SMTPMail")
      JMail.ServerAddress = "websmtp.DIN_SIDE.dk"
      JMail.Sender        = "admin@xxxx.dk"
      JMail.SenderName    = "xxxx Forum"
      JMail.Subject      = "Velkommen til xxxx forum"
      JMail.AddRecipient  email
      JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
 
      BodyText = "Hej" & vbCrLf & vbCrLf
      BodyText = BodyText & "Du er nu registrert som bruger af xxxx forum." & vbCrLf
      BodyText = BodyText & vbCrLf & vbCrLf
      BodyText = BodyText & "Med Venlig Hilsen" & vbCrLf
      BodyText = BodyText & "    Admin XXXXXX Forum"   
 
      JMail.Body = BodyText
      JMail.Silent = true
      JMail.Execute
      Set JMail = Nothing 
end if

      Response.Write "Du er nu oprettet som bruger du vil modtage en email med ekstra information."
    else
      Response.Write "Brugernavnet er taget eller der er en bruger med samme email adresse, prøv et andet."
    end if
 
  Conn.Close
else
  Response.Redirect("login.asp")
end if
%>
<br><br>
Du vil automatisk bliver stillet om til login siden inden for 5 sekuner.
</center>
</body>
</HTML>
Avatar billede snebolle Nybegynder
04. oktober 2002 - 18:58 #7
Kanon, jeg vil lige lege lidt med det i aften og i morgen. Så skal jeg nok vende tilbage hvis jeg for problemer.
Avatar billede eagleeye Praktikant
04. oktober 2002 - 19:01 #8
Ok.. Bare spørg, jeg er godt nok ikke hjemme ret meget længere i aften :)
Avatar billede snebolle Nybegynder
04. oktober 2002 - 22:41 #9
hbhansen >> jeg syntes slet ikke jeg kan få din kode til at vise en fejl er noget. Så jeg har lidt svært ved at komme videre med den :(

eagleeye >> Her i starter snakker jeg kun om den første kode du skrev så vi kan få den på plads først :) Har du en idé om hvad fejlen kan være når den skriver "kunne ikke finde bruger oplysninger." Også selvom jeg skriver en e-mail som er i databasen ??
Avatar billede eagleeye Praktikant
05. oktober 2002 - 09:39 #10
Hvis der findes en email i databasen så skulle den gerne finde den, det er denne SQL sætning og hvis den ikke finder en email skrives den tekst ud:

strSQL= "SELECT * FROM dp_members WHERE email = '" & email & "';"

Og alt efter havd du har rettet den til så vil den se anderledes ud.
Prøv evt ligefør Set rs = Conn.execute(strSQL) at indsætte:

Response.write strSQL

og se der står rigtigt email adresse i SQL sætningen.
Avatar billede snebolle Nybegynder
05. oktober 2002 - 12:44 #11
Ja så skriver den
SELECT * FROM bruger WHERE brugeremail = '';kunne ikke finde bruger oplysninger.

Du vil automatisk bliver stillet om til login siden inden for 5 sekuner

Hvis jeg sender dig koden og min databse vil du så kigger på det ? Fordi jeg tror der er en skrive fejl eller noget. Og det har du nok lidt nemmere ved at finde.

Skriv lige din e-mail
Avatar billede eagleeye Praktikant
05. oktober 2002 - 19:22 #12
Den SQL jeg har hvade:
strSQL= "SELECT * FROM dp_members WHERE email = '" & email & "';"

variablen email hendter jeg i linien lige ovenover og sættes lige med Request.Form("navn_på_input_feltet")

email = fixSring(Request.Form("email"))

Så det kunne tyde på at den ikke får hendtet/læst form feltet rigtigt.

min email adresse er: eagleeye@c.dk
Avatar billede eagleeye Praktikant
07. oktober 2002 - 22:07 #13
Prøv lige at skifte koden ud i sendpassword med alt dette, der havde sneget sig en fejl ind i functioen fixString, det må du undskylde...:


<HTML>
<head>
<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
<META HTTP-EQUIV=Refresh CONTENT="5; URL=login.asp">
</head>
<body><center>
<%
function fixString(strInput)
  if len(strInput) > 0 then
    outString = replace(strInput,"'","''")
    fixString = outString
  else
    fixString = strInput
  end if
end function

if Request.ServerVariables("REQUEST_METHOD") = "POST" then
  %>
  <%
  strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("bruger.mdb")
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open strDSN

  Set rs = Server.CreateObject("ADODB.RecordSet")

  email = fixString(Request.Form("email"))
 
  strSQL= "SELECT * FROM bruger WHERE brugeremail = '" & email & "';"

    Response.write strSQL

  Set rs = Conn.Execute (strSQL)

  if not rs.EOF then
    'send password til brugeren
    Set JMail= Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress = "mail.3dekspert.dk"
    JMail.Sender        = "info@3dekspert.dk"
    JMail.SenderName    = "3Dekspert.dk"
    JMail.Subject      = "Password til 3Dekspert.dk"
    JMail.AddRecipient  rs("email")
    JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
 
    BodyText = "Du har bedt om at få tilsendt dit password til 3Dekspert.dk" & vbCrLf
    BodyText = BodyText & "Dit password er: " & rs("brugerKode")
   
    JMail.Body = BodyText
   
    JMail.Silent = true
    JMail.Execute
    Set JMail = Nothing 

    Response.Write "En mail med dit password er send til dig."
  else
    Response.Write "kunne ikke finde bruger oplysninger."
  end if

  Conn.Close
else
  Response.Redirect("login.asp")
end if
%>
<br><br>
Du vil automatisk bliver stillet om til login siden inden for 5 sekuner.
</center>
</body>
</HTML>
Avatar billede eagleeye Praktikant
07. oktober 2002 - 22:08 #14
hov der var ikke noget som ikke måtte vises her ??? mail adresse eller ligne.
Avatar billede snebolle Nybegynder
07. oktober 2002 - 23:32 #15
Nej det går nok. :)
Men syntes stadig den driller med denne fejl
SELECT * FROM bruger WHERE brugeremail = 'rene@itkurven.dk';
ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/sendpassword.asp, line 41
Avatar billede eagleeye Praktikant
08. oktober 2002 - 16:44 #16
Så skal du rette denne linie hvor email adressen bliver lagt ind i JMail den hendter jeg fra databasen så denne linie:

JMail.AddRecipient  rs("email")

Rettes til:

JMail.AddRecipient  rs("brugeremail")
Avatar billede snebolle Nybegynder
08. oktober 2002 - 22:34 #17
Jep nu virker det jo :-) Tusind tak..

Nu vil jeg lige prøve at lege lidt med den anden i morgen så vi også kan få den til at virke :)
Avatar billede eagleeye Praktikant
08. oktober 2002 - 23:05 #18
Det lyder godt :)... ved den anden skal functionen fixString gogså rettes til denne:


function fixString(strInput)
  if len(strInput) > 0 then
    outString = replace(strInput,"'","''")
    fixString = outString
  else
    fixString = strInput
  end if
end function
Avatar billede snebolle Nybegynder
09. oktober 2002 - 21:28 #19
Jep det virker også perfekt :) Så det takker jeg mange gange for. Du skal også nok få alle point.
Men jeg skal lige høre om du også har en bekræft link funktion ?? Altså at folk skal bekræft et link på e-mail før deres profil kan bruges på siden ?? Det skal du nok få flere point for...
Avatar billede eagleeye Praktikant
10. oktober 2002 - 09:59 #20
Jeps det har jeg. Jeg har faktisk fjernet det fra koden :)

Jeg kan vise koden når jeg kommer hjem i efter middag/aften.
Avatar billede eagleeye Praktikant
10. oktober 2002 - 10:11 #21
Når en bruger bliver oprette så indsættes data omkring brugeren som han/hun selv har indtastet i form'en og bliver gem med denne SQL.:

  if (rs.EOF AND rs.BOF) then
    'OPRET BRUGERTEET
   
    strSQL = "INSERT INTO dp_members (username, userpassword, realname, email) "
    strSQL = strSQL & "VALUES ("
    strSQL = strSQL & "'" & brugernavn & "',"
    strSQL = strSQL & "'" & password & "',"
    strSQL = strSQL & "'" & rigtignavn & "',"
    strSQL = strSQL & "'" & email & "'"
    strSQL = strSQL & ");"
   
    conn.execute(strSQL)


Ud over kolonnerne  username, userpassword, realname, email  har jeg en kolonne valid_account så vidt jeg husker som default i databasen bliver sat til 0. Når man acceptere man på siden så bliver  valid_account sat til 1.
Avatar billede eagleeye Praktikant
10. oktober 2002 - 10:11 #22
det var bare lidt forklaring til det...
Avatar billede snebolle Nybegynder
10. oktober 2002 - 15:26 #23
Ja og så skal det være en betinglese at valid_account er 1 før man kan logge ind.. Det link skal vel gå hen til en side hvor der er en kode som laver 0 om til 1 på det aktuelle brugernavn..
Avatar billede eagleeye Praktikant
10. oktober 2002 - 18:10 #24
Jeps het rigtigt....


Her er den email jeg sender ud det et bare en udvidelse af den mail som jeg har vist i Fortsat svar: 04/10-2002 18:39:32


    Set JMail= Server.CreateObject("JMail.SMTPMail")
      JMail.ServerAddress = "websmtp.DIN_SIDE.dk"
      JMail.Sender        = "admin@xxxx.dk"
      JMail.SenderName    = "xxxx Forum"
      JMail.Subject      = "Velkommen til xxxx forum"
      JMail.AddRecipient  email
      JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
 
      BodyText = "Hej" & vbCrLf & vbCrLf
      BodyText = BodyText & "Du er nu registrert som bruger af xxxx forum." & vbCrLf
      BodyText = BodyText & "For at aktivere brugernavnet skal du trykke på dette link http://www.xxx.dk/login/godkend.asp?username=" & brugernavn & ""
      BodyText = BodyText & vbCrLf & vbCrLf
      BodyText = BodyText & "Med Venlig Hilsen" & vbCrLf
      BodyText = BodyText & "    Admin XXXXXX Forum"   
 
      JMail.Body = BodyText
      JMail.Silent = true
      JMail.Execute
      Set JMail = Nothing
Avatar billede eagleeye Praktikant
10. oktober 2002 - 18:14 #25
Ok kolonnen jeg har hedder  account_valid  så det var da ganske tæt på :)
Jeg har lavet en automatisk login så den sider brugernavn og password til min "check login side" som så logger folk ind.

og her er filen  godkend.asp 


<%
Response.Buffer = true


mode = "askforuseraccept"
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
  username = Request.Form("user")
  mode = "accepted"
  Response.Expires = Now() - 1000
else
  username = Request.QueryString("username")
end if

if username = "" then
  Response.Redirect("login.asp")
end if
Error_Code = 0

%>
<HTML>
<head>
<META HTTP-EQUIV="Expires" CONTENT="Mon, 01 Jan 1995 00:01:01 CST">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body><center>

<!--#include file="dsn.asp"-->
<%

if mode = "accepted" then
  strSQL= "UPDATE dp_members SET account_valid = 1 WHERE username = '" & username & "';"
  Conn.Execute(strSQL)
  strSQL= "SELECT * FROM dp_members WHERE username = '" & username & "';"
  set rs = Conn.Execute(strSQL)
  %>
  <form method="post" name="loginform" action="login_chk.asp">
  <input type="hidden" name="username" value="<%=rs("username")%>">
  <input type="hidden" name="password" value="<%=rs("userpassword")%>">
  </form>
  Din bruger profil er nu aktiv. Du bliver automatisk logget ind. <br>
  Hvis der ikke sker noget så tryk <a href="login.asp">her</a> for at logge ind.
  <%
  'Conn.Close
  %>
  <script language=javascript>
    document.loginform.submit()
  </script>
  <%
else
  Set rs = Server.CreateObject("ADODB.RecordSet")
  strSQL= "SELECT * FROM dp_members WHERE username = '" & username & "';"
  Set rs = Conn.Execute (strSQL)

  if (rs.EOF AND rs.BOF) then
    'Bruger findes ikke
    Error_Code = 1
  else
    if (Clng(rs("account_valid")) = Clng(1)) then
    'Brugeren er valid
      Error_Code = 1
    else
    %>
    Velkommen til xxxx Forum, du mangler kan at godkende dit brugernavn
    så kan du logge ind i forum med det samme efter det. <br>
    Din profil bliver aktiv ved at trykke på godkend knappen.
    <form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="post">
    <input type="hidden" name="user" value="<%=username%>">
    <input type="submit" name="Godkend" value="Godkend">
    </form>
    <%
    end if
  end if
end if

Conn.Close

if Error_Code = 1 then
  Response.Clear
  Response.Redirect("login.asp")
end if

%>
</center>
</body>
</HTML>
Avatar billede snebolle Nybegynder
11. oktober 2002 - 17:09 #26
Jep du er helt kanon.. Det har jeg også fået til at virke nu. Vil du ikke have ekstra point for det ?

Jeg vil dog prøve at lave bekræft linket om så det ikke er brugernavn der står fordi nu kan man jo også snyde. Men nu må vi se om jeg kan finde rundt i det. :)

Men mit håb om at bliver færdig med hjemmesiden i en overkuelig fremtid ser lys ud efter din hjælp.
Avatar billede ponyboye Nybegynder
01. marts 2008 - 08:10 #27
hej snebolle...

Jeg har taget denne dejlige hjæjp til men har brugfor den sidste hjælp som du ikke oplyser noget om...

Fejlen hvor den udskriver: SELECT * FROM bruger WHERE brugeremail = 'rene@itkurven.dk';

hvad er løsningen på dette?
Avatar billede ponyboye Nybegynder
01. marts 2008 - 08:11 #28
sorry... den var til eagleeye
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