09. september 2005 - 09:41Der 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.
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) ?)
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();
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()
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
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); }
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.