webForumDet fria alternativet

'Till-fältet' med CDONTS

ASP

18 svar · 520 visningar · startad av web00132

Medlem sedan maj 2001797 inlägg
Frågan#1

Jag har två frågor:

1. Om jag vill bygga ett nyhetsbrev med CDONTS, hur kan man bäst loopa igenom en databas så mailet skickas till alla i databasen? Jag funderade på att antingen loopa igenom hela CDONTS-koden och hämta en ny variabel för To-fältet tills databasen är tömd, vilket borde ta ganska mkt kraft och ta lång tid. Alternativet, kom jag fram till, borde vara att loopa igenom databasen och lägga till alla mailadresser i To-fältet och skicka. Vad är bäst?

2. Hur ändrar man mail-adress i To-fältet så det ser ut som att nyhetsbrevet bara skickas till t ex mail@mail.com fast det kanske skickas till jättemånga adresser?

Vad tror ni, vad blir bäst och hur skulle det bäst kunna kodas?

Medlem sedan dec. 19996 721 inlägg
#2

Lägg adresserna i bcc-fältet i stället, så blir det finfint.

Medlem sedan maj 2001797 inlägg
#3

Åh, tackar! Det är ju faktiskt jättebra :) Men hur ser den koden ut, typ såhär eller:

myMail.From="mail@mail.com"
myMail.To="mail@mail.com"
myMail.Subject="Nyhetsbrev!"
[B]myMail.Bcc[/B]=DB-loop
myMail.BodyFormat=0
myMail.MailFormat=0
myMail.Body=HTML
myMail.Send

Red: Det var ju faktiskt inte svårare än att jag kunde testa det, och det funkade!

Medlem sedan maj 2001797 inlägg
#4

En annan fråga inom samma ämne, varför kan jag inte bunta ihop värden i min array (dvs alla e-postadresser) på det här sättet:

    <%
    Dim myMail
    Dim HTML
    Set myMail = CreateObject("CDONTS.NewMail")

    HTML = "<HTML>Hej hej!<HTML>"

    dim rs,objconn
	set objconn = server.createobject("ADODB.connection")
	objconn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data.mdb")
    set rs = server.createobject("ADODB.recordset")
    sqlOpen = "SELECT epost FROM kund;"
    rs.open sqlOpen, objconn, adlockoptimistic

        IF NOT rs.EOF THEN arrRecords = rs.GetRows

	rs.close
	set rs = nothing

	objConn.close
    set objConn = nothing

    [B]string = Join(arrRecords,";")[/B]

    myMail.From="mail@mail.com"
    myMail.To=string
    myMail.Subject="Nyhetsbrev!"
    myMail.BodyFormat=0
    myMail.MailFormat=0
    myMail.Body=HTML
    myMail.Send
    set mymail=nothing
    Response.Write "Message Sent"
    %>

Får felmeddelandet: "Type mismatch: 'Join'". Hur ska jag göra?

Medlem sedan dec. 20003 887 inlägg
#5

Se till så att inte arrRecords är null.

Medlem sedan maj 2001797 inlägg
#6

Vadå, att det inte skulle finnas några värden i min DB menar du? Men det gör det...

Medlem sedan dec. 19996 721 inlägg
#7

join kan bara sätta ihop en-dimensionella arrayer, men getrows ger ju en två-dimensionell (kolumner och rader). Använd GetString i stället

adresser=rs.GetString(, , , ";" , )

Medlem sedan dec. 20003 887 inlägg
#8

Då kanske det är så att någons epost är null.

sqlOpen = "SELECT epost FROM kund WHERE epost IS NOT NULL AND epost <> ''"

red.
Eller så lyssnar du på emission och ignorerar vad det nu kan vara jag yrar om :)

Medlem sedan dec. 19996 721 inlägg
#9

Engine^ skrev:

Eller så lyssnar du på emission och ignorerar vad det nu kan vara jag yrar om :)

:)

Fast du har en punkt, och det är att man faktiskt bör kolla om adressen är giltig. Någon fullödig validering blir det inte fråga om, men en liten...

SELECT DISTINCT epost FROM kund WHERE epost LIKE '%@%'

...kan vara på sin plats.

Medlem sedan maj 2001797 inlägg
#10

Tackar för svaren!
Ja, de e-postadresser som finns i DB:n är mina allihopa så jag vet att de funkar. Alltså mitt script funkar om jag loopar hela skiten liksom, men det vill jag inte göra. Det måste gå att loopa ut alla mailadresser enbart så det tar så lite kraft som möjligt, eller då alltså lägga dom i en array och sen skriva ut dem. Vilket som.

Nu ändrade jag till getstring men det funkade inte:

    <%
    Dim myMail
    Dim HTML
    Set myMail = CreateObject("CDONTS.NewMail")

    HTML = "<HTML>Hej hej!<HTML>"

    dim rs,objconn
	set objconn = server.createobject("ADODB.connection")
	objconn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data.mdb")
    set rs = server.createobject("ADODB.recordset")
    sqlOpen = "SELECT epost FROM kund;"
    rs.open sqlOpen, objconn, adlockoptimistic

        IF NOT rs.EOF THEN arrRecords = [B]rs.GetString[/B]

	rs.close
	set rs = nothing

	objConn.close
    set objConn = nothing

    string = Join(arrRecords,";") ' <-- Rad 26

    myMail.From="mail@mail.com"
    myMail.To=string
    myMail.Subject="Nyhetsbrev!"
    myMail.BodyFormat=0
    myMail.MailFormat=0
    myMail.Body=HTML
    myMail.Send
    set mymail=nothing
    Response.Write "Message Sent"
    %>

Eller använder jag getstring fel på nåt sätt? Jag får fortfarande felmeddelandet "Type mismatch: 'Join'" på rad 26.

Medlem sedan juni 200032 967 inlägg
#11

Eller använder jag getstring fel på nåt sätt?

  1. Du får ju tillbaka en sträng av GetString(). Därav namnet... Så du ska alltså inte hålla på och joina.
  2. emission gav ju ett finfint exempel. Provade du det?
Medlem sedan maj 2001797 inlägg
#12

Ja asså du menar det här: "rs.GetString(, , , ";" , )"
Jag får syntax error då. Jag har testat en massa olika och kollat msdn (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthgetstringmethod(recordset)ado.asp) men jag lyckas inte. Helt utan parametrar skriver den ut e-postadresserna men med ett mellanslag mellan varje, hur får man ett ; mellan varje?

Red. Och just det, jag tog bort join-prylen. Tackar!

Medlem sedan juni 200032 967 inlägg
#13

Du kan ju alltid prova på att läsa om funktionen även på Devguru; http://www.devguru.com/technologies/ado/8679.asp .

En anledning till att du får syntax error kan vara att vbscript-tolken inte tycker om att första parametern i ett funktionsanrop utelämnas, även om den är optional.

Mvh

Medlem sedan maj 2001797 inlägg
#14

Jag får Syntax error ändå:

Microsoft VBScript compilation  error '800a03ea'

Syntax error

/test.asp, line 17

IF NOT rs.EOF THEN arrRecords = rs.GetString(adClipString, , ,";", )
-------------------------------------------------------------------^

Har testat det mesta nu tycker jag :bla

Medlem sedan juni 200032 967 inlägg
#15

Ta bort sista kommatecknet, det finns ingen anledning att ha det där.

mvh

Medlem sedan maj 2001797 inlägg
#16

Jo jag har testat det med: "Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another." får jag då.

Medlem sedan juni 200032 967 inlägg
#17

Har du inkluderat adovbs.inc eller på annat sätt definierat adClipString?

Medlem sedan maj 2001797 inlägg
#18

Hähä, eee, jo asså det har jag ju gjort... :r
Tack ska du ha, funkar finfint! :bire

Medlem sedan juni 200032 967 inlägg
#19

Topp! (y)

263 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)