Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
<select name="kundeGr"> <% set rs = conn.execute("select * from kundeGruppe order by name") do while not rs.eof response.write "<option value='"& rs("id") &"'>"& rs("name") rs.MoveNext loop %> </select>
og nå du så skal sende, vælger du kun de kunder som tilhører gruppen som er valgt i selecten: set rs = conn.execute("select email from kunder where kundeGr="& request.form("kundeGr"))
Okay, det ser jo ikke så tosset ud.. Men evt lidt mere forklaring, har min db ved navn login.mdb, og tabel navne der hedder Glarmester, KokkenBad, GlarmesterGalleri, Personale - hvordan skulle jeg fikse den?
Okay, det er jo nemt - men hvordan fusker jeg den lige ind i JMail? Min kode:
<% if request("mode") = "send" then
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb") SQL = "SELECT * from mailingliste" set send = conn.execute( SQL ) do while not send.eof on error resume next
Set JMail = Server.CreateObject("JMail.SMTPMail") JMail.ServerAddress = "" JMail.ContentType = "TEXT/HTML" JMail.Sender = "" JMail.SenderName = "" JMail.subject = "Nyhedsmail" JMail.AddRecipient send("email") 'HVORDAN SÆTTER JEG DEN SQL SÆTNING IND HER, SÅ DET FUNGERE??? JMail.AddRecipientBCC "" JMail.Body = "indhold"
Den Dropdown du laver: <select name="kundeTab"> <option value="Glarmester">Glarmester <option value="KokkenBad">KokkenBad <option value="GlarmesterGalleri">GlarmesterGalleri <option value="Personale">Personale </select>
Det navn du giver den i dette tilfælde kundeTab, skal du ha med over så Jmailen kan trække det ned. Det vil sige valuen som den for med over.
Prøv og rod lidt med det her:
<% StrKundeTab = Request.form("KundeTab") if request("mode") = "send" then
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb") SQL = "SELECT * from mailingliste" set send = conn.execute( SQL ) do while not send.eof on error resume next
Set JMail = Server.CreateObject("JMail.SMTPMail") JMail.ServerAddress = "" JMail.ContentType = "TEXT/HTML" JMail.Sender = "" JMail.SenderName = "" JMail.subject = "Nyhedsmail" JMail.AddRecipient send("email") 'HVORDAN SÆTTER JEG DEN SQL SÆTNING IND HER, SÅ DET FUNGERE??? JMail.AddRecipientBCC "" JMail.Body = "" & StrKundeTab & ""
Nu har jeg bare sat den i bodyen altså hovdeteksen, men du kan bare flytte den hvor hen det passer dig. Ved ikke om jeg har forstået dig helt rigtig.?
Det er os rigtig, den skal bare være i bodyen - og så har jeg min JMail og forbindelse før head. Det vil sige at alt afhængi efter hvad man vælger nu, så sender den til pågældende gruppe, fordi den Request'er fra KundeTab ?
Men hvorfor JMail.Body = "" & StrKundeTab & "" - jeg har jo et indhold til mailen med div. variabler osv.??
Hvis det virker heroven over, så er det sq nemt :D
Ja Den smækker valuen med over i i JMailen og StrKundeTab udskriver det i din body, og det bliver sendt til mail adressen. Men du skal huske det sender jo stadig til alle sammen. Altså den kode jeg ahr givet der, det var bare et eksempel, så må du selv flytte den. Man lærer mest ved og prøve og ikke bare få det 100% prævise svar ;)
Sådan her må det være - jeg har selvf. navngivet min option med KundeGruppe
<% StrKundeGruppe = Request.form("KundeGruppe") if request("mode") = "send" then
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("mailing.mdb") SQL = "SELECT * from StrKundeGruppe" set send = conn.execute( SQL ) do while not send.eof on error resume next
Set JMail = Server.CreateObject("JMail.SMTPMail")
Men det duer ikke rigtig? Er det ikke fordi der skal & tegn udenom strKundeTab i SQL sætningen?
... if request("mode") = "send" then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb") SQL = "SELECT email from "& request.form("KundeGruppe") set send = conn.execute( SQL ) Set JMail = Server.CreateObject("JMail.SMTPMail") JMail.ServerAddress = "" JMail.ContentType = "TEXT/HTML" JMail.Sender = "" JMail.SenderName = "" JMail.subject = "Nyhedsmail" do while not send.eof JMail.AddRecipientBCC send("email") send.MoveNext loop JMail.Body = "indhold" Jmail.Send("xxx") end if
Husk at bruge AddRecipientBCC, da det er ulovlig at vise andres email på en mailliste, og det gør man nå man bruger AddRecipient metoden. Har desuden ændret koden så alle bliver bliver tilføjet som modtager til den samme mail.
Som den er der burde der ikke være problemer. Du skriver du henter nogle requests og variabler ind, så det er ikke den rigtige du viser?? Kan du ikke smide den ind??
Jeg vil dog nok tro det har noget med den ændring i loopet jeg lavede.
do while not send.eof Set JMail = Server.CreateObject("JMail.SMTPMail") JMail.ServerAddress = "" JMail.ContentType = "TEXT/HTML" JMail.Sender = "" JMail.SenderName = "" JMail.subject = "Nyhedsmail" JMail.AddRecipientBCC send("email") JMail.Body = "HTML INDHOLD"& VbCrLf JMail.Priority = request("priority") JMail.Execute set JMail = nothing send.MoveNext loop
Men i dette tilfælde er det mest rigtige at benytte mailMerge funktionen i Jmail. Hvis du bruger overstående kode, kan du få problemer, hvis der er mange på listen der skal have mail (over 1000), da det vil tage langtid at køre scriptet. Det er her mailMerge kommer til sin ret :o)
Det kommer an på hvor mange mails du sender ud på en gang. Hvis det er under 100 burde der ikke være problemer. 100-1000 kan der opstå problemer, men det afhænger af serveren. Over 1000 vil jeg kraftigt anbefale at bruge mailMerge i stedet.
Ellers kan du droppe at smide navn/email i body teksten, og lave det som det var før, hvor loopet kun kører omkring JMail.AddRecipientBCC send("email"). Så sender du nemlig kun en mail, men den har en masse modtagere.
ups - lækker beskrivelse, det var nemt at forstå! Jeg skal desværre sende noget over 1000 mails. Men så må jeg jo prøve mig lidt frem med MailMerge. Det har kun betydning for koden ikk - ikke for mail indholdet vel?
'Lav email på normal vis (næsten) JMail.ServerAddress = "SERVER" JMail.ContentType = "TEXT/HTML" JMail.Sender = "SENDER ADR" JMail.SenderName = "SENDER NAVN" JMail.subject = "Nyhedsmail" JMail.AddRecipientBCC "%%Email%%", "%%Name%%" JMail.Body = "En mail send til %%Name%%"
'Hent info fra database SQL = "SELECT * FROM "& request.form("KundeGruppe") set rs = conn.execute( SQL )
'Load emailen over i MailMerge set mMerge = Server.CreateObject( "JMail.MailMerge" ) mMerge.MailTemplate = JMail
'Sammensæt mail med databasen, og smid det til pickup mMerge.BulkMerge rs, true, "c:\inetpub\mailroot\pickup"
Alle de steder hvor %%KODE%% svarer til en kolonne i databasen, bliver værdien indsat. Du kan f.eks indsætte addresse, zip og by med %%add%%,%%zip%% og %%city%% så længe de 3 kolonner eksistere/er valgt i selecten.
Den laver altså en unik mail til hver person. Som en ekstra feature sender dette eks ikke mailen til mailserveren, men til mailserverens pickup mappe. Det er en speciel mappe som mailserveren selv kikker i en gang imellem, når den har tid. Man kan også sende det direkte til mailserveren med: MailMerge.BulkMerge( rs, false, "mail.server.com" )
Men det bedste er at smide det i pickup mappen (stien er måske en anden hos jer), da det ikke belaster serveren så meget.
Synes godt om
Ny brugerNybegynder
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.