Avatar billede ripley Nybegynder
19. maj 2004 - 08:55 Der er 4 kommentarer og
1 løsning

Fejlside, der skal sende mail afsted automatisk

Hej!

Er der nogen, der gider kigge på følgende kode?
Jeg skal lave en side, som skal fremvise en fejltekst.
Deruodver skal der ske følgende:

Når en bruger ser denne fejlside, så skal der sendes nogle mails afsted automatisk, såfremt der ikke er blevet nogen sendt afsted de sidste 12 timer.
I filen "lastSentMail.txt" er det angivet, hvornår der sidst blev sendt mail afsted.
Derfor skal denne fil først kigges efter og sammenlignes med nuværende dato og klokkeslæt.
Er der ikke sendt nogen mail afsted indenfor de sidste 12 timer, så skal mail-adr. først findes:
Mail-adresserne findes i filen "mailadr.conf" og indholdet af denne ser således ud:

Mailadresser
test@test.dk
test2@test2.dk
test3@test3.dk

Herefter sendes mailen afsted og der skrives til filen med angivelse af, hvornår mailen blev sendt afsted.

Til sidst er der så koden på fejlsiden:

<%

'Variabler
  Dim objFS
  Dim objFile
  Dim dtmTimestamp
  Dim strMappedFile

  'Sti til den tekstfil, der indeholder info om hvornår sidste mail er sendt
  strMappedFile = Server.MapPath("/lastSentMail.txt")
  Set objFS = Server.CreateObject("Scripting.FilesystemObject")
  'Hvis filen eksisterer   
  If objFS.FileExists(strMappedFile) Then
    Set objFile = objFS.OpenTextFile(strMappedFile)
    'Så aflæs, hvornår sidste mail er sendt
    dtmTimestamp = objFile.ReadLine
    objFile.Close
    Set objFile = Nothing
    'Hvis det er over 12 timer siden, mailen blev sendt
    If DateDiff("h", dtmTimestamp, Now) > 12 Then
    'Send mailen
      Call sendMail()
      'Skriv nuv. dato + klokkeslæt til filen
      Call WriteFile(objFS, strMappedFile)
    End If
  'Ellers Hvis filen ikke eksisterer
  Else
  'Send mailen
    if(Call sendMail()) = true
  'Skriv nuv. dato + klokkeslæt til filen
    Call WriteFile(objFS, strMappedFile)
  End If

  Set objFS = Nothing

%>

Vi beklager fejlen bla-bla-bla

<%

Sub sendMail
      Dim mailAdrArray
      Set mailAdrArray = getMailAdr
      Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
      Mailer.FromName = "Fejlside"
      Mailer.FromAddress= "korrekt@email.adr"
      Mailer.RemoteHost = "mail-test.test.dk"
      'Loop, hvor der sendes en mail til hver mail-adr.
      For i = LBound(mailAdrArray) To UBound(mailAdrArray)
          Mailer.AddRecipient mailAdrArray(i)
      Next
      Mailer.Subject = "Fejltekst-emne"
      Mailer.BodyText = "Her er fejl" & VbCrLf & "Her står fejlteksten"
        If Mailer.SendMail Then
            return true
        Else
            return false
        End If
        Set Mailer = Nothing
        'Send mail
      Loop     
End Sub

Sub getMailAdr
      'Hent mail-adr. i CONF-fil
      Dim objFS
    Dim objFile
    Dim mailAdrFile
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    mailAdrFile = Server.Mappath("mailadr.conf")
    Set objFile = objFSO.OpenTextFile(mailAdrFile,1)

'Læs linie for linie indtil slutningen af filen
Do While not objFile.AtEndOfStream
  'Hvis filen som det første ord indeholder Mailadresser
  If Left(objFile.ReadLine, 12) = "Mailadresser" Then
      'Hent mailadresserne én for én
      mailAdr = split(objFile.ReadLine, ";")
  End If
  Set objFS = Nothing
  objFile.close
Loop

End Sub

Sub WriteFile(byRef objFS, byVal strMappedFile)
  Dim objFile
  Set objFile = objFS.CreateTextFile(strMappedFile)
  objFile.WriteLine(Now)
  objFile.Close
  Set objFile = Nothing
End Sub

%>

Håber, I kan finde hoved og hale i min kode!!!

NB: Hvordan er det nu med global.asa?
Er det noget med, at der skal placeres en global.asa for hvert site - min side skal hostes på et web-hotel, der understøtter ASP - mon det er nødvendigt at skrive min egen global.asa, når der ikke skal "ske" noget i den alligevel?
Avatar billede ellebaek Nybegynder
19. maj 2004 - 09:59 #1
global.asa skal du kun skrive hvis du vil bruge den..

Jeg bruger den næsten aldrig selv.

Men hvad er problemet med din kode..?
For jeg synes alt i alt at den ser meget godt ud, kan ikke umiddelbart spotte nogle fejl.
Avatar billede ellebaek Nybegynder
19. maj 2004 - 10:02 #2
og dog, der er da et eller andet med der her der ikke er helt godt..
Do While not objFile.AtEndOfStream
  'Hvis filen som det første ord indeholder Mailadresser
  If Left(objFile.ReadLine, 12) = "Mailadresser" Then
      'Hent mailadresserne én for én
      mailAdr = split(objFile.ReadLine, ";")
  End If
  Set objFS = Nothing
  objFile.close
Loop

Vil sige at du måske i stedet skulle skrive:

Do While not objFile.AtEndOfStream
  'Hvis filen som det første ord indeholder Mailadresser
  If Left(objFile.ReadLine, 12) = "Mailadresser" Then
      'Hent mailadresserne én for én
      mailAdr = split(objFile.ReadAll, vbcrlf)
  End If
  Set objFS = Nothing
  objFile.close
Loop

og så rette denne linie:
For i = LBound(mailAdrArray) To UBound(mailAdrArray)

til:
For i = 1 To UBound(mailAdrArray)
Avatar billede ellebaek Nybegynder
24. maj 2004 - 11:27 #3
har du fået det til at virke..?
Avatar billede ripley Nybegynder
18. juni 2004 - 11:35 #4
Næ, ikke endnu :o(
Lad os bare lukke spørgsm. - kan du ikke lægge et svar, så får du point, for du prøvede da.
Avatar billede ellebaek Nybegynder
18. juni 2004 - 12:59 #5
Jeg ligger et svar så ;-)
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