i making bulk mail sender take mail addresses db. okay, test mails sending success message showing after mails sent. want message box or progress box count mails passing. me add message pomp count mails have been sending. here code using sending mails, please write me code message box show count -
private void btnsendemail_click(object sender, eventargs e){ string subject = txtsubject.text; string message = txtmessage.text; if (!txtfile.text.equals(string.empty)) { if (system.io.directory.getfiles(txtfile.text).length > 0) { foreach (string file in system.io.directory.getfiles(txtfile.text)) { } } else { } } var con = "data source=ashiq-pc;initial catalog=offermails;integrated security=true;multipleactiveresultsets=true"; list<emailmodel> emaillist = new list<emailmodel>(); using (sqlconnection myconnection = new sqlconnection(con)) { string ostring = "select * tbl_mailadd flag=@flag"; sqlcommand ocmd = new sqlcommand(ostring, myconnection); ocmd.parameters.addwithvalue("@flag", true); myconnection.open(); using (sqldatareader oreader = ocmd.executereader()) { while (oreader.read()) { emailmodel emailmodel = new emailmodel(); emailmodel.id = convert.toint16(oreader["id"]); emailmodel.emailadd = oreader["emailadd"].tostring(); emailmodel.flag = convert.toboolean(oreader["flag"]); emaillist.add(emailmodel); } myconnection.close(); } } //return matchingperson; foreach (emailmodel email in emaillist) { try { smtpclient client = new smtpclient("smtp.gmail.com"); client.port = 587; client.enablessl = true; client.timeout = 100000; client.deliverymethod = smtpdeliverymethod.network; client.usedefaultcredentials = false; client.credentials = new networkcredential("my mail", "my pass"); mailmessage msg = new mailmessage(); msg.to.add(email.emailadd); msg.from = new mailaddress("my name"); msg.subject = subject; msg.body = message; if (!txtfile.text.equals(string.empty)) { if (system.io.directory.getfiles(txtfile.text).length > 0) { foreach (string file in system.io.directory.getfiles(txtfile.text)) { //add file in listbox. listattch.items.add(file); //system.windows.forms.messagebox.show("files found: " + file, "message"); attachment data = new attachment(file); msg.attachments.add(data); } } else { //listbox1.items.add(string.format(“no files found @ location : {0}”, textbox1.text)); } } //attachment data = new attachment(textbox_attachment.text); //msg.attachments.add(data); client.send(msg); } catch (exception ex) { messagebox.show(ex.message); } } //for (int = 0; < emaillist.count; i++) //{ // messagebox.show("i++"); //} messagebox.show("successfully sent message.");
}
first, let me asking write code bit frowned upon here. know you're asking i'm willing out bit.
firstly, message box isn't going work this, because message box ends stopping thread until dialogresult
event handled. so, being said, want build form (i assuming you're doing windows forms here.) progress you. if want counter, using label changing text each mail sent.
so, being said, however, if you're doing windows form, issue run form never update until after foreach
loop finishes. because of way c# handles thread usage.
for want accomplish, you'll need utilize backgroundworker.
allows run cumbersome operations asynchronously.
here example use system working:
//used counter progress int i_counter = 0; //create background worker instance public backgroundworker bg_worker = new backgroundworker(); public form1() { initializecomponent(); //set true if want have event can cancel background task bg_worker.workersupportscancellation = true; //this needed show progress, allows background worker report working bg_worker.workerreportsprogress = true; //assigns "dowork" , "progresschanged" handlers background worker. bg_worker.dowork += new doworkeventhandler(bg_worker_dowork); bg_worker.progresschanged += new progresschangedeventhandler(bg_worker_progresschanged); } //mail method public void mailermethod() { //all of things want happen mailing methods foreach(//your loop stuff in here) { //this needs happen cause counter update bg_worker.reportprogress(i_counter); } } //the stuff want done in background //fires when "runasync" called backgroundworker object. private void bg_worker_dowork(object sender, doworkeventargs e) { //in here want email stuff happen bg_worker = sender backgroundworker; mailermethod();//or of mailing code, looks nicer though } //fires when worker reports progress has changed //caused "reportprogress" method private void bg_worker_progresschanged(object sender, progresschangedeventargs e) { lb_counter.text = convert.tostring(i_counter); } //this happen when worker done. //you can have alot of things, such write report, show window, etc. private void bg_worker_runworkcomplete(object sender, runworkercompletedeventargs e) { messagebox.show("done!", "ding ding!"); application.exit(); } //button click event start shindig private void bt_start_click(object sender, eventargs e) { //makes sure background worker isn't trying run if (!bg_worker.isbusy) { //calls dowork event bg_worker.runworkerasync(); bt_start.visible = false; } }
may direct here official mdsn documentation. , here basic tutorial on how set backgroundworker
.
hope helps, let me know how goes.
Comments
Post a Comment