Avatar billede milvos Nybegynder
08. september 2004 - 22:09 Der er 15 kommentarer og
1 løsning

Sende til flere med Jmail - skille adresser af - SQL udtræk

Jeg har en stump kode der hvist oprindelig er skrevet til CDONTS, her adskiller de flere adresser af med ";", hvordan skiller jeg den af i JMAIL

Kodestump:

if emailfield(rs(0))<>0 then
strRecipients = strRecipients & rs(0) & "?" (Hvad skal der være her)
end if
rs.movenext
Avatar billede eagleeye Praktikant
08. september 2004 - 22:13 #1
Der kan man kun Added en ad gangen med AddRecepet
JMail.AddRecipient "info@dimac.net"'

MEn du kan bare lave loopet sådan her

if emailfield(rs(0))<>0 then
JMail.AddRecipient rs(0)
end if
rs.movenext
Avatar billede eagleeye Praktikant
08. september 2004 - 22:13 #2
men skal modtagerne ikke kunne se hinanden skal bruger, AddRecipientBCC i stedet for.
Avatar billede milvos Nybegynder
08. september 2004 - 22:17 #3
Hej eagleeye

Hvad mener du med dit sidste indlæg
Avatar billede -thomas- Nybegynder
08. september 2004 - 22:21 #4
Han mener at du istedet kan skrive

if emailfield(rs(0))<>0 then
JMail.AddRecipientBCC rs(0)
end if
rs.movenext

så ryger modtagerne på som BCC. Ulempen er at mailen nemt kan blive afvist som spam. Alternativet er at skrive:

if emailfield(rs(0))<>0 then
JMail.AddRecipient rs(0)
JMail.clearrecipients
end if
rs.movenext
Avatar billede eagleeye Praktikant
08. september 2004 - 22:22 #5
.AddRecipient  kommer ind i TO listen og hvis du sendeer til 5 brugere vil de kunne se hinandens email adresse i TO feltet sådan her:
b1@mail.dk;b2@mail.dk;b3@mail.dk;b4@mail.dk;b5@mail.dk

hvorimod hvis du bruger  AddRecipientBCC kan modtageren ikke se de andre mail adresser men det ser ud som om mailen kun er sendt til en person.

Det man typisk gøre er at lave mailen X antal gange:


do while not rs.EOF
  set Jmail = Server.CreateOBject("JMail.Message")

  ..koden

  Set Jmail = nothing
rs.movenext
loop
Avatar billede eagleeye Praktikant
08. september 2004 - 22:24 #6
do while not rs.EOF
  set Jmail = Server.CreateOBject("JMail.Message")
  Jmail.From = "test@mydomain.com"
  Jmail.FromName = "Min navn"


  Jmail.Subject = "En title"
  Jmail.Body = "Body teksten her"
  Jmail.AddRecipient rs(0)
 
  Jmail.Send ("mail.domæne.dk")
  Set Jmail = nothing
rs.movenext
loop
Avatar billede -thomas- Nybegynder
08. september 2004 - 22:35 #7
Du kan også køre dine modtagere igennem uden at oprette objektet hver gang - det er lidt mere performancevenligt:

set Jmail = Server.CreateOBject("JMail.Message")
  Jmail.From = "test@mydomain.com"
  Jmail.FromName = "Min navn"
  Jmail.Subject = "En title"
  Jmail.Body = "Body teksten her"

  do while not rs.EOF
    Jmail.AddRecipient rs(0)   
    Jmail.Send ("mail.domæne.dk")
    Jmail.Clearrecipients
  rs.movenext
  loop

Set Jmail = nothing
Avatar billede eagleeye Praktikant
08. september 2004 - 22:38 #8
Ja Jmail har mange muligheder en anden stærk mulighed er mailmerge som kan tage et recordset og sende til alle i det og man kan angive variable som den indsætter i mailen :)
http://www.dimac.net/Products/w3JMail/Version43/Examples/MailmergeWithResultset.htm
Avatar billede milvos Nybegynder
08. september 2004 - 22:40 #9
Nu gik der helt kage i det.



Jeg sender lige hele mailscriptet, det består af 2 filer :

Første : inc_forum_subscription_email.asp

<%
CAT_ID = request.form("CAT_ID")
FORUM_ID = request.form("FORUM_ID")
FORUM_TITLE = request.form("Forum_Title")
PostedByName = request.form("UserName")
subject = Request.Form("Subject")
Set rs = my_Conn.Execute("SELECT TOPIC_ID FROM " & strTablePrefix & "TOPICS WHERE T_SUBJECT = '" & subject & "' AND FORUM_ID="& FORUM_ID & " AND CAT_ID=" & CAT_ID & " ORDER BY T_DATE DESC")
TopicNum = rs(0)
rs.close
set rs = Nothing
if lcase(strEmail) = "1" and strForumSubscription = "1" then
    strSubject = FORUM_TITLE & " - Nyt indlæg"
    strMessage = "Hej! " & vbCrLf & vbCrLf
    strMessage = strMessage & PostedByName & " har indsat et nyt indlæg i forummet " & FORUM_TITLE & " (som du har bedt om at få en orientering om). " & vbCrLf & vbCrLf
    strMessage = strMessage & "Vedrørende emnet - " & Request.Form("Subject") & "." & vbCrLf & vbCrLf
    strMessage = strMessage & "Du kan se indlægget på " & strForumURL & "link.asp?TOPIC_ID=" & TopicNum & vbCrLf
    'get subscribed members
    strRecipients = ""
    sql = "select M_EMAIL from forums_subscriptions, " & strMemberTablePrefix & "members where f_id="& forum_id & " and c_id=" & cat_id &" and m_id=member_id and m_id<>" & getMemberId(strDBNTUserName)
    set rs = my_Conn.execute(sql)
    do while not rs.eof
        'concatenate all the emails with a ";" probably works only with CDONTS
        if emailfield(rs(0))<>0 then
            strRecipients = strRecipients & rs(0) & "; "
        end if   
        rs.movenext
    loop
    if strRecipients<>"" then
        SubscriptionsForumsMod = "1"
        %>
        <!--#include file="inc_mail.asp"-->
        <%
        SubscriptionsForumsMod = "0"
    end if   
   
end if
%>

Den må så lave et kald til denne fil, der sender mailene afsted :

inc_mail.asp

select case lcase(strMailMode)
    case "aspmail"
        Set objNewMail = Server.CreateObject("SMTPsvg.Mailer")
        objNewMail.FromName = strFromName
        objNewMail.FromAddress = strSender
        'objNewMail.AddReplyTo = strSender
        objNewMail.RemoteHost = strMailServer
        objNewMail.AddRecipient strRecipientsName, strRecipients
        objNewMail.Subject = strSubject
        objNewMail.BodyText = strMessage
        on error resume next '## Ignore Errors
        SendOk = objNewMail.SendMail
        If not(SendOk) <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & objNewMail.Response & "</li>"
        End if
    case "aspemail"
        Set objNewMail = Server.CreateObject("Persits.MailSender")
        objNewMail.FromName = strFromName
        objNewMail.From = strSender
        objNewMail.AddReplyTo strSender
        objNewMail.Host = strMailServer
        objNewMail.AddAddress strRecipients, strRecipientsName
        objNewMail.Subject = strSubject
        objNewMail.Body = strMessage
        on error resume next '## Ignore Errors
        objNewMail.Send
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
    case "aspqmail"
        Set objNewMail = Server.CreateObject("SMTPsvg.Mailer")
        objNewMail.QMessage = 1
        objNewMail.FromName = strFromName
        objNewMail.FromAddress = strSender
        objNewMail.RemoteHost = strMailServer
        objNewMail.AddRecipient strRecipientsName, strRecipients
        objNewMail.Subject = strSubject
        objNewMail.BodyText = strMessage
        on error resume next '## Ignore Errors
        objNewMail.SendMail
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
    case "cdonts"
        Set objNewMail = Server.CreateObject ("CDONTS.NewMail")
        objNewMail.BodyFormat = 1
        objNewMail.MailFormat = 0
        on error resume next '## Ignore Errors
        objNewMail.Send strSender, strRecipients, strSubject, strMessage
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
        on error resume next '## Ignore Errors
    case "chilicdonts"
        Set objNewMail = Server.CreateObject ("CDONTS.NewMail")
        on error resume next '## Ignore Errors
        objNewMail.Send strSender, strRecipients, strSubject, strMessage
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl:: " & Err.Description & "</li>"
        End if
        on error resume next '## Ignore Errors
    case "dkqmail"
        Set objNewMail = Server.CreateObject("dkQmail.Qmail")
        objNewMail.FromEmail = strSender
        objNewMail.ToEmail = strRecipients
        objNewMail.Subject = strSubject
        objNewMail.Body = strMessage
        objNewMail.CC = ""
        objNewMail.MessageType = "TEXT"
        on error resume next '## Ignore Errors
        objNewMail.SendMail()
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl:: " & Err.Description & "</li>"
        End if
    case "geocel"
        set objNewMail = Server.CreateObject("Geocel.Mailer")
        objNewMail.AddServer strMailServer, 25
        objNewMail.AddRecipient strRecipients, strRecipientsName
        objNewMail.FromName = strFromName
        objNewMail.FromAddress = strFrom
        objNewMail.Subject = strSubject
        objNewMail.Body = strMessage
        on error resume next '##  Ignore Errors
        objNewMail.Send()
        if Err <> 0 then
            Response.Write "Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description
        else
            Response.Write "Din e-mail er blevet sendt..."
        end if
    case "iismail"
        Set objNewMail = Server.CreateObject("iismail.iismail.1")
        MailServer = strMailServer
        objNewMail.Server = strMailServer
        objNewMail.addRecipient(strRecipients)
        objNewMail.From = strSender
        objNewMail.Subject = strSubject
        objNewMail.body = strMessage
        on error resume next '## Ignore Errors
        objNewMail.Send
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
    case "jmail"
        Set objNewMail = Server.CreateObject("Jmail.smtpmail")
        objNewMail.ServerAddress = strMailServer
        objNewMail.AddRecipient strRecipients
        objNewMail.Sender = strSender
        objNewMail.Subject = strSubject
        objNewMail.body = strMessage
        objNewMail.priority = 3
        on error resume next '## Ignore Errors
        objNewMail.execute
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
    case "smtp"
        Set objNewMail = Server.CreateObject("SmtpMail.SmtpMail.1")
        objNewMail.MailServer = strMailServer
        objNewMail.Recipients = strRecipients
        objNewMail.Sender = strSender
        objNewMail.Subject = strSubject
        objNewMail.Message = strMessage
        on error resume next '## Ignore Errors
        objNewMail.SendMail2
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
end select

Set objNewMail = Nothing
%>

Her er lidt forklaring på hvad det skal gøre :

Det kan være jeg ikke fik mig udtrykt rigtigt.

Selve udsending af mail fra sitet generelt virker fint med JMAIL.

MEN

Det mod (script) jeg har sendt går ud på :

Brugerne kan tilmelde sig et forum, de får så en mail sendt, når der er nye indlæg i forummet. Når der er svar på egne indlæg virker det fint, men da bruges dette script heller ikke til udsending af mail.
Avatar billede eagleeye Praktikant
08. september 2004 - 22:48 #10
i først fil hvor kommer strEmail og strForumSubscription fra?

if lcase(strEmail) = "1" and strForumSubscription = "1" then
Avatar billede eagleeye Praktikant
08. september 2004 - 22:55 #11
Ved du om den ikke henter brugerne ud fra DB'en eller den slet ikke kommer ind i koden som sender mailen, altså stopper i den før viste if sætning ?
Avatar billede milvos Nybegynder
08. september 2004 - 23:07 #12
Det er når brugere tilmelder sig, får de et " 1 " i de to tabeller i databasen. (Tror jeg)

Men forståligheden skyld vil jeg gerne sende dig hele scriptet.

Scriptet bruges på Http://www.Gisforum.dk , men efter at min host har deaktiveret CDONTS virker dette subscription script ikke mere, da det nok er skrevet til CDONTS.
Avatar billede eagleeye Praktikant
08. september 2004 - 23:11 #13
Hvis det har virket med CDONTS så det vil bare koden som skal tilpasses :)

Prøv at rette:

    case "jmail"
        Set objNewMail = Server.CreateObject("Jmail.smtpmail")
        objNewMail.ServerAddress = strMailServer
        objNewMail.AddRecipient strRecipients
        objNewMail.Sender = strSender
        objNewMail.Subject = strSubject
        objNewMail.body = strMessage
        objNewMail.priority = 3
        on error resume next '## Ignore Errors
        objNewMail.execute
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
    case "smtp"


Til dette:

    case "jmail"
      emailArr = Split(strRecipients,";")
      for i = 0 to ubound(emailArr)
        Set objNewMail = Server.CreateObject("Jmail.smtpmail")
        objNewMail.ServerAddress = strMailServer
        objNewMail.AddRecipient emailArr(i)
        objNewMail.Sender = strSender
        objNewMail.Subject = strSubject
        objNewMail.body = strMessage
        objNewMail.priority = 3
        on error resume next '## Ignore Errors
        objNewMail.execute
        If Err <> 0 Then
            Err_Msg = Err_Msg & "<li>Din mail er ikke sendt pågrund af følgende fejl: " & Err.Description & "</li>"
        End if
      Next
    case "smtp"
Avatar billede milvos Nybegynder
08. september 2004 - 23:12 #14
Jeg er vist lidt bagefter med svar.

Såfremt jeg kun tilmelder 'en bruger til et forum, spledes at der kun skal udsendes 'en mail, så virker det fint. Men tilmelder jeg bruger nr. 2 så kommer der slet ikke noget ud. Så selve JMAIL udsendingen fra hosten virker fint også i andre sammenhæng på sitet. Der ER når dette script skal behandle flere brugere det går galt. Det har virker perfekt i 2 mdr. men med CDONTS komponenten.
Avatar billede milvos Nybegynder
08. september 2004 - 23:18 #15
Jeg tester lige
Avatar billede milvos Nybegynder
08. september 2004 - 23:28 #16
Tusind tak Eagleeye

Nu virker det perfekt, tak for hjælpen

Du får alle points
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