webForumDet fria alternativet

Cdonts string

23 svar · 458 visningar · startad av costodia

costodiaMedlem sedan aug. 2000864 inlägg
#1

Jag undrar om någon kan se vad jag gjort för fel i denna stringen

<%
Do Until Poster.EOF 
	
	Set Mailer = Server.CreateObject("CDONTS.NewMail")
	objMail.FromName = Request.Form("Sender")
	objMail.FromAddress = Request.Form("Epostsender")
	strMailHost = "mail.costodia.com"
	objMail.RemoteHost = strMailHost
	objMail.AddRecipient "Maillista", Poster("Epost")
	objMail.Subject = Request.Form("Rubrik")
	objMail.BodyText = Request.Form("Meddelande")

	 if CDONTS.NewMail then
    Response.Write ""
  else
    Response.Write "Ett fel uppstod. Kontakta webbmastern!<br>"
end if 
%>

så här ser orginalet ut:

<%
Do Until Poster.EOF 
	
	Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
	Mailer.FromName = Request.Form("Sender")
	Mailer.FromAddress = Request.Form("Epostsender")

' OBS !! GLÖM INTE ATT FYLLA I DIN SMTPSERVER NEDAN!

	strMailHost = "din.smtpserver.se"
	Mailer.RemoteHost = strMailHost
	Mailer.AddRecipient "Maillista", Poster("Epost")
	Mailer.Subject = Request.Form("Rubrik")
	Mailer.BodyText = Request.Form("Meddelande")

	 if Mailer.SendMail then
    Response.Write ""
  else
    Response.Write "Ett fel uppstod. Kontakta webbmastern!<br>"
end if 
%>

jag fattar inte vad jag gjort för fel, men det funkar inte.

------------------
Mvh Martin Persson
www.Costodia.com

emissionMedlem sedan dec. 19996 721 inlägg
#2

Byt

Set Mailer = Server.CreateObject("CDONTS.NewMail")

till

Set objMail = Server.CreateObject("CDONTS.NewMail")

och

if CDONTS.NewMail then

till

if objMail.Sendmail then

Precis som det står i originalkoden.

[Redigerat av emission den 14 jan 2001]

costodiaMedlem sedan aug. 2000864 inlägg
#3

Nu blir det inte det felet längre men nu klagar den på att

Microsoft VBScript runtime error '800a01b6' 

Object doesn't support this property or method: 'FromName' 

/maillista/run.asp, line 38

stödjer inte cdonts fromname?

------------------
Mvh Martin Persson
www.Costodia.com

M@rtinMedlem sedan dec. 19992 085 inlägg
#4

From heter det väl bara? Inte FromName! Så skriver jag iaf.

------------------
//M@rtin || Peachy.nu\\

Sue Me!

PontusMedlem sedan maj 200020 inlägg
#5

Bra artikel i ämnet...
http://www.asptoday.com/articles/19990415.htm

/Pontus

------------------
[Pontus Boström | dev@pontus.nu]

costodiaMedlem sedan aug. 2000864 inlägg
#6

Nu får jag istället felmedelandet

Microsoft VBScript runtime error '800a01b6' 

Object doesn't support this property or method: 'RemoteHost' 

/maillista/run.asp, line 41

i artiklen på http://www.asptoday.com/articles/19990415.htm står det inget om hur man ställer in smtpservern som jag kan se och det är tyvärr det som är problemet.
Koden ser ut så här nu

<%
Do Until Poster.EOF 

Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = Request.Form("Sender")
objMail.From = Request.Form("Epostsender")
strMailHost = "mail.costodia.com"
objMail.RemoteHost = strMailHost
objMail.AddRecipient "Maillista", Poster("Epost")
objMail.Subject = Request.Form("Rubrik")
objMail.BodyText = Request.Form("Meddelande")
if objMail.Sendmail then
Response.Write ""
else
Response.Write "Ett fel uppstod. Kontakta webbmastern!<br>"
end if 
%>

och som jag förstår det så ligger felet i denna raden

strMailHost = "mail.costodia.com"
objMail.RemoteHost = strMailHost

någonstans men vad jag ska skriva istället för RemoteHost förstår jag inte.

------------------
Mvh Martin Persson
www.Costodia.com

PontusMedlem sedan maj 200020 inlägg
#7

I din originalkod så använder du dig av ASPMail, och _inte_ cdonts...

Eftersom RemoteHost bara funkar just med ASPMail så är det nog därför du inte får det att fungera.

Jag har inte kört ASPMail själv, men här hittar du info om denna komponent: http://www.serverobjects.com/products.htm#aspmail

Observera dock att ASPMail är en komponent som du måste installera på din webbserver.

/Pontus

------------------
[Pontus Boström | dev@pontus.nu]

costodiaMedlem sedan aug. 2000864 inlägg
#8

Tyvärr har jag bara ett webhotell så jag kan inte installera aspmail.
Därföör tänkte jag att jag skulle kunna skriva om koden så att den funkar till cdonts det har gått förut så varför skulle det inte funka nu?

------------------
Mvh Martin Persson
www.Costodia.com

PontusMedlem sedan maj 200020 inlägg
#9

Det är klart att det går att skriva om den, men mitt tips är att börja med att kommentera bort "RemoteHost"...

Här är en bra kod att starta med. All data är statisk, men det är ju lätt att ändra efter behov...

<%
'objekt
Set objMail = Server.CreateObject("CDONTS.Newmail")
'mottagare
objMail.To = "mail@mail.com"
'avsändare
objMail.From = "mail@mail.com"
'ämne
objMail.Subject = "Jo..."
'meddelande
objMail.Body = "Blargh!"
'skickar mailet
objMail.Send
'dödar objektet
Set objMail = Nothing
%>

Slutligen:
Sök efter "cdonts" på http://msdn.microsoft.com. Där finns all info du behöver. ;)

/Pontus

------------------
[Pontus Boström | dev@pontus.nu]

costodiaMedlem sedan aug. 2000864 inlägg
#10

Jag var inne på http://msdn.microsoft.com och den är riktigt bra. Men jag hittade inte riktigt lösningen, du skriver att jag kan börja att kommentera bort remoteHost, jag är lite ny på asp så jag vet inte hur man gör så jag tänkte om du har lite tid skulle det hjälpa mig grymt mycket om du skrev ett exmepl på hur jag skulle kunna kommentera bort remoteHost.

------------------
Mvh Martin Persson
www.Costodia.com

[Redigerat av costodia den 15 jan 2001]

PontusMedlem sedan maj 200020 inlägg
#11

Det jag menade var att du kan börja med att, i din kod, kommentera bort raderna som handlar om RemoteHost. (för att se om det funkar/om du får ett annat felmeddelande)
För att kommentera bort en rad i asp så lägger du bara en ' (enkelfnutt) framför den rad du vill kommentera bort.

Om du sedan utgår från koden:

<%
'objekt
Set objMail = Server.CreateObject("CDONTS.Newmail")
'mottagare
objMail.To = "mail@mail.com"
'avsändare
objMail.From = "mail@mail.com"
'ämne
objMail.Subject = "Jo..."
'meddelande
objMail.Body = "Blargh!"
'skickar mailet
objMail.Send
'dödar objektet
Set objMail = Nothing
%>

..fast du byter såklart ut e-post adresser och dyl. mot din egen data, så kommer du kunna maila galant! ;)

Koden ovan är ganska "light", så om du vill ha mer kontroll/funktionalitet på ditt mailande så är det en tur till http://msdn.microsoft.com som gäller. Där hittar du kodexempel och vilka ytterligare argument cdonts kan använda sig av. (t.ex. om mailen skall vara i html-format, vilken prioritet dom ska ha os.v...)

Lycka till!

/Pontus

------------------
[Pontus Boström | dev@pontus.nu]

costodiaMedlem sedan aug. 2000864 inlägg
#12

Jo jag brukar använda mig av en sådan kod.
Problemet är att detta är en mailinglista och det
ska skickas ut till
adresser som läses från en databas.
Vanligtvis när jag använder sevrern med aspmail på
så använder jag denna koden:

Function SendEmail( sEmailServer, sFromEmail,
sToEmail, sSubject, sText )
Dim objMail
set objMail =
server.createobject("SMTPsvg.Mailer")
objMail.FromName = sFromEmail
objMail.FromAddress = sFromEmail
objMail.RemoteHost = sEmailServer
objMail.AddRecipient sToEmail, sToEmail
objMail.Subject = sSubject
objMail.BodyText = sText
if objMail.SendMail then
SendEmail = ""
else
' Message send failure
SendEmail = objMail.Response
end if
Set objMail = nothing
End Function

och när jag sen byter till den andra servern så
brukar jag byta till dennna kod rakt av:

Function SendEmail( sEmailServer, sFromEmail,
sToEmail, sSubject, sText )
Dim objMail
Set objMail = CreateObject("CDONTS.NewMail")
objMail.From = sFromEmail
objMail.To = sToEmail
objMail.Subject = sSubject
objMail.Body = sText
objMail.Send
Set objMail = nothing
End Function

men när jag gör det nu så blir det :
Microsoft VBScript compilation error '800a040e'

'loop' without 'do'

/maillista/run.asp, line 49

Loop
^

hela koden till run.asp ser ut så här

<html>

<head>
<title>Nu skickas breven ut....vänta....</title>
</head>

<body bgcolor="#FFFFFF"
background="../images/bakbla.gif" text="#000000">

<table border="0" width="600">
<tr>
<td width="114"></td>
<td width="478"><img
src="../../images/mailplatta.gif"
alt="mailplatta.gif (5653 bytes)"
WIDTH="352" HEIGHT="94"><p><font
face="Verdana"><small>.....mailet skickas till de
mottagare som finns i listan.</small><br>
<small>Sändningen kan ta en stund beroende på
hur många</small><br>
<small>som finns i listan</small></font></p>
<hr size="1" align="left" width="350">
<p> </td>
<td><br>
</td>
</tr>
</table>
<%
Listval=Request.Form("Listval")
Set Databas =
Server.CreateObject("ADODB.Connection")
Databas.Open ="DRIVER={Microsoft Access Driver
(*.mdb)}; DBQ=" &
Server.MapPath("../../asp/maillista.mdb")
SQLStmt = "SELECT Distinct Epost FROM Lista WHERE
" & Listval & " = 'True'"
Set Poster = Databas.Execute(SQLStmt)
%>

<table border="0" width="600">
<tr>
<td width="114"></td>
<td width="478"><font
face="Verdana"><small>Brevet skickat till följande
mottagare: <p><%
Function SendEmail( sEmailServer, sFromEmail,
sToEmail, sSubject, sText )
Dim objMail
Set objMail = CreateObject("CDONTS.NewMail")
objMail.From = sFromEmail
objMail.To = sToEmail
objMail.Subject = sSubject
objMail.Body = sText
objMail.Send
Set objMail = nothing
End Function
%><strong>
<%= Poster("Epost")%> <br>
<%
Poster.MoveNext
Loop
%> </strong></small></font></td>
</tr>
</table>
<%Databas.Close%>
</body>
</html>

Vanligtvis när jag ändrar på detta sätt så brukar
jag få ändra i den filen som jag matar in datan
som
sedan skcikas via cdontsfilen, i detta fallet
skulle det vara maila.asp

<html>

<head>
<meta name="GENERATOR" content="Microsoft
FrontPage 3.0">
<title>Skicka ett brev</title>
</head>

<body background="../../images/rodbakgrund.gif"
bgcolor="#FFFFFF">

<table border="0" width="600">
<tr>
<td width="122"></td>
<td width="470"><img
src="../../images/mailplatta.gif"
alt="mailplatta.gif (5644 bytes)" WIDTH="352"
HEIGHT="94"><p> </td>
</tr>
<tr>
<td width="122"></td>
<td width="470" bgcolor="#CAE4FF"><form
method="POST" action="run.asp">
<p><font face="Verdana"><small><%%>Välj den
lista du vill skicka till:</small><br>
</font><select name="listval" size="1">
<option value="Datorer">Datorer</option>
<option value="Mjukvara">Mjukvara</option>
<option
value="Tillbehor">Tillbehor</option>
<option value="Spel">Spel</option>
</select></p>
<p><font face="Verdana"><small>Skriv in en
rubrik på meddelandet:</small><br>
<input type="text" name="Rubrik"
size="30"></font></p>
<p><small><font face="Verdana">Skriv in
meddelandet:</font></small></p>
<p><textarea rows="10" name="meddelande"
cols="50"></textarea></p>
<p><font face="Verdana"><small>Välj namn på
avsändare:</small><br>
</font><input type="text" name="sender"
size="30" value="Intermedia Publishing AB"></p>
<p><font face="Verdana"><small>Välj
e-postadress på avsändare:</small><br>
</font><input type="text" name="epostsender"
size="30" value="martin3@home.se"></p>
<p><input type="submit" value="Skicka"
name="B1"><input type="reset" value="Rensa"
name="B2"></p>
</form>
</td>
</tr>
</table>
</body>
</html>

Men här hittar jag inget lämpligt ställe att lägga
in smtpserver på.
Scriptet är hämtat från http://www.idg.se/mikrodatorn/webbmastern/md9804/
Att tillägga är att jag har testat så att cdonts
funkar, så det är inte cdonts som krånglar det vet
jag.

Mvh Martin

------------------
Mvh Martin Persson
www.Costodia.com

murofbewMedlem sedan juni 2000229 inlägg
#13

Jag har haft liknknde problem och då var rättigheterna till mappen "mailroot" felaktigt satta. Jag har också för mig att det finns inställningar i IIS manager där man kan ange "default SMTP-server" dvs man behöver inte ange detta i skriptet. Jag reserverar mig för dessa uppgifter då det var ett tag sedan jag pysslade med detta.

PontusMedlem sedan maj 200020 inlägg
#14

Enligt ditt felmeddelande så har du nog glömt att säga hur länge scriptet ska loopa - t.ex: "Do until rs.EOF" innan
du kallar på "loop"...

/Pontus

------------------
[Pontus Boström | dev@pontus.nu]

costodiaMedlem sedan aug. 2000864 inlägg
#15

nu ser koden ut så här istället

<%
Listval=Request.Form("Listval")
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open ="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../asp/maillista.mdb") 
SQLStmt = "SELECT Distinct Epost FROM Lista WHERE " & Listval &  " = 'True'"
Set Poster = Databas.Execute(SQLStmt)
%>

<table border="0" width="600">
  <tr>
    <td width="114"></td>
    <td width="478"><font face="Verdana"><small>Brevet skickat till följande mottagare: <p><%
Function SendEmail( sEmailServer, sFromEmail,sToEmail, sSubject, sText )
   Dim objMail
   Set objMail = CreateObject("CDONTS.NewMail")
   objMail.From = sFromEmail
   objMail.Subject = sSubject
   objMail.Body = sText
Do until rs.EOF
for i = 0 to UBound
   objMail.To = sToEmail(i)
   objMail.Send
Next
   Set objMail = nothing
End Function
End Function
%><strong>
<%= Poster("Epost")%>    <br>
<% 
Poster.MoveNext 
Do until rs.EOF
Loop 
%>    </strong></small></font></td>
  </tr>
</table>
<%Databas.Close%>

men nu kommer det istället upp

Brevet skickat till följande mottagare:

costo@yesbox.net

Microsoft VBScript runtime error '800a01a8'

Object required: ''

/maillista/run.asp, line 51

Linje 51 är denna:
Do until rs.EOF
vad är det för objekt jag ska lägga in där?

[Redigerat av costodia den 16 jan 2001]

costodiaMedlem sedan aug. 2000864 inlägg
#16

äntligen så verkar det funka lite bättre

det är bara ett litet felmeddelande kvar

Microsoft VBScript runtime  error '800a01a8'

Object required: ''

/maillista/run.asp, line 51

vad är detta för objekt som saknas?

------------------
Mvh Martin Persson
www.Costodia.com

emissionMedlem sedan dec. 19996 721 inlägg
#17

Du skapar aldrig ett recordset som heter rs. Ditt recordset heter Poster.

Det fanns en hel del fel i koden.

Do until rs.EOF <- vilket recordset, var kommer det ifrån?
for i = 0 to UBound <---UBound vadå? UBound kräver en array som argument
objMail.To = sToEmail(i) <---Här är Arrayen
objMail.Send
Next
Set objMail = nothing
End Function
End Function <---Du kan inte ha två end function
%><strong>
<%= Poster("Epost")%> <br>
<%
Poster.MoveNext
Do until rs.EOF
Loop <----- Här gör du en loop helt i onödan, med ett recordset som inte finns

Jag menar inte att kritisera, men det är bättre att påvisa felen än att bara visa en lösning.

Lösningen kommer här:

<%
Listval=Request.Form("Listval")
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open ="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../asp/maillista.mdb") 
SQLStmt = "SELECT Distinct Epost FROM Lista WHERE " & Listval & " = 'True'"
Set Poster = Databas.Execute(SQLStmt)
%>
<table border="0" width="600">
<tr>
<td width="114"></td>
<td width="478"><font face="Verdana"><small>Brevet skickat till följande mottagare: <p><%
%><strong>
<%do until Poster.EOF
SendEmail "din.server","sändaradress",Poster("Epost"),"Ämnet","Texten"
%>
<%= Poster("Epost")%> <br>
<% 
Poster.Movenext
Loop
%> </strong></small></font></td>
</tr>
</table>
<%
Databas.Close

Sub SendEmail(sFromEmail,sToEmail,sSubject,sText)
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = sFromEmail
objMail.Subject = sSubject
objMail.Body = sText
objMail.To = sToEmail
objMail.Send
Set objMail = nothing
End Function

%>

Kommentar:

Det är ditt skript, med lite omflyttningar. Epost-adresserna hämtas ur databasen, och skickas en och en till subrutinen SendEmail, som skickar dem. Eftersom subrutinen inte returnerar något värde (vilket i och för sig skulle vara vettigt) så är det en Sub, och inte en Function.

[Redigerat av emission den 16 jan 2001]

costodiaMedlem sedan aug. 2000864 inlägg
#18

Tack så mycket för svaret,
tyvärr blir det endå

Microsoft VBScript compilation error '800a03f8' 

Expected 'Sub' 

/maillista/run.asp, line 34 

End Function
----^

vad har jag gjort fel?
jag skrev skriptet precis som du beskrev. alltså så här ser hela run.asp ut:

<%
Listval=Request.Form("Listval")
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open ="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../asp/maillista.mdb") 
SQLStmt = "SELECT Distinct Epost FROM Lista WHERE " & Listval & " = 'True'"
Set Poster = Databas.Execute(SQLStmt)
%>
<table border="0" width="600">
<tr>
<td width="114"></td>
<td width="478"><font face="Verdana"><small>Brevet skickat till följande mottagare: <p><%
%><strong>
<%do until Poster.EOF
SendEmail "mail.costodia.com","sändaradress",Poster("Epost"),"Ämnet","Texten"
%>
<%= Poster("Epost")%> <br>
<% 
Poster.Movenext
Loop
%> </strong></small></font></td>
</tr>
</table>
<%
Databas.Close
Sub SendEmail(sFromEmail,sToEmail,sSubject,sText)
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = sFromEmail
objMail.Subject = sSubject
objMail.Body = sText
objMail.To = sToEmail
objMail.Send
Set objMail = nothing
End Function

%>

är inte det rätt?

------------------
Mvh Martin Persson
www.Costodia.com

emissionMedlem sedan dec. 19996 721 inlägg
#19

Glömde att ändra End Function till End Sub

costodiaMedlem sedan aug. 2000864 inlägg
#20

Nu fattar jag ingenting längre eftersom netscape har slutat ge felmeddelande testa gärna själv på http://www.costodia.com/maillista/maila.asp koden ser nu ut så här

<%
Listval=Request.Form("Listval")
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open ="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../asp/maillista.mdb") 
SQLStmt = "SELECT Distinct Epost FROM Lista WHERE " & Listval & " = 'True'"
Set Poster = Databas.Execute(SQLStmt)
%>
<table border="0" width="600">
<tr>
<td width="114"></td>
<td width="478"><font face="Verdana"><small>Brevet skickat till följande mottagare: <p><%
%><strong>
<%do until Poster.EOF
SendEmail "mail.costodia.com","epostsender",Poster("Epost"),"Ämnet","Texten"
%>
<%= Poster("Epost")%> <br>
<% 
Poster.Movenext
Loop
%> </strong></small></font></td>
</tr>
</table>
<%
Databas.Close
Sub SendEmail(sFromEmail,sToEmail,sSubject,sText)
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = sFromEmail
objMail.Subject = sSubject
objMail.Body = sText
objMail.To = sToEmail
objMail.Send
Set objMail = nothing
End Sub

%>

------------------
Mvh Martin Persson
www.Costodia.com

[Redigerat av costodia den 17 jan 2001]

152 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
148 ms — hämta tråd, inlägg och bilagor (db)