Avatar billede hnteknik Novice
03. september 2003 - 12:02 Der er 35 kommentarer og
1 løsning

JMAIL (hos Azero.dk) driller ved masseudsendelse

Jeg har i en årrække udsendt 4-500 mails ved at lade et SQL udtræk loope henover nedenstående script. Ikke de store problemet andet end timeouts, som reddes ved at sætte tiden op.

Forleden skulle jeg udsende +1200 mails over samme læst.
Koden meldte ikke fejl, men men men.

De første ca. 600 mails kom ud uden problemer, så var der en pause på 300 mails, som returenede. så sendte den igen en 20-30 stykker og returnerede resten.

Fejlkoden heftet til de returnerede mails er:

Action: failed
Status: 5.0.0
Diagnostic-Code: smtp;552 130.227.30.41: your message counts in one session of 50 exceeds maximum setting 20

-------
Jeg er bekendt med, at (Azero) anbefaler, at man closer forbindelsen hver 20 gang, problemet er tofold:

Ingen andre steder på nettet beskæftiger sig med denne egenskab ved jmail ( er det et Azoero.dk problem ?)

Jeg har for under 500 mails uden problemer kunne bruge nedenstående script:

------------------------------- findes i en include file ----
if Mailtype=1 then

  Set JMail =  Server.CreateObject("JMail.SMTPMail")
  JMail.Logging =  true
  JMail.silent =  true

  JMail.ServerAddress =  "websmtp.ZZZZZZ.dk"
  JMail.SenderName  = "ZZZZZ NYT"
  JMail.Sender        = "admin@ZZZZZ.dk"
  JMail.Subject        = subject
  JMail.AddRecipient  Email
  JMail.Priority      =
  JMail.AddHeader    "Originating-IP",  Request.ServerVariables  ("REMOTE_ADDR")
  JMail.Body=BodyTextto
  if  not JMail.Execute then
    Response.write "<pre>" &  JMail.log &  "</pre>"
  else
    'Response.write "Mail  OK"
    'Response.write Email  &  "<b>"
    'Response.write subject  &  "<b>"
    'Response.write BodyTextto
  end  if
  JMail.close
  set JMail = nothing

End if
---------------------------

Er der andre der kender til problemet og evt. en løsning.
Azero.dk skulle angiveligt for nyligt have opgraderet til Jmail 4.3.1 ---> Burde jeg køre med en nyere objectmodel med andre metode- og variabel- navne ??

Er der en effektiv måde at sende op til 2000 mails ud med JMAIL ( hos Azero.dk) kodet i ASP. Azeros løsning har været oprettelsen af en mailliste.

Da alt opdatering af mails mv. foregår via MYSQL er det den vej en evt. mailliste skal vedligeholdes. Er der et eks. på opdatering af maillisten ( en tekstfil som man ikke mere har adgang til via FTP) via ASP ??? ( Jeg tror de bruger Merek mailserver 5.8.6)

Det var meget, men hvis man et par gange har sendt JMAILjunk ud til El Pueblo blive man hængt op i tomlerne uanset årsag.

Henrik
Avatar billede vbcoder Nybegynder
03. september 2003 - 12:35 #1
jeg har hørt om problemet før og han løste det ved at lukke jmail obj for hver 500 mails han sendte ud. Det løste problemet.

så vidt jeg ved har du adgang til mailinglisten via deres webadmin men det er jo ikke måden at vedligeholde listen på.

jeg lavede engang et lille ftp program men det var før de lukkede ftp adgangen til mailserveren.

//vbcoder
Avatar billede vbcoder Nybegynder
03. september 2003 - 13:22 #2
i mine arkiver har jeg fundet følgende

når man skal sende mange mails ud er det vigtigt ikke at sætte alle egenskaber hver gang men kun dem der ændrer sig. særlig .serveradress tenderer til at sløve jmail ned

dvs i løkken der sender skal kun bruges de egenskaber der ændrer sig hver gang
ved en mailing liste er det vel typisk modtageren JMail.AddRecipient

en anden ting ved jmail er massmailing funktionen. den gør brug af mailserverens pickup directory. det betyder jo så at det kun er filhåndtering den laver da den ikke længere skal lave den direkte smtp kommunikation med andre mailservere.
Avatar billede vbcoder Nybegynder
03. september 2003 - 13:23 #3
massmailing findes kun i pro versionen - og jeg ved ikke hvilken azero har installeret
Avatar billede vbcoder Nybegynder
03. september 2003 - 13:25 #4
en snip fra dokumentationen

Enqueue and MS Pickup Directory

When using Dimac’s w3 JMail as a mass mailer, you will use the method
nq(). nq() on the other hand uses the SMTP service provided by Microsoft
Internet Information Server (IIS).

The SMTP service has a directory where it polls for e-mails. It is called MS
Pickup directory and it is by default created as C:\Inetpub\mailroot\Pickup.
1. The MS SMTP service must be installed on the machine where w3 JMail
is to be used (or on a remote machine where w3 JMail can access its pickup
directory). Other SMTP servers can be used as well, if they support mail
delivery through a pickup directory.

2. The queueing function is dependant of w3 JMail being able to access
to mail servers’ pickup directory (often located in c:\inetpub\mailroot\pickup,
depending on your installation). Therefore, the fi lesystem permissions sometimes have to be adjusted to allow the IIS guest account (IUSR) to access it.

3. Unless you are running MS Windows 2000 or later, you need to specify
the location for w3 JMail to fi nd the pickup directory. You can do this either
at runtime, like this:

Message.MsPickupdirectory = 0“c:\inetpub\mailroot\pickup\”

or if you are using mailmerge:

MailMerge.BulkMerge(myRS,true,“c:\inetpub\mailroot\pickup”)

You can also do it in your web server’s registry once and for all. Read more
about this in the chapter JMail registry settings.

4. For some installations, you will need to set read/write permissions for the
EVERYONE user in the pickup directory.
Avatar billede vbcoder Nybegynder
03. september 2003 - 13:26 #5
Merak mailserver understøtter pick dir så det burde virke med den.
Avatar billede vbcoder Nybegynder
03. september 2003 - 13:35 #6
en anden ide kunne være at lave

.addrecipientbcc - køre den i en løkke 100 gange og så smide mailen afsted

nogle mailservere accepterer kun 100 modtagere på en mail (noget rfc stuff)
men du vil kunne nå 2000 brugere med kun 20 jmail.execute
Avatar billede hnteknik Novice
03. september 2003 - 13:50 #7
>>vbcoder

Problemet med Merek er nok ikke pickup, da den skulle kunne håndtere +10.000 mails. Problemet er håndteringen af maillisten under Mereks mailserver, nu da man ikke kan skrive filen direkte og lægge den med i mappen med f.eks. file server objektet. Er den enenste løsning af danne en mail med Jmail og sende 'listen' til listserv@xxxx.dk

Azero om pick up mappen:
JMail pickup directory (queue)
der bruger en lokal SMTP server, dette virker kun for serverkunder med lokal IIS SMTP server installeret

Kan jeg bruge pickup directory til JMail (nq, queuing)?
Nej, det findes ikke på vores webservere for øjeblikket. Du kan eventuelt følge med på projekter for at se om vi indfører det.

Hvordan bruger jeg nq/Queue/MSPickupdirectory?
Det kan man kun hvis der kører en lokal SMTP service. Vi kører en fælles SMTP service og du kan derfor ikke bruge Queuing.

---
Jeg har selv oprindelig tænkt på belastningen af serveren ved at åbne og lukke JMAIL objektet for hver mail. I min tankegang betyder commandoen .close at man lukker objektet. Dette er nok ikke tilfældet i virkeligheden:

Force JMail to close an cached connection to a mailserver: JMail.Close();

ps jeg fandt iøvrigt en online manus for JMAIL which might come handy for some:
http://host.cdesystems.com/faq/jmail_asp_online_manual.htm
Avatar billede hnteknik Novice
03. september 2003 - 13:57 #8
>>vbcoder tal for dine responds

Du er sandelig  hurtig og jeg fik sendt denne uden at fundende den.
Min tanke er at få JMAIL op at snurre rigtig, Hvis .close ikke lukker objektet, så er muligheden for ikke at belaste serveren for meget, at

1. åbne objektet og tildele standard værdierne.
2 loope over tabellen
2.1 .addrecipientbcc op til 20 emails , .execute() og .close()
3 set object to nothing and exit

Jeg vil teste dette i aften på min egen AZERO mail admin ( så evt. fejl ikke lander i de 'forkerte' hænder).

Skal der ikke anvendes andre metoder og variabel navne for version 4.3 JMAIL ?
Tilsyneladende virker de gamle udtryk - på et gammelt objekt ??
Henrik
Avatar billede hnteknik Novice
03. september 2003 - 14:03 #9
JAMIL 4.3:

set msg = Server.CreateOBject( "JMail.Message" )
if not msg.Send("mail.myDomain.net" ) then
    Response.write "<pre>" & msg.log & "</pre>"
else
    Response.write "Message sent succesfully!"

Jeg kan ikke se, om AZERO upper dette objekt eller f.eks. jmail.speedmailer
Det må komme an på en prøve.
end if
Avatar billede vbcoder Nybegynder
03. september 2003 - 14:24 #10
i min kode bruger jeg selv message objektet
Avatar billede vbcoder Nybegynder
03. september 2003 - 14:26 #11
jmail.close svarer til at man i kommunikationen med smtp serveren sender en

QUIT

der så afbryder smtp forbindelsen
Avatar billede hnteknik Novice
03. september 2003 - 14:31 #12
Det kan godt være, at hele misæren ligger i et gammelt objekt.
Det mest effektive ville være .BulkMerge() over en template til et pickup område, men det understøttes jo ikke hos AZERO

Mit problem med .AddRecipientBCC() er at jeg gerne sendte en 'personlig' hilsen som 'Hej Peter ...'

Kan du gøre det mere effektivt end ovenstående 1..3 looping ??
Avatar billede vbcoder Nybegynder
03. september 2003 - 14:45 #13
jeg ville bruge message objektet

sætte objektet
sætte statiske egenskaber
gennemløbe mit recordset i løkker á 500 poster
for hvert gennemløb sætte modtageremail, subject
lukke objektet ned

starte forfra indtil jeg ikke har flere i min database
Avatar billede vbcoder Nybegynder
03. september 2003 - 14:46 #14
men jeg har en lille hosting biz - hvis du er interesseret - temmelig stabil faktisk
Avatar billede vbcoder Nybegynder
03. september 2003 - 15:16 #15
evt kontakt via www.visualcoder.dk
Avatar billede hnteknik Novice
03. september 2003 - 15:18 #16
>>vbcoder
Det er da et tilbud. Det er et par foreninger, som jeg lagt ud hos AZERO
De forventer qua manglende viden, at sådan noget bare virker. Fair nok.

Lad mig komme tilbage hvis det bliver aktuelt. Jeg har selv tænkt på at sætte en dedikeret server op, men kan hamle op med nuværende hotelpriser.
Jeg må lige teste med det nye objekt. Kan være, at det virker.
Avatar billede vbcoder Nybegynder
03. september 2003 - 17:19 #17
du skal være velkommen

//vbcoder
Avatar billede hnteknik Novice
04. september 2003 - 00:45 #18
>>vbcoder

to nettoposer under øjnene.
JMAIL ( eller modtager mailsystemet TDC ) har et problem. Banker 999 mails afsted med nedenstående kode. De 560 ok - hul indtil 960 hvorefter resten kommer.
Sender systemet bliver sløvere og sløvere - det har virkeligt fået noget at lave - når enden uden at time ud.

Sender mail får retur fra TDC - Mail System Error- Returned mail

Måske skulle man lave et ydre loop, der kalder siden op  for at sende say 100 af gangen. Nu er det sengetid.

<%
Email = "xxx@yyy.dk"
ENavn = "Henrik Nielsen"
subject = "test af mailserver"
BodyTextto = " Hej det er Henrik"
FromNavn = "xxx NYT"
FromMail = "admin@xxx.dk"
SMTPNavn = "websmtp.xxx.dk"
grundnr ="0000"
mailnr=1
mailmax = 999
Session.Timeout = 40
Server.ScriptTimeout =1800
        '-------------- start------------------------
        ' dimarc 4.3 JMAIL
        Set JMail = Server.CreateOBject( "JMail.Message" )
        JMail.Logging = true
        JMail.silent = true
        JMail.From = FromMail
        JMail.FromName = FromNavn
        JMail.Priority      = 3
        JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
        ' ---------------------Loop del ----------------------
    do while mailnr <= Int(mailmax)
        taeller = " " & left(grundnr,4-len(cstr(mailnr))) & cstr(mailnr)
        JMail.Subject      = subject & taeller
        JMail.AddRecipientBCC  Email, Enavn
        JMail.Body="Velkommen " & Enavn & " " & BodyTextto & taeller
        if not JMail.Send(SMTPNavn) then
            Response.write "<pre>" & JMail.log & "</pre>"
        else
            Response.write "Mail OK" & "-->"
            Response.write Email  & "<b>"  & "-->"
            Response.write subject  & taeller & "-->"
            Response.write BodyTextto & "</br>"
        end if
        If (mailnr MOD 20) = 0 then
            JMail.Close()
            Response.write "Con Lukket <br>"
            Response.flush
            If Response.isclientconnected()=false THEN
                Response.Write "Vi tabte forbindelsen .... "
                EXIT DO
            END IF
            Response.flush
        end if
        mailnr= mailnr+1
    loop
       
        '-------------------------- slutstadie ---------------------------------------
        set JMail = nothing
        %>
Avatar billede vbcoder Nybegynder
04. september 2003 - 09:02 #19
prøv lige kontakte mig via min hp - så kan vi sætte en test op hvor du går direkte på pasmtp.tele.dk på min forbindelse
Avatar billede hnteknik Novice
04. september 2003 - 09:51 #20
>>vbcoder
Jeg er på vej ind i et møde, så lad mig vende tilbage senere.

fejlkoden sendt direkte tilbage var:
Final-Recipient: RFC822; <wwww@zzzz.dk>
Action: failed
Status: 4.2.2

Indkomne Mail sender jeg videre til min L.... Notes.
Af gud ved hvilken årsag oversættes koden til:

This Message was undeliverable due to the following reason:

Dansk forklaring, klik her:
http://err.mail.dk/redirect.pl?MsLimitTotalSize

The user(s) account is temporarily over quota.

Problemet er måske det samme, når man sender til en kooperativ mailbox.


Nu var der ikke så meget i de 999 mails ( 1.000 mails er iøvrigt loftet hos TDC). Af en eller anden grund, så tømmes .AddRecipient ikke, når mailen sendes, men først, når objektet lukkes. Logisk nok men det fylder op i CC, som oprindeligt kun skulle indeholde 1 mailadresse.Gad vide om der er en kommando til at tømme .AddRecipient.

Derfor ændrede jeg koden til .AddRecipientBCC. Ved at sende efter hver mail, kan jeg lave individuelle mails.
Avatar billede vbcoder Nybegynder
04. september 2003 - 14:46 #21
jeg har modificeret lidt på din løkke og sendt 1000 mails 6m17s
Avatar billede vbcoder Nybegynder
04. september 2003 - 15:09 #22
modificeret lidt mere 1000 mails på 4m30s - så kan det vidst ikke blive hurtigere - serverload på gnst 40% cpu
Avatar billede hnteknik Novice
04. september 2003 - 15:29 #23
Jeg har sendt en request på den HP om at se koden.

Det udvikler sig idet jeg stadig får 'mail system error' sendt fra systemet. Nu er fejlkoden klippet sammen med danske og norske kollegaers (personlige) mails. Nu har jeg dog slettet hele baduljen, men det ser ud til at modtager server ikke rigtig er klædt på til at modtage så meget fra en server.

Det er tydeligt, at .addrecipient sætter er grim stor header. Norton antispam/viruscheck etc. har nok også sin del.
Avatar billede vbcoder Nybegynder
04. september 2003 - 15:48 #24
min hp ?
Avatar billede vbcoder Nybegynder
04. september 2003 - 15:49 #25
jeg kan ikke se dig i loggen
Avatar billede hnteknik Novice
04. september 2003 - 15:50 #26
Avatar billede vbcoder Nybegynder
04. september 2003 - 15:51 #27
så har du ikke set jeg har sendt dig link til en test server
Avatar billede vbcoder Nybegynder
04. september 2003 - 15:52 #28
<%
if request.servervariables("REQUEST_METHOD") = "POST" Then

Email = request.form("email")
ENavn = " VisualCoder "
subject = "test af jmail på itrade.dk"
BodyTextto = " VisualCoder "
FromNavn = " VisualCoder "
FromMail = "admin@inetpost.dk"
SMTPNavn = "pasmtp.tele.dk"
grundnr ="0000"
mailnr=1
mailmax = 1000
loopmax = mailmax
Session.Timeout = 40
Server.ScriptTimeout =1800

for loopcounter = 1 to loopmax       

    response.write("<br><br>jmail objekt dannes " & now & "<br><br>")
    '-------------- start------------------------
    ' dimarc 4.3 JMAIL
    Set JMail = Server.CreateOBject( "JMail.Message" )
    JMail.Logging = false
    JMail.silent = false
    JMail.From = FromMail
    JMail.FromName = FromNavn
    JMail.Priority      = 3
    JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
   
    ' ---------------------Loop del ----------------------

        'do while mailnr <= Int(mailmax)
            taeller = " " & left(grundnr,4-len(cstr(mailnr))) & cstr(mailnr)
            mailnr= mailnr+1
            JMail.Subject      = subject & taeller
            JMail.AddRecipient Email, Enavn
            JMail.Body="Velkommen " & Enavn & " " & BodyTextto & taeller
            if not JMail.Send(SMTPNavn) then
                Response.write "<pre>" & JMail.log & "</pre>"
            else
                Response.write "Mail OK" & "-->"
                Response.write Email  & "<b>"  & "-->"
                Response.write subject  & taeller & "-->"
                Response.write BodyTextto & "</b>"
            end if
            If (mailnr MOD 20) = 0 then
                JMail.Close()
                Response.write ("<br>Con Lukket : " & now  & "<br>" )
                Response.flush
                If Response.isclientconnected()=false THEN
                    Response.Write "Vi tabte forbindelsen .... "
                    'EXIT DO
                    exit for
                END IF
                'set jmail = nothing
                'exit do
            end if
        'loop
       
        'response.write("gennemløb nr " & loopcounter & " lukker nu " & now  & "<br>" )       
        'response.flush
        'if mailnr = mailmax then exit for
       
next

'-------------------------- slutstadie ---------------------------------------
set JMail = nothing
else
        %>
        jmail tester 1000 mails
<form method="post" action="default.asp" >
Email der skal sendes til&nbsp:&nbsp&nbsp<input type="text" name="email" size="50" maxlength ="50">
<input type="submit" value="Start Jmail" name="start">
</form>       
       
       
       
        <%end if%>
Avatar billede vbcoder Nybegynder
04. september 2003 - 15:55 #29
på en p3-1000 med 256 ram og win2k - smider den 4 afsted i sekundet
Avatar billede hnteknik Novice
04. september 2003 - 16:10 #30
hej - jeg kan se, at det store ændring er for løkken, som må være hurtigere fordi den ikke skal teste hele tiden som i loopet.

Et eller andet sted tror jeg det er et modtager problem at tage mere end de 500 pr gang. Nu vil jeg teste det, når jeg kommer hjem og efter madgryderne, men jeg kan se, at du er gået væk fra AddRecipientBCC til fordel igen for AddRecipient - den var specielt med til at bygge en header op, som ikke er nødvendig. AddRecipientBCC  er god nok, når jeg tildeler .body en ny værdi for hvert gennemløb ?

Jeg kan se på AZERO, at ca. 50 errormails fylder ca. 2 MB, så headeren bliver stor til sidst 1000 x Ander and + A@a.dk
Avatar billede hnteknik Novice
04. september 2003 - 16:14 #31
Nu da man skal have fyldt og tømt så mange mailboxe kan jeg varmt anbefale
http://n247.net/JMailbox - den er lige til at gå til (i 0.82 udgaven - 0.9 er der et par ting der ikke virker i f.eks. win XP)
Avatar billede hnteknik Novice
04. september 2003 - 16:17 #32
>på en p3-1000 med 256 ram og win2k - smider den 4 afsted i sekundet

Kører du ikke internt på din egen server ???

Når jeg kører op mod en ekstern mailserver falder hastigheden ekspotentielt.
Lige som køen af biler nu vokser ude på ringvejen.

Jeg skal lige ud og købe lidt kantereller, bacon, fløde - tænde grillen op - marinere mørbranden og så knappe en flaske god merlot op.

Jeg kigger på det i aften.
Avatar billede vbcoder Nybegynder
04. september 2003 - 16:43 #33
jeg har mail server ja

men som du kan se af koden kører jeg ud mod tdc mail relæ for proaccess kunder
pasmtp.tele.dk

det kan være det bliver endnu hurtigere med bcc - det vil jeg lige prøve
Avatar billede vbcoder Nybegynder
04. september 2003 - 16:53 #34
i øvrigt velbekomme -

Han lader grønt græs spire frem til dyrene,
og planter til menneskenes tjeneste,
så han frembringer brød af jorden,
og vin der fryder det dødelige menneskes hjerte,
ja, han lader ansigtet glinse af olie,
og giver brød der styrker det dødelige menneskes hjerte.
Avatar billede vbcoder Nybegynder
04. september 2003 - 16:54 #35
4m30s med bcc
Avatar billede hnteknik Novice
08. oktober 2003 - 13:51 #36
Lad mig blot spinne en ende. Efter megen masen frem og tilbage har modtager webansvarlige indrømmet, at de har sat et spamfilter op, som bouncer alt efter email nr. 20. Det var slet ikke jmail, som havde problemet. Alt den snak, fordi AZEROs hotline ikke spotte problemet, men faldt tilbage på standardsvaret.

Roger Over.
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