Avatar billede websam Nybegynder
09. september 2005 - 09:41 Der er 18 kommentarer og
1 løsning

Mail merge i asp.net

Hejsa,

Som overskriften siger mangler jeg en function til mail merge i asp.net. Er det muligt eller skal jeg have fat i et komponent udefra ?

Jeg er ikke ude efter en do while loop løsning men en løsning der ved klik kan sende f.eks. 10000 emails ud uden jeg skal sidde og vente på at siden loader færdig.

/Websam
Avatar billede snepnet Nybegynder
09. september 2005 - 11:31 #1
du kan bare køre det i en tråd for sig selv - så kan den stå og hygge sig med udsendelse i baggrunden.

et hurtigt eksempel:

// der hvor du vil starte tråden fra
ThreadStart mailer = new ThreadStart(SendMails);
Thread thread = new Thread(mailer);
thread.Start();

// og den metode du ønsker at eksekvere
static void SendMails()
{
    // send emails
}

mvh
Avatar billede websam Nybegynder
09. september 2005 - 11:55 #2
Ok lad os tage den fra starten jeg benytter mig af følgende function til at sende en enkelt mail :

Public Shared Function Sendmail(ByVal strRecipient As String, _
                                ByVal strSender As String, _
                                ByVal strSubject As String, _
                                ByVal strMessage As String, _
                                ByVal strFormat As String)
    '--- Sender en mail udfra de angivede variabler.
    Dim objMail As New MailMessage
    objMail.From = strSender
    objMail.To = strRecipient
    objMail.Subject = strSubject
    objMail.Body = strMessage
    If strFormat = "text" Then
        objMail.BodyFormat = MailFormat.Text
    ElseIf strFormat = "html" Then
        objMail.BodyFormat = MailFormat.Html
    End If
    SmtpMail.SmtpServer = "pasmtp.tele.dk"
    SmtpMail.Send(objMail)
End Function

Hvordan kan jeg få det du skriver med ind i dette (jeg fatter hat af hvd du mener :o) ?)

/Websam
Avatar billede snepnet Nybegynder
09. september 2005 - 12:10 #3
jeg mener ikke så meget andet end at du sørger for, at det med at udsende dine emails sker i en tråd for sig - således at din app ikke står og venter på det.

hvis du har en liste over dem du vil sende mails til - kan du gøre noget i denne stil:

en klasse til at udsende dine mails med:
(for eksempler siger vi bare at du har en arraylist med personer og deres mailoplysninger i...)

public class MailSender
{
  private ArrayList _recipiants;

  public MailSender(ArrayList recipiants)
  {
    _recipiants = recipiants;
  }

  public void SendMails()
  {
    foreach(object o in recipiants)
    {
      if(o is Person)
      {
        // kode til at sende mails alá den du allerede har
      }
    }
  }
}

du kan så eksekvere det sådan her

MailSender mailerObject = new MailSender(someArrayList);
ThreadStart mailer = new ThreadStart(mailerObject.SendMails);
Thread thread = new Thread(mailer);
thread.Start();

mvh
Avatar billede websam Nybegynder
09. september 2005 - 12:29 #4
Skal jeg så forstå det således at i min klasse med diverse functioner laver jeg følgende :

Public Class Util '--- Min klasse med diverse functioner
    Private _recipiants As ArrayList
 
    Public Sub New(recipiants As ArrayList)
        _recipiants = recipiants
    End Sub 'New
 
    Public Sub SendMails()
        Dim o As Object
        For Each o In recipiants
            If TypeOf o Is Person Then
                '--- Sender mail til alle i array
                Dim objMail As New MailMessage
                objMail.From = "min@email.dk"
                objMail.To = o
                objMail.Subject = "Test"
                objMail.Body = "Tester om vi kan sende flere mails ?"
                objMail.BodyFormat = MailFormat.Html
                SmtpMail.SmtpServer = "pasmtp.tele.dk"
                SmtpMail.Send(objMail)
            End If
        Next o
    End Sub
End Class

Jeg er bare lidt i tvivl om det med "o Person" er o = email eller ?

Og hvis jeg fanger den korect skal jeg så benytte dette til at aktivere functionen :

Dim mailerObject As New MailSender(someArrayList)
Dim mailer As New ThreadStart(mailerObject.SendMails)
Dim thread As New Thread(mailer)
thread.Start()

???

/Websam
Avatar billede snepnet Nybegynder
09. september 2005 - 14:59 #5
tag ikke den del af det så tungt - jeg ved jo ikke hvor du får emailadresser mv. fra, men jeg går ud fra at du har dem et sted.
såh... illustrationen er bare, at du for hver af dem du har sender en mail - på samme måde som du har gjort indtil nu... bare i en tråd for sig.
mvh
Avatar billede websam Nybegynder
09. september 2005 - 15:46 #6
Ok jeg prøver mig frem og vender tilbage.

Mail adresserne ligger i et dataset som alle mine andre data og de bliver hevet ud med et dataview.

/Websam
Avatar billede snepnet Nybegynder
09. september 2005 - 16:15 #7
glimrende - så bruger du bare det istedet for en ArrayList :o)
mvh
Avatar billede websam Nybegynder
09. september 2005 - 16:32 #8
Så kunne det vel oxo bare være :

Dim arr As ArrayList
For i = 0 To arr.Length - 1
    '--- Sender mail
Next

eller ???

/Websam
Avatar billede snepnet Nybegynder
09. september 2005 - 16:49 #9
hvis du allerede har dem liggende i en datatable bruger du bare den.
mvh
(og foreach er bare et shortcut - istedet for en tæller)
Avatar billede websam Nybegynder
25. september 2005 - 18:20 #10
Der har været lidt pause i denne tråd, men kunne du ikke lige illustrer hvordan jeg benytter mig af mine mails når de kommer fra et DataView ?

/Websam
Avatar billede snepnet Nybegynder
25. september 2005 - 18:45 #11
f.eks. noget i denne stil:

MailMessage mail = null;
foreach (DataRowView row in new someDataView)
{
  mail = new MailMessage();
  mail.From = row["From"].ToString(); // ved ikke hvad dine kolonner hedder :o)
  .
  .
  .
  SmtpMail.Send(mail);
}

mvh
Avatar billede websam Nybegynder
25. september 2005 - 19:01 #12
Det vil så sige at jeg ikke kan benytte mig af at sende det i en tråd for sig ?

/Websam
Avatar billede snepnet Nybegynder
25. september 2005 - 19:12 #13
Hvis du tager det fra tidligere, og skifter lidt ud:

public class MailSender
{
  private DataView _recipiants;

  public MailSender(DataView recipiants)
  {
    _recipiants = recipiants;
  }

  public void SendMails()
  {
    foreach(DataRowView row in _recipiants)
    {
      // her sender du så din mail
    }
  }
}

du kan så eksekvere det sådan her

MailSender mailerObject = new MailSender(someArrayList);
ThreadStart mailer = new ThreadStart(mailerObject.SendMails);
Thread thread = new Thread(mailer);
thread.Start();

mvh
Avatar billede snepnet Nybegynder
25. september 2005 - 19:13 #14
Der er dog self. diverse forhold omkring multithreading - så det er altid en god idé at læse lidt om det inden man forudsætter for meget.
mvh
Avatar billede snepnet Nybegynder
25. september 2005 - 19:21 #15
Måske denne her er noget for dig:
http://www.yoda.arachsys.com/csharp/threads/
mvh
Avatar billede websam Nybegynder
25. september 2005 - 19:48 #16
ok jeg kigger på det

/Websam
Avatar billede websam Nybegynder
31. oktober 2005 - 20:26 #17
Lukker spørgsmålet så hvis der skal point på disken så skal der svares

/Websam
Avatar billede snepnet Nybegynder
01. november 2005 - 20:58 #18
et svar her hvis du vil af med noget :o)
mvh
Avatar billede websam Nybegynder
01. november 2005 - 21:32 #19
det vil jeg da ;o)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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

IT-JOB

Netcompany A/S

Network Engineer

Styrelsen for Grøn Arealomlægning og Vandmiljø

Teamleder til Application Management

Capgemini Danmark A/S

IGNITE Graduate Program 2026