Avatar billede lyngedrengen Nybegynder
09. marts 2002 - 19:32 Der er 3 kommentarer og
1 løsning

Forum besvarelse - mail kun 1 gang

Hejsa!

Jeg har et lille problem.

Problemet består i, at folk der har sagt ja til at modtage en mail når der kommer et nyt indlæg i den tråd de deltager i, i mit debatforum får en mail for hvert indlæg de har lavet i det forum.

Dvs. har du lavet 3 indlæg i en tråd, så får du 3 mails når der kommer et nyt svar...

Access tabellen, hvor indlæggene er i, er bygget op således:

Id Emne Dato Navn Mail Message SvarId ForumId svarmail

Hvor svarmail har værdien 1 for "Ja jeg vil modtage mail" og ellers 0. ForumID er id på forummet og SvarId indeholder ID'en, som det første indlæg i tråden har fået tildelt.

Min kode ser således ud:

----Snip---
<%
If Request("emne") <> "" AND Request("navn") <> "" Then
UpdateDB = TRUE
emne = DBFix(TRIM(Request("emne")))
navn = DBFix(TRIM(Request("navn")))
Else
UpdateDB = FALSE
End IF
If Request("Mail") = "" Then
mail="-"
Else
mail = DBFix(TRIM(Request("mail")))
End if

If Request("Message") = "" Then
message="-"
Else
message = DBFix(TRIM(Request("message")))
End If

intReplyID = cINT(Request("SvarID"))
intForumID = cINT(Request("ForumID"))

comid = (Trim(Request("brugerid")))

if request("sendmail") = "On" then
  checked = 1
else
  checked = 0
end if


If comid="" then comid=0

If UpdateDB = True then
strSql = "INSERT INTO Messages (Emne, Navn, Mail, Message, SvarID, ForumID, Comid, svarmail) VALUES "
strSql = strSql & "('" & (emne) & "','" & (navn) & "','" & (mail) & "','" & (message) & "','" & (intReplyID) & "','" & (intForumID) & "','" & (comid) & "','" & (checked) &"')"
Set Connect = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "d:\home\testdk\db\Forum.mdb"
Connect.Open strDSN
Connect.Execute strSql

strAnswer="Dit Indlæg er optaget i forummet!"
strLink="<a href=""show_data.asp?ForumID="&intForumID&""">[Tilbage til debatten]</a>"
Else
strAnswer="Du mangler at udfylde nogle af følgende felter (navn,emne)"
strLink="<a href=""enter_data.asp?ForumID="&intForumID&"&sID="&intReplyID&""">Tilbage</a>"

End If
%>

<%
Response.Buffer = True

' Connection til database.    
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "d:\home\testdk\db\Forum.mdb"

%>

<%
Sql = "Select * from messages where Svarid = " & Request.QueryString("SvarID") & "AND svarmail=1"
Set oRs =  Conn.Execute(Sql)

do while oRs.eof=false

    email = oRs("Mail")
    navn = oRs("Navn")
    overskrift = oRs("Emne")
    id = oRs("Id")
    Forumid = oRs("ForumId")
    NTekst =  tekst
    NTekst=replace(NTekst, chr(13),"<br>")   
  %>         
       
<%
        Set JMail          = Server.CreateObject("JMail.SMTPMail")

        Jmail.ContentType      = "text/HTML"

        JMail.ServerAddress = "websmtp.test.dk"

        JMail.Sender        = "Test"

        JMail.Subject      = "Test Forum" & emne

        JMail.AddRecipient  oRs("Mail")

        JMail.Priority      = 3

        JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")

        JMail.Body= str & "Hej " & navn & "<br><br>Der er blevet svaret på dit indlæg i vores forum. <br><br>Du kan læse svaret på denne side: <a href='http://www.test.dk/forum/show_message.asp?MessageId=" & id & "&ForumId=" & Forumid &"'>" & "Klik her" & "</a>"
        JMail.execute 
        Set JMail = Nothing

%>

  <% 
  oRs.movenext
  loop
  %>

----Snip---

Jeg håber I kan hjælpe :-)

Er der spørgsmål til ovenstående, så stil dem endeligt! ;-)

Mvh
Jan
Avatar billede rou Nybegynder
09. marts 2002 - 19:41 #1
Du kan vel klare det ved at bruge flg.:

<%
sql = "SELECT DISTINCT mail FROM messages WHERE Svarid = " & Request.QueryString("SvarID") & "AND svarmail=1"

%>
Avatar billede lyngedrengen Nybegynder
09. marts 2002 - 19:47 #2
Giver det ikke kun kolonnen mail? (jeg får en fejl om, at den ikke henter de andre variable for den post...) ;-)
Avatar billede coltau Juniormester
10. marts 2002 - 13:11 #3
Kan man ikke snyde lidt og få dem i email-rækkefølge og så kun sende en mail når email-adressen ikke er den samme som sidst sendte.
Det er måske ikke så "smart" men det virker.

<%
Sql = "Select * from messages where Svarid = " & Request.QueryString("SvarID") & "AND svarmail=1 order by mail" ' I email-rækkefølge
Set oRs =  Conn.Execute(Sql)

lastMail = "" ' Sæt sidste mail til blank således at første mail sendes
do while oRs.eof=false

  email = oRs("Mail")
  if LastMail <> email then ' Hvis ny email så send en mail / hvis samme så undlad at sende
    LastMail = email ' Husk sidste sendte email
    navn = oRs("Navn")
    overskrift = oRs("Emne")
    id = oRs("Id")
    Forumid = oRs("ForumId")
    NTekst =  tekst
    NTekst=replace(NTekst, chr(13),"<br>")   

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

        Jmail.ContentType      = "text/HTML"

        JMail.ServerAddress = "websmtp.test.dk"

        JMail.Sender        = "Test"

        JMail.Subject      = "Test Forum" & emne

        JMail.AddRecipient  oRs("Mail")

        JMail.Priority      = 3

        JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")

        JMail.Body= str & "Hej " & navn & "<br><br>Der er blevet svaret på dit indlæg i vores forum. <br><br>Du kan læse svaret på denne side: <a href='http://www.test.dk/forum/show_message.asp?MessageId=" & id & "&ForumId=" & Forumid &"'>" & "Klik her" & "</a>"
        JMail.execute 
        Set JMail = Nothing
  end if
 
  oRs.movenext
  loop
%>

Jeg har kommenteret de steder der er tilføjet.
Avatar billede lyngedrengen Nybegynder
10. marts 2002 - 13:22 #4
Kanon!! :-) Mange tak!!
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