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]
23 svar · 458 visningar · startad av costodia
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.
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]
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?
From heter det väl bara? Inte FromName! Så skriver jag iaf.
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.
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
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?
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
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.
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
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
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.
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
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]
ä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?
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]
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?
Glömde att ändra End Function till End Sub
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
%>