Avatar billede rit Nybegynder
01. september 2003 - 16:10 Der er 18 kommentarer og
1 løsning

Validering JMail

Jeg har en formular som sender mail fra min hjemmeside til min egen mail-adresse (JMail).

Den fungerer fint hvis man ikke skriver noget i formular-feltet: E-mail: <input type="text" name="email" size="20">

Glemmer man at skrive @ i E-mail-feltet, så får man denne fejlmelding:
jmail.SMTPMail error '8000ffff'
The message was undeliverable. All servers failed to receive the message
Mail.asp, line 65



Mit spørgsmål går på hvordan man udelukker denne fejlmelding. Det ville være fint hvis man ku fortælle klienten, at der er fejl i hans mail-adresse, og at han kunne korrigere og så gøre et nyt forsøg.

Koden ser i øjeblikket sådan ud:


<form method="post" action="Mail.asp">
Navn: <input type="text" name="navn" size="20"><br>
E-mail: <input type="text" name="email" size="20"><br><br>
Besked:<br><textarea name="besked" rows="1" cols="20"></textarea><br><br>
<input type="submit" value="Send mail">
</form>

<%
If Request.ServerVariables("Request_Method") = "POST" Then

  Set JMail = Server.CreateObject("JMail.SMTPMail")
  JMail.ServerAddress = "192.168.0.2"

JMail.SenderName = Request.Form("navn")
JMail.Sender = Request.Form("email")
JMail.AddRecipientEx "min@e-mail.dk", "Fra hjemmesiden"
JMail.Subject = "Fra hjemmesiden"
JMail.Body = Request.Form("besked")

Email = Request.Form("email")
If Trim(Email) = "" Then Email = "test@test.fo"

JMail.Sender = Email

  JMail.Execute

  JMail.Close
  Set JMail = Nothing

Response.Redirect("Tak.asp")

End If
%>


Som den er nu sender formularen mail uden indhold (når man klikker på Send mail. Det er heller ikke smart :)
Avatar billede cesil Nybegynder
01. september 2003 - 16:29 #1
måske sådan her

Function MailOK(Streng)
    Dim myReg
    Set myReg = New RegExp
    myReg.IgnoreCase = True
    myReg.Pattern = "^[a-z0-9\.\-\_]+\@[a-z0-9\.\-]+\.[a-z]{2,4}$"
    MailOK = myReg.Test(Streng)
End Function



<form method="post" action="Mail.asp">
Navn: <input type="text" name="navn" size="20"><br>
E-mail: <input type="text" name="email" size="20"><br><br>
Besked:<br><textarea name="besked" rows="1" cols="20"></textarea><br><br>
<input type="submit" value="Send mail">
</form>

<%
If Request.ServerVariables("Request_Method") = "POST" Then

if MailOK(Request.Form("email")) then
      Set JMail = Server.CreateObject("JMail.SMTPMail")
      JMail.ServerAddress = "192.168.0.2"

    JMail.SenderName = Request.Form("navn")
    JMail.Sender = Request.Form("email")
    JMail.AddRecipientEx "min@e-mail.dk", "Fra hjemmesiden"
    JMail.Subject = "Fra hjemmesiden"
    JMail.Body = Request.Form("besked")
   
    Email = Request.Form("email")
    If Trim(Email) = "" Then Email = "test@test.fo"
   
    JMail.Sender = Email
   
    JMail.Execute
   
    JMail.Close
    Set JMail = Nothing
   
    Response.Redirect("Tak.asp")
else
    response.write("forkert email")
end if

End If
%>
Avatar billede rit Nybegynder
01. september 2003 - 16:53 #2
Takker cesil

Mangler der ikke noet i forbindelse med:

Function MailOK(Streng)
    Dim myReg
    Set myReg = New RegExp
    myReg.IgnoreCase = True
    myReg.Pattern = "^[a-z0-9\.\-\_]+\@[a-z0-9\.\-]+\.[a-z]{2,4}$"
    MailOK = myReg.Test(Streng)
End Function


Hvad med plasering, er det ligemeget ?
Avatar billede vbcoder Nybegynder
01. september 2003 - 20:19 #3
function ValidEmail(Email)

  validEmail=true
  'teksten må ikke være tom
  if trim(email)="" then
    validEmail=false
 
  ' lav en simpel kontrol på email.adressen
  else
    ' abehalen skal være der
    if not cbool(instr(email,"@")) then
      validEmail=False
    end if
    ' ihvert fald et punktum skal kunne findes
    if not cbool(instr(email,".")) then
      validEmail = False
    end if
  end if
end if

if validEmail(request.form("email")

''''bla

end if

//vbcoder
Avatar billede rit Nybegynder
01. september 2003 - 20:23 #4
Da jeg gerne vil har styr på formularen gir jeg nogen extra poeng :)
Avatar billede vbcoder Nybegynder
01. september 2003 - 20:35 #5
hvad vil du have styr på?

<%
'funktion til validering af email adresse
function ValidEmail(Email)
  ' som udgangspunkt er emailadressen go nok
  validEmail=true

  'teksten må ikke være tom men skal have en antagelig minimumslængde
  ' den mindste man kan have er vel c@c.dk
  ' 6 tegn
  if len(trim(email)) < 6 then
    ' returner fejl
    validEmail=false
 
  ' ellers lav en simpel kontrol på email.adressen
  else
    ' abehalen skal være der
    if not cbool(instr(email,"@")) then
      'returner fejl
      validEmail=False
    end if
    ' ihvert fald et punktum skal kunne findes
    if not cbool(instr(email,".")) then
      'returner fejl
      validEmail = False
    end if
  end if
end function

' tjekker om vi er klar til at sende
If Request.ServerVariables("Request_Method") = "POST" Then

  'kalder funktionen
  if validEmail(request.form("email")) then
    ' så kan vi køre videre
    Set JMail = Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress = "192.168.0.2"
    JMail.SenderName = Request.Form("navn")
    JMail.Sender = Request.Form("email")
    JMail.AddRecipientEx "min@e-mail.dk", "Fra hjemmesiden"
    JMail.Subject = "Fra hjemmesiden"
    JMail.Body = Request.Form("besked")
    JMail.Sender = Request.Form("email")
    JMail.Execute
    JMail.Close
    Set JMail = Nothing
    Response.Redirect("Tak.asp")
  else
    Response.write("Fejl.asp")
  End If

' ellers viser vi formen
else
%>
<form method="post" action="Mail.asp">
Navn: <input type="text" name="navn" size="20"><br>
E-mail: <input type="text" name="email" size="20"><br><br>
Besked:<br><textarea name="besked" rows="1" cols="20"></textarea><br><br>
<input type="submit" value="Send mail">
</form>
<%end if%>

noget i den retning?

//vbcoder
Avatar billede rit Nybegynder
01. september 2003 - 20:46 #6
vbcoder > takker, ja det er "noget i den retning" :)
Jeg har pastet min kode øverst, ville være skønt hvis du ku korrigere og tilføje, noget som virker :)
Avatar billede rit Nybegynder
01. september 2003 - 21:01 #7
vbcoder > har du testet, hos mig er der ingen forskel, man får fejlmelding, f.eks. når der ikke er noget @
Avatar billede cesil Nybegynder
01. september 2003 - 21:07 #8
sådan der. Der manglede bare start og slut asp tegn rundt om funktionen. Funktionen skal bare være i toppen af siden et eller andet sted.
Siden burde virke som den er nu.

<%
Function MailOK(Streng)
    Dim myReg
    Set myReg = New RegExp
    myReg.IgnoreCase = True
    myReg.Pattern = "^[a-z0-9\.\-\_]+\@[a-z0-9\.\-]+\.[a-z]{2,4}$"
    MailOK = myReg.Test(Streng)
End Function
%>


<form method="post" action="Mail.asp">
Navn: <input type="text" name="navn" size="20"><br>
E-mail: <input type="text" name="email" size="20"><br><br>
Besked:<br><textarea name="besked" rows="1" cols="20"></textarea><br><br>
<input type="submit" value="Send mail">
</form>

<%
If Request.ServerVariables("Request_Method") = "POST" Then

if MailOK(Request.Form("email")) then
      Set JMail = Server.CreateObject("JMail.SMTPMail")
      JMail.ServerAddress = "192.168.0.2"

    JMail.SenderName = Request.Form("navn")
    JMail.Sender = Request.Form("email")
    JMail.AddRecipientEx "min@e-mail.dk", "Fra hjemmesiden"
    JMail.Subject = "Fra hjemmesiden"
    JMail.Body = Request.Form("besked")
   
    Email = Request.Form("email")
    If Trim(Email) = "" Then Email = "test@test.fo"
   
    JMail.Sender = Email
   
    JMail.Execute
   
    JMail.Close
    Set JMail = Nothing
   
    Response.Redirect("Tak.asp")
else
    response.write("forkert email")
end if

End If
%>
Avatar billede rit Nybegynder
01. september 2003 - 21:26 #9
Nu er vi tæt på. Den får bare ikke fat i Tak.asp (Page not found)
Avatar billede cesil Nybegynder
01. september 2003 - 21:28 #10
ligger tak.asp i samme mappe som den her side.
Avatar billede rit Nybegynder
01. september 2003 - 21:28 #11
Den er god nok, nu virker den :)
Avatar billede rit Nybegynder
01. september 2003 - 21:32 #12
cesil > takker
Gider du lige lave lidt om på den. En variant, hvor man ikke har e-mail feltet med. Man skal måske kun udkommentere ? :)
Avatar billede cesil Nybegynder
01. september 2003 - 21:33 #13
øjeblik
Avatar billede rit Nybegynder
01. september 2003 - 21:34 #14
Når jeg siger e-mail felt, så er det klientens :)
Avatar billede cesil Nybegynder
01. september 2003 - 21:38 #15
prøv

<%
Function MailOK(Streng)
    Dim myReg
    Set myReg = New RegExp
    myReg.IgnoreCase = True
    myReg.Pattern = "^[a-z0-9\.\-\_]+\@[a-z0-9\.\-]+\.[a-z]{2,4}$"
    MailOK = myReg.Test(Streng)
End Function
%>


<form method="post" action="Mail.asp">
Navn: <input type="text" name="navn" size="20"><br><br>
<input type="hidden" name="email" value="min@e-mail.dk" size="20">
Besked:<br><textarea name="besked" rows="1" cols="20"></textarea><br><br>
<input type="submit" value="Send mail">
</form>

<%
If Request.ServerVariables("Request_Method") = "POST" Then

'if MailOK(Request.Form("email")) then
      Set JMail = Server.CreateObject("JMail.SMTPMail")
      JMail.ServerAddress = "192.168.0.2"

    JMail.SenderName = Request.Form("navn")
    JMail.Sender = Request.Form("email")
    JMail.AddRecipientEx "min@e-mail.dk", "Fra hjemmesiden"
    JMail.Subject = "Fra hjemmesiden"
    JMail.Body = Request.Form("besked")
   
    Email = Request.Form("email")
    If Trim(Email) = "" Then Email = "test@test.fo"
   
    JMail.Sender = Email
   
    JMail.Execute
   
    JMail.Close
    Set JMail = Nothing
   
    Response.Redirect("Tak.asp")
'else
'    response.write("forkert email")
'end if

End If
%>
Avatar billede cesil Nybegynder
01. september 2003 - 21:39 #16
jeg har kun udkommenteret linierne. Hvis du vil kan du jo bare slette dem. Email feltet har jeg lavet til et hidden felt.
Avatar billede cesil Nybegynder
01. september 2003 - 21:41 #17
funktionen bruger ikke resourcer så længe den ikke bliver brugt så den har jeg ladt være.
Avatar billede rit Nybegynder
01. september 2003 - 21:44 #18
Takker meget :)
Avatar billede cesil Nybegynder
01. september 2003 - 21:46 #19
Det var så lidt :-)
tak for pointene.
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

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