Avatar billede misbruger Nybegynder
23. juni 2004 - 11:28 Der er 21 kommentarer og
1 løsning

Mass mailer

Jeg skal lave en lille app. som kan sende en personlig mail til alle i et kartotek på ca. 50.000 modtagere.

I hver mail (som både kan være text eller html) skal der ligge 2 links, med nogle personlig data i...
1. Ret din profil
2. Slet din profil

Der hvor app. bliver afviklet, er der ikke noget lokal mail server, så der vil derfor blive taget brug af en ekstern udbyders SMTP server.

For at kunne afsende så mange mails, skal man.....???

Hvad er det nu lige løsning er ?

Thx!
Avatar billede arne_v Ekspert
23. juni 2004 - 11:35 #1
Du bruger vel den ganske normale SmtpMail klasse.

Hvis det skal gøres hurtigt skal du nok lave applikationen multithreaded
og bruge f.eks. 10-20 tråde.

[og husk at de 50000 skal have givet tilsagn om at modtage emails !]
Avatar billede misbruger Nybegynder
23. juni 2004 - 11:48 #2
Hej Arne

Alle modtagerne har selv tilmeldt sig kartoteket tak :)

Jo jeg bruger SmtpMail !

Jeg har testet nogle forskellige senarier, men for hver gang for jeg ikke sendt mere end ca. 100 mails afsted.

Mig bekendt kan jeg ikke lave meget mere end 10 tråde til en SMTP server, hvilket jo stadig ikke er tilstrækligt med ovenstående statistik :(
Avatar billede the_party_dog Nybegynder
23. juni 2004 - 12:07 #3
private void MailSender(string Receiver, string Sender, string BodyText)
        {
            SmtpMail.SmtpServer = "SERVERNAVN";
            MailMessage Mail = new MailMessage();
            Mail.BodyFormat = MailFormat.Html;
            Mail.From = "MISBRUGER@MISBRUGER.com";
            Mail.To = Receiver;
            Mail.Subject = "SUBJECT";
            Mail.Body = BodyText;

            SmtpMail.Send(Mail);   

        }

husk "using System.Web.Mail;" i din applikation.
Avatar billede the_party_dog Nybegynder
23. juni 2004 - 12:08 #4
Lav en do-while af en art, som bare løber igennem, og som kalder denne funktion hver gang, og så vil du kunne sende alle dine 50.000 mails. Ved ikke om du har prøvet det samme....
Avatar billede the_party_dog Nybegynder
23. juni 2004 - 12:09 #5
Jeg har selv personligt kunne sende til 200+ engang da jeg testede denne funktion af.. Så jeg ved ikke om det vil virke..
Avatar billede arne_v Ekspert
23. juni 2004 - 12:11 #6
misbruger>

Hvilken fejl får du når dte ikke længere virker ?

Er der lagt nogen filtre ind på den SMTP server du bruger ?
Avatar billede misbruger Nybegynder
23. juni 2004 - 12:17 #7
the_party_dog...
det er nogen lunde det samme jeg prøver, dog har jeg skilt følgende ud af løkken....

MailMessage mailMsg = new MailMessage();
mailMsg.From = "mis@misbruger.com";   
SmtpMail.SmtpServer = "smtp.udbyder.dk";

Arne...
Jeg får ingen direkte fejl, men app. står bare og hænger, og hænger og hænger (Selv når jeg kun prøver at sende til 1000 modtagere), og så har jeg kvalt den efter en ½ time
Avatar billede arne_v Ekspert
23. juni 2004 - 12:20 #8
Prøv med:
  10 tråde som hver sender 50 emails
  hver email har BCC til 100 adresser
Avatar billede misbruger Nybegynder
23. juni 2004 - 12:30 #9
Ok, det hjalp selv. at rette stave fejl... dog !

Dog er jeg stadig i den situation at det tager 68 sek. at sende 174 mails
Det vil sige at det kommer til at tage ca. 5,5 timer at sende 50K mails ud :(
Avatar billede misbruger Nybegynder
23. juni 2004 - 12:31 #10
Arne
Jeg kan ikke sætte modtagere BCC, eftersom at teksten i body'en er personlig rettet til den enkelte modtager.
Avatar billede the_party_dog Nybegynder
23. juni 2004 - 12:33 #11
Du skal regne med at serveren skal håndtere det hele, og hvis de af en eller anden grund har sat spærre på, hvor mange mails der må komme igennem fra en IP i min. så kan du jo ikke gøre noget ved det.
Avatar billede arne_v Ekspert
23. juni 2004 - 12:35 #12
Prøv og se om du kan få 1740 igennem på 68 sekunder med 10 tråde.
Avatar billede misbruger Nybegynder
23. juni 2004 - 12:45 #13
Bliver nød til at løbe nu, da jeg skal til møde.
Vender tilbage om et par timer.
Avatar billede arne_v Ekspert
24. juni 2004 - 20:13 #14
Har du fået prøvet flertrådet ?
Avatar billede christian Nybegynder
04. juli 2004 - 17:25 #15
Det tager altså tid at sende 50K "personlige" mails ud, hvis du kan gøre det på 5 timer skal du være glad (tilfreds).

Jeg plejer at sende 2 mails per sekund, på den måde får smtp, mssql og webserver lidt luft. (sender via en browser)
Avatar billede misbruger Nybegynder
08. juli 2004 - 10:59 #16
Hej Alle

Nu har jeg efterhånden overstået min ferie,og har fuldført applicationen hvor den arbejder i tråde....

...og det var faktisk ikke nogen dårlig ide, jeg har lige afsendt 11 mails på ca. 4 sek. og såfremt det holder er vi nu nede på at kunne sende 40K mails på ca. 4 timer

I skal alle have tak for hjælpen

Arne_V -> Smider du et svar. Tak!

Lidt info til andre interesseret...
Jeg har lavet en custom collection, som indenholder alle mine mails (hvor body'ens indhold er mergede med navn, links etc.)
Denne custom collection bliver brudt op i mindre collections ud fra en variable (batchsize).
For hver batch, starter jeg en ny tråd, som modtager min collection samt en (singleton) delegate.
I den tråd sender jeg så mailsene en efter en, og for hver afsendelse invoker jeg en envent (som indeholder et flag, hvorvidt mailen er sendt eller om den er bad, dermed kan man efterfølgende rense ud i døde mailadresser, samt man kan løbende opdatere en progressbar på gui'en ect.)

Hvis der er nogle der er interesseret i en uddybning, skal i være velkommende til at skrive.
Avatar billede arne_v Ekspert
08. juli 2004 - 11:02 #17
svar
Avatar billede Slettet bruger
22. februar 2006 - 10:57 #18
Kunne faktisk godt bruge lidt inspiration! Sidder selv og "makker" med et nyhedsbrev script! Scriptet virker, men opfylder ikke dette krav at modtageren ikke må se alle adresserne mailsene er sendt til. Såden ser scriptet ud:

void Page_Load(Object Sender, EventArgs E) {

if (!IsPostBack)
{
OleDbConnection OurConnection;
OleDbCommand OurCommand;
OleDbDataReader OurDataReader;       
OurConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../database/ns.mdb")+";");           
OurConnection.Open();
OurCommand = new OleDbCommand("SELECT email FROM nyhedsbrev ORDER BY email", OurConnection);
OurDataReader = OurCommand.ExecuteReader();

while(OurDataReader.Read())
{
    tbEmail.Text += OurDataReader["email"].ToString() + "; ";
}
OurConnection.Close();
OurDataReader.Close();           
    }
}

void SendMail(Object Sender, EventArgs E)
{
string strNyhedsbrev, strEmailTo;
strNyhedsbrev = tbNyhedsbrev.Text;
strEmailTo = tbEmail.Text;

System.Web.Mail.MailMessage mailMessage = new System.Web.Mail.MailMessage();
mailMessage.From = "kundeservice@ultimate-web.dk";
mailMessage.To = strEmailTo;
mailMessage.Bcc = strEmailTo; <--- Her går det galt, den skjuler ikke mailadresserne
mailMessage.Subject = "Nyhedsbrev fra nordjyskesommerhuse";
mailMessage.BodyFormat = System.Web.Mail.MailFormat.Text;
mailMessage.Body = "Du har netop modtaget et af Nordjyske Sommerhuses jævnligt udsendte nyhedsbreve.\n\n " + tbNyhedsbrev.Text + "" ;

System.Web.Mail.SmtpMail.SmtpServer = "mail.tele.dk";

try {
    System.Web.Mail.SmtpMail.Send(mailMessage);
    Besked.InnerHtml = "Nyhedsbrev udsendt til tilmeldte";
    }
    catch (Exception e)
    {
    Besked.InnerHtml = "Error! Plz try again!";
    }
}
void SletAlt(Object Sender, EventArgs E)
{
tbNyhedsbrev.Text = "";
}
</script>
<html>
<head>
<title>admin</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="../stylesheet/style_iframe.css" type="text/css">
</head>
<body>
<h2 id="Besked" runat="server"></h2>
<form runat="server">
<br>Email<br>
<asp:TextBox TextMode="MultiLine" id="tbEmail" Height="100" Width="500" runat="server" /><br>
<br>   
<br>Nyhedsbrev<br>
<asp:TextBox TextMode="MultiLine" id="tbNyhedsbrev" Height="200" Width="500" runat="server" /><br>
<br>
<asp:Button ID="btSend" Text="Send nyhedsbrev" OnClick="SendMail" runat="server"/>
<asp:Button ID="btSlet" Text="Slet alt" OnClick="SletAlt" runat="server" />
<br>
</form>
</body>
</html>
Avatar billede christian Nybegynder
22. februar 2006 - 11:12 #19
Virker dette ikke?
mailMessage.From = "kundeservice@ultimate-web.dk";
mailMessage.To = mailMessage.From;
mailMessage.Bcc = strEmailTo; <--- Her går det galt, den skjuler ikke mailadresserne

En anden ting du skal være opmærksompå er at de fleste/alle SMTP servere altid lægger en begrænsning på maks antal TO, CC og BCC

Det kan svinge fra 50 til 1000... det vil sige du skal sende i klumper, 100 ad gangen måske
Avatar billede Slettet bruger
22. februar 2006 - 11:16 #20
Ok - men foreløbig har jeg kun 2 ;-)
Som den ser ud nu sendes nyhedsbrevet ud til alle mailadresser i tekstfeldtet tbEmail.Text.
Eneste problem er at modtageren kan se alle modtageradresser...
Avatar billede christian Nybegynder
22. februar 2006 - 11:20 #21
har du prøvet at bruge det som jeg skrev?
En modtager kan ikke se BCC, så det burde altså virke med mindre at du bruger TO til dine to modtagere
Avatar billede Slettet bruger
22. marts 2006 - 13:47 #22
Har netop prøvet at udsende til 263 modtagere, hvilket går galt! Hvordan sætter jeg den til at sende til "klumper" af fx 50 - 100 af gangen?
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