private void butEmail_Click(object sender,EventArgs e) { if(grid.Rows.Count==0) { MsgBox.Show(this,"There are no Patients in the table. Must have at least one."); return; } if(!EmailAddresses.ExistsValidEmail()) { MsgBox.Show(this,"You need to enter an SMTP server name in e-mail setup before you can send e-mail."); return; } if(PrefC.GetLong(PrefName.ConfirmStatusEmailed)==0) { MsgBox.Show(this,"You need to set a status first for confirmation e-mails in the Recall Setup window."); return; } if(grid.SelectedIndices.Length==0) { ContactMethod cmeth; for(int i=0;i<Table.Rows.Count;i++) { cmeth=(ContactMethod)PIn.Int(Table.Rows[i]["PreferConfirmMethod"].ToString()); if(cmeth!=ContactMethod.Email) { continue; } if(Table.Rows[i]["confirmed"].ToString()==DefC.GetName(DefCat.ApptConfirmed,PrefC.GetLong(PrefName.ConfirmStatusEmailed))) {//Already confirmed by email continue; } if(Table.Rows[i]["email"].ToString()=="") { continue; } grid.SetSelected(i,true); } if(grid.SelectedIndices.Length==0) { MsgBox.Show(this,"Confirmations have been sent to all patients of email type who also have an email address entered."); return; } } else {//deselect the ones that do not have email addresses specified int skipped=0; for(int i=grid.SelectedIndices.Length-1;i>=0;i--) { if(Table.Rows[grid.SelectedIndices[i]]["email"].ToString()=="") { skipped++; grid.SetSelected(grid.SelectedIndices[i],false); } } if(grid.SelectedIndices.Length==0) { MsgBox.Show(this,"None of the selected patients had email addresses entered."); return; } if(skipped>0) { MessageBox.Show(Lan.g(this,"Selected patients skipped due to missing email addresses: ")+skipped.ToString()); } } if(!MsgBox.Show(this,MsgBoxButtons.YesNo,"Send email to all of the selected patients?")) { return; } Cursor=Cursors.WaitCursor; EmailMessage message; string str=""; List<long> patNumsSelected=new List<long>(); List<long> patNumsFailed=new List<long>(); EmailAddress emailAddress; for(int i=0;i<grid.SelectedIndices.Length;i++){ message=new EmailMessage(); message.PatNum=PIn.Long(Table.Rows[grid.SelectedIndices[i]]["PatNum"].ToString()); message.ToAddress=Table.Rows[grid.SelectedIndices[i]]["email"].ToString();//Could be guarantor email. emailAddress=EmailAddresses.GetByClinic(PIn.Long(Table.Rows[grid.SelectedIndices[i]]["ClinicNum"].ToString())); message.FromAddress=emailAddress.SenderAddress; message.Subject=PrefC.GetString(PrefName.ConfirmEmailSubject); patNumsSelected.Add(message.PatNum); str=PrefC.GetString(PrefName.ConfirmEmailMessage); str=str.Replace("[NameF]",Table.Rows[grid.SelectedIndices[i]]["nameF"].ToString()); str=str.Replace("[NameFL]",Table.Rows[grid.SelectedIndices[i]]["nameFL"].ToString()); str=str.Replace("[date]",((DateTime)Table.Rows[grid.SelectedIndices[i]]["AptDateTime"]).ToShortDateString()); str=str.Replace("[time]",((DateTime)Table.Rows[grid.SelectedIndices[i]]["AptDateTime"]).ToShortTimeString()); message.BodyText=str; try { EmailMessages.SendEmailUnsecure(message,emailAddress); } catch { patNumsFailed.Add(message.PatNum); continue; } message.MsgDateTime=DateTime.Now; message.SentOrReceived=EmailSentOrReceived.Sent; EmailMessages.Insert(message); Appointments.SetConfirmed(PIn.Long(Table.Rows[grid.SelectedIndices[i]]["AptNum"].ToString()),PrefC.GetLong(PrefName.ConfirmStatusEmailed)); } Cursor=Cursors.Default; if(patNumsFailed.Count==grid.SelectedIndices.Length){ //all failed //no need to refresh MsgBox.Show(this,"All emails failed. Possibly due to invalid email addresses, a loss of connectivity, or a firewall blocking communication.");//msg: all failed return; } else if(patNumsFailed.Count>0){//if some failed FillMain(); //reselect only the failed ones for(int i=0;i<Table.Rows.Count;i++) { //table.Rows.Count=grid.Rows.Count long patNum=PIn.Long(Table.Rows[i]["PatNum"].ToString()); if(patNumsFailed.Contains(patNum)) { grid.SetSelected(i,true); } } MsgBox.Show(this,"Some emails failed to send."); return; } //none failed FillMain(); //reselect the original list for(int i=0;i<Table.Rows.Count;i++) { long patNum=PIn.Long(Table.Rows[i]["PatNum"].ToString()); if(patNumsSelected.Contains(patNum)) { grid.SetSelected(i,true); } } }