Gå til innhold

C#: System.Net.Mail.MailMessage.Send() er treg


Anbefalte innlegg

Hei

 

Jeg driver med et program som skal sende epost for meg, og jeg bruker System.Net.Mail.SmtpClient og MailMessage til å sende én og en mail med personlig navn og innhold.

 

Det fungerer, men det tar fryktelig lang tid.

 

Har du noen tips for å øke hastigheten?

Lenke til kommentar
Videoannonse
Annonse

Jeg har aldri hatt problemer med at dette gå tregt. Det virker mest som om det er smtp-en som svarer tregt.

 

Såklart kommer det an på hvor mange mailer du skal sende, og litt hvordan koden din er da.

 

Men er det et problem at det er kjedelig å sitte og vente på kan du sende det asynkront, som GeirGrusom sier.

 

Men hvordan er koden din for sending da? Det er litt vanskelig for oss å optimaliere en kode vi ikke ser. Vi er fortsatt ikke synske.

Endret av Manfred
Lenke til kommentar
Men er det et problem at det er kjedelig å sitte og vente på kan du sende det asynkront, som GeirGrusom sier.

 

Men hvordan er koden din for sending da? Det er litt vanskelig for oss å optimaliere en kode vi ikke ser. Vi er fortsatt ikke synske.

 

Den går i en backgroundworker-tråd.

Koden:

 

 

private void bw_Arbeider_DoWork(object sender, DoWorkEventArgs e)

{

SmtpClient c = new SmtpClient("epost.XX.no");

c.Credentials = new NetworkCredential("[email protected]", "XXXX");

int teller = 0;

 

 

StreamWriter sW = File.CreateText("K:\\" + DateTime.Now.ToShortDateString() + "-" + DateTime.Now.ToLongTimeString().Replace(':', '\'') + " " + txt_Header.Text + "_logg.txt");

sW.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + " Startet sending.");

foreach(MailMessage m in (ArrayList)e.Argument)

{

try

{

c.Send(m);

teller++;

}

catch (Exception ex)

{

sW.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + " FEIL: " + ex.Message);

sW.WriteLine("\tMail ikke sendt til " + m.To);

}

bw_Arbeider.ReportProgress(teller);

m.Dispose();

}

sW.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + " " + teller + " eposter sendt.");

sW.Close();

}

 

 

 

Lurer på om jeg skal gå for en epost med mange BCC-mottakere i steden.

Lenke til kommentar

Mail-protokollen, som så mange andre (FTP, osv) er en utrolig teit protokoll, og absolutt ikke særlig kjapp.

 

Hvis det er mange mailer du spytter ut en etter en, så vil nok det i seg selv ta lang tid, dessverre. Med mindre du skal revolusjonere hvordan mail sendes :p

 

Jeg sender ut endel mailer selv, og sender til en bunch med BCC-er, for at det ikke skal ta så forferdelig lang tid.

 

Setter du på en StopWatch eller noe, så vil du nok se nedover at det er c.Send(m); som tar tid. Og her er det ikke så mye du kan få gjort.

Lenke til kommentar

Hehe, mail er utrolig gammeldags, og det er ikke blitt gjort noe med. Man kan f.eks. fint sende anonym mail rundt omkring, som fører til betydelig mye mer spam. Det finnes INGEN måte å trace en mail på, så man kan ikke vite om avsenderen er den som den gir seg ut for å være.

Mail har heller ingen som helst sikkerhet forbundet med seg.

 

De fleste internett protokoller er fra 60 og 70 tallet, og lite er blitt gjort med dem.

 

Men nok off-topic :p

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...