Avatar billede fun4you Nybegynder
17. juli 2003 - 18:58 Der er 21 kommentarer og
1 løsning

Ansending af nyhedsbrev og tilføj nyhed til database

Hvorfor sendes der KUN email ud til den første post i databasen der indeholder emailadd.

Det hele bliver sendt som det skal til den første i databasen, men der bliver ikke lavet et loop, hvorved der skulle blive sendt emails ud til de andre i databasen


Selve nyheder bliver fint sendt ned i en anden database som den skal.

<%@ LANGUAGE="VBSCRIPT" %>

<%if not session("Inde") then response.redirect "../../startside.htm"%>
   



<% mode = request("mode") %>
<%
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Artikler.mdb") & ";UID=admin;PWD=;"

    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "Select * From Artikel"
    rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
%>
 

<% if mode ="" then %>
                <form action="ny-artikel.asp?mode=send&action=submit" method="POST" NAME="newtag" onSubmit="return CheckForm();"



    <input type="Submit" value="Send" name="submitbutton"></td>
</tr>
</table>
</form>

<% end if %>
       
               
<% if mode ="send" then
      rs.AddNew
      rs("overskrift") = Request.form("overskrift")
      rs("Sted") = Request.form("Sted")
      rs("info") = Request.form("info")
      rs("navn") = Request.form("navn")
      rs("afdeling") = Request.form("afdeling")
      rs("Vis") = Request.form("Vis")
      rs("dato") = date()
      rs.Update

rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing


Set DataConn = Server.CreateObject("ADODB.Connection")
Set data = Server.CreateObject("ADODB.Recordset")


DataConn.Open "DBQ=" & Server.Mappath("mail.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

MYSQL = "SELECT * FROM mail"

data.Open MYSQL, DataConn , 0, 1

Do Until data.EOF


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "mail.xxxx.dk"
Mailer.FromName = "xxxxx"
Mailer.FromAddress = "xxxx@xxxx.dk"
Mailer.AddRecipient data("navn"), data("email")
Mailer.Subject = Request.form("overskrift")
Mailer.BodyText = Request.form("info")
Mailer.CharSet = 2

data.MoveNext
Loop
%>



<% 
            if not Mailer.SendMail then
            Response.Write " Mailing Failed... Error is: <br>"
              Response.Write Mailer.Response
            else
              Response.Write " sent successfully...<p>"
            end if
            Set Mailer = nothing
        %>
Avatar billede medions Nybegynder
17. juli 2003 - 19:13 #1
Prøv lige sådan her:

<%@ LANGUAGE="VBSCRIPT" %>

<%if not session("Inde") then response.redirect "../../startside.htm"%>
   



<% mode = request("mode") %>
<%
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Artikler.mdb") & ";UID=admin;PWD=;"

    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "Select * From Artikel"
    rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
%>
 

<% if mode ="" then %>
                <form action="ny-artikel.asp?mode=send&action=submit" method="POST" NAME="newtag" onSubmit="return CheckForm();"



    <input type="Submit" value="Send" name="submitbutton"></td>
</tr>
</table>
</form>

<% end if %>
       
               
<% if mode ="send" then
      rs.AddNew
      rs("overskrift") = Request.form("overskrift")
      rs("Sted") = Request.form("Sted")
      rs("info") = Request.form("info")
      rs("navn") = Request.form("navn")
      rs("afdeling") = Request.form("afdeling")
      rs("Vis") = Request.form("Vis")
      rs("dato") = date()
      rs.Update

rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing


Set DataConn = Server.CreateObject("ADODB.Connection")
Set data = Server.CreateObject("ADODB.Recordset")


DataConn.Open "DBQ=" & Server.Mappath("mail.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

MYSQL = "SELECT * FROM mail"

Set Data = DataConn.Execute(MYSQL)

While Not data.EOF


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "mail.xxxx.dk"
Mailer.FromName = "xxxxx"
Mailer.FromAddress = "xxxx@xxxx.dk"
Mailer.AddRecipient data("navn"), data("email")
Mailer.Subject = Request.form("overskrift")
Mailer.BodyText = Request.form("info")
Mailer.CharSet = 2

data.MoveNext()
Wend
%>



<% 
            if not Mailer.SendMail then
            Response.Write " Mailing Failed... Error is: <br>"
              Response.Write Mailer.Response
            else
              Response.Write " sent successfully...<p>"
            end if
            Set Mailer = nothing
        %>

//>Rune
Avatar billede the_bma_man Nybegynder
17. juli 2003 - 19:33 #2
Hep - du kalder din Mail.SendmMail _udenfor_ loopet.
Dermed bliver den kun kaldt een gang - og vil altså blive kørt for den sidste record, som du egentligt sender til.
Prøv at flytte din loop ned under:
<% 
            if not Mailer.SendMail then
            Response.Write " Mailing Failed... Error is: <br>"
              Response.Write Mailer.Response
            else
              Response.Write " sent successfully...<p>"
            end if
            Set Mailer = nothing
Avatar billede fun4you Nybegynder
17. juli 2003 - 19:34 #3
Hej
Så vidt jeg kan se er det eneste du har ændret følgende

Set Data = DataConn.Execute(MYSQL)

While Not data.EOF


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "mail.xxxx.dk"
Mailer.FromName = "xxxxx"
Mailer.FromAddress = "xxxx@xxxx.dk"
Mailer.AddRecipient data("navn"), data("email")
Mailer.Subject = Request.form("overskrift")
Mailer.BodyText = Request.form("info")
Mailer.CharSet = 2

data.MoveNext()
Wend
%>

jeg har ændret ovenstående, med det ændre ikke noget, bortset fra at der nu kun bliver sendt en mail til den sidste post i email databasen.

Morten
Avatar billede fun4you Nybegynder
17. juli 2003 - 19:42 #4
the_bma_man

Ok, det hjalp
Men lige et lille spg. mere til dig.

Hvordan for jeg så lavet scriptet således at jeg ikke som nu får en bekræftigelse pr. mail sendt, men kun en samlet, eller en fejlmeddelse der viser hvad der samlet var fejl i??
Avatar billede Slettet bruger
17. juli 2003 - 19:45 #5
While Not data.EOF


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "mail.xxxx.dk"
Mailer.FromName = "xxxxx"
Mailer.FromAddress = "xxxx@xxxx.dk"
Mailer.AddRecipient data("navn"), data("email")
Mailer.Subject = Request.form("overskrift")
Mailer.BodyText = Request.form("info")
Mailer.CharSet = 2

data.MoveNext()
If not Mailer.SendMail then
  strFejl = strFejl & " Mailing Failed... Error is: <br>" & Mailer.Response  &    <br>
            Set Mailer = nothing
wend
Response.Write strFejl
        %>
Avatar billede Slettet bruger
17. juli 2003 - 19:45 #6
Og det var et svar :-)
Avatar billede fun4you Nybegynder
17. juli 2003 - 19:56 #7
Hej bertie
Det hjælper ikke.
Det medfører nye fejlmeddelser. Den ændring som "the_bma_man" foreslog virker fint.
Har nu kun der problem der bliver beskrevet nederst på siden
Avatar billede Slettet bruger
17. juli 2003 - 20:25 #8
Ville du ikke have samlet fejlmeddelelserne i en streng?
Jeg tog udgangspunkt i den nederste kode da jeg troede du brugte den ellers så post den kode du har nu så kigger vi på det.
Avatar billede fun4you Nybegynder
17. juli 2003 - 20:29 #9
Ok
koden ser således ud nu.

Set DataConn = Server.CreateObject("ADODB.Connection")
Set data = Server.CreateObject("ADODB.Recordset")
DataConn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mail.mdb") & ";UID=admin;PWD=;"
MYSQL = "SELECT * FROM mail"
data.Open MYSQL, DataConn , 0, 1
Do Until data.EOF


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "mail.xxxxx.dk"
Mailer.FromName = "xxxxx"
Mailer.FromAddress = "xxxxx@xxxxx.dk"
Mailer.AddRecipient data("navn"), data("email")
Mailer.Subject = Request.form("overskrift")
Mailer.BodyText = Request.form("info")
Mailer.CharSet = 2

data.MoveNext()

            if not Mailer.SendMail then
            Response.Write " Mailing Failed... Error is: <br>"
              Response.Write Mailer.Response
            end if
            Set Mailer = nothing
            Loop
Avatar billede Slettet bruger
17. juli 2003 - 20:31 #10
Og du vil samle op på fejlmeddelelserne og så udskrive dem bagefter=
Avatar billede Slettet bruger
17. juli 2003 - 20:32 #11
Det skulle være et spørgsmål
Avatar billede fun4you Nybegynder
17. juli 2003 - 20:34 #12
Ja, som der er nu så skrives der intet hvis der hele forløber som det skal
men hvis der er flere fejl, så bliver der skreven en fejbeskrivelse, så loop, evt. igen en fejlbeskrivelse, loop osv.

Ville gerne have en samlet fejlbeskrivelse, og evt. en samlet besked om at alle mails er sendt korrekt.
Avatar billede Slettet bruger
17. juli 2003 - 20:39 #13
Så kan du også gøre som jeg skrev før:

Do until data.EOF
  Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
  Mailer.RemoteHost = "mail.xxxx.dk"
  Mailer.FromName = "xxxxx"
  Mailer.FromAddress = "xxxx@xxxx.dk"
  Mailer.AddRecipient data("navn"), data("email")
  Mailer.Subject = Request.form("overskrift")
  Mailer.BodyText = Request.form("info")
  Mailer.CharSet = 2
 
  data.MoveNext()
  If not Mailer.SendMail then
    strFejl = strFejl & " Mailing Failed... Error is: <br>" & Mailer.Response 
            &    <br>
    Set Mailer = nothing
  End if
wend
if strFejl <> "" Then
  Response.Write "Alle mails er gået igennem
Else
  Response.Write strFejl
End If
        %>
Hvis du vil have at vide hvilken mail der var fejl i så kan du jo tilføje lige hvad du har lyst til i strFejl.
Avatar billede Slettet bruger
17. juli 2003 - 20:40 #14
Ups mangler ":
if strFejl <> "" Then
  Response.Write "Alle mails er gået igennem"
Else
  Response.Write strFejl
End If
Avatar billede Slettet bruger
17. juli 2003 - 20:42 #15
End if skal lige flyttes her:
If not Mailer.SendMail then
    strFejl = strFejl & " Mailing Failed... Error is: <br>" & Mailer.Response 
            &    <br>
End if
Set Mailer = nothing
Avatar billede fun4you Nybegynder
17. juli 2003 - 20:50 #16
Hvis jeg laver koden som følger, for jeg denne fejl.

Set DataConn = Server.CreateObject("ADODB.Connection")
Set data = Server.CreateObject("ADODB.Recordset")
DataConn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../nyheder/mail.mdb") & ";UID=admin;PWD=;"
MYSQL = "SELECT * FROM mail"
data.Open MYSQL, DataConn , 0, 1
Do Until data.EOF


Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "mail.xxx.dk"
Mailer.FromName = "xxxx"
Mailer.FromAddress = "xxx@xxx.dk"
Mailer.AddRecipient data("navn"), data("email")
Mailer.Subject = Request.form("overskrift")
Mailer.BodyText = Request.form("info")
Mailer.CharSet = 2

data.MoveNext()

If not Mailer.SendMail then
    strFejl = strFejl & " Mailing Failed... Error is: <br>" & Mailer.Response 
  End if
Set Mailer = nothing
wend

if strFejl <> "" Then
  Response.Write "Alle mails er gået igennem"
Else
  Response.Write strFejl
End If
%>

Microsoft VBScript compilation error '800a0400'

Expected statement

/log/Artikler/ny-artikel.asp, line 190

wend
^
Avatar billede Slettet bruger
17. juli 2003 - 20:51 #17
Min fejl, det ska være loop istedet for wend :-)
Avatar billede fun4you Nybegynder
17. juli 2003 - 20:53 #18
Har jeg også prøvet, men så får jeg stadigvæk ingen meddelse om at alle mails er afsendt korrekt.
Avatar billede fun4you Nybegynder
17. juli 2003 - 20:58 #19
ok det virker nu.

if strFejl <> "" Then

skulle naturligvis rettes til f strFejl = "" Then

Mange tak for hjælpen bertie
Avatar billede fun4you Nybegynder
17. juli 2003 - 20:58 #20
ok der skulle jo stå

if strFejl = "" Then
Avatar billede Slettet bruger
17. juli 2003 - 20:59 #21
Nå ja selvfølgelig, doh :-)
Velbekom.
Avatar billede the_bma_man Nybegynder
17. juli 2003 - 21:05 #22
Jamen, takker for points.
Sorry jeg ikke lige var på til at hjælpe dig færdig!
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