Member 11403304 Ответов: 1

Как изменить кнопку отправить электронную почту, чтобы разрешить отправку выбранных писем из списка?


В настоящее время наше приложение отправляет электронную почту человеку(запрашивающему), выбранному из выпадающего списка. Таким образом, он отправляет только одно электронное письмо одному человеку.

У нас есть новое бизнес-требование, чтобы приложение также отправляло электронную почту более чем одному человеку, когда это необходимо. Владелец проекта не хочет заменять текущий combobox на listbox.

Поэтому меня попросили добавить список в пользовательский интерфейс. Если пользователь хочет отправить электронную почту более чем одному человеку, он выберет человека из выпадающего списка, а также выберет дополнительных людей для отправки электронной почты из списка, нажав кнопку электронная почта.

Кнопка код для электронной почты также должна проверить, выбран ли выбранный человек в списке также выбран в выпадающем списке. Если человек, выбранный в списке, также выбран в выпадающем списке, будет отправлено только одно электронное письмо. Мы не хотим отправлять два письма одному и тому же человеку.

Мне нужна помощь, чтобы изменить код кнопки электронной почты так, чтобы она также отправляла электронную почту или электронные письма человеку или людям, выбранным из списка, если и когда есть выбор.

Как мне это сделать?

Список в основном заполняется той же информацией, что и combobox.

Что я уже пробовал:

Код для списка
public async void PopulateAdditionalStaffEmailListBox()
{
    List<GetRequestorInfoModel> requestors = new List<GetRequestorInfoModel>();
    
    try
    {
        requestors = await FTACaseReset.Controllers.RequestorInfoController.GetAllRequestorInfoes();
        requestors = requestors.OrderBy(x => x.DisplayName).ToList(); //Has 15 items

        //Populate AdditionalStaffEmailListBox
        for (int i = 0; i < requestors.Count; i++)
        {
            ListBoxItem requestor = new ListBoxItem();
            requestor.Text = requestors[i].DisplayName;
            requestor.Value = requestors[i].RequestorInfoID;
            //AdditionalStaffEmailListBox.Items.Add(i);
            AdditionalStaffEmailListBox.Items.Add(requestor.Text).ToString();
        }
    }
    catch (Exception ex)
    {
        string errorMsg = string.Format("An error has occured in {0}. \nException:\n{1}", "AdditionalStaffEmailListBox()", ex.Message);
        MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}


Код для кнопки электронной почты

private async void SendEmail(int selectedBatch)
{
    #region initialize progress bar
    EmailProgressBar.Visible = true;
    EmailProgressBar.Minimum = 0;
    EmailProgressBar.Maximum = 14;
    EmailProgressBar.Value = 1;
    EmailProgressBar.Step = 1;
    EmailButton.Visible = false;
    #endregion
    string message = "The following records have been prepped for processing.  Valid cases will be processed.{0}{1}{2}";
    string requestorName = string.Empty;
    string requestorEmail = string.Empty;
    //AdditionalStaffEmailListBox
    string AdditionalStaffRequestorEmail = string.Empty;
    string AdditionalStaffRequestorName = string.Empty;

    EmailProgressBar.PerformStep();
    List<GetCandidateCaseModel> masterCandidateCasesListToDisplay = new List<GetCandidateCaseModel>();
    EmailProgressBar.PerformStep();

    try
    {
        masterCandidateCasesListToDisplay = await Controllers.CandidateCaseController.GetAllCandidates();
        masterCandidateCasesListToDisplay = masterCandidateCasesListToDisplay.Where(x => x.BatchNumber == selectedBatch && x.RejectionReason != null).ToList();
        EmailProgressBar.PerformStep();

        if (masterCandidateCasesListToDisplay.Count > 0)
        {
            //code for AdditionalStaffEmailListBox
            AdditionalStaffRequestorName = masterCandidateCasesListToDisplay[0].RequestorInfo.DisplayName;
            AdditionalStaffRequestorEmail = masterCandidateCasesListToDisplay[0].RequestorInfo.Email;
            EmailProgressBar.PerformStep();

            requestorName = masterCandidateCasesListToDisplay[0].RequestorInfo.DisplayName;
            requestorEmail = masterCandidateCasesListToDisplay[0].RequestorInfo.Email;
            EmailProgressBar.PerformStep();

            string validCaseNumbers = "<hr /><br /><h3>VALID:</h3><table>";
            List<GetCandidateCaseModel> validCandidateCasesListToDisplay = await Controllers.CandidateCaseController.GetAllCandidates();
            validCandidateCasesListToDisplay = masterCandidateCasesListToDisplay.Where(x =>
                x.RejectionReason.RejectionReasonDescription != Enumerations.Rejections.Discarded.ToString()
                && x.RejectionReason.RejectionReasonDescription != Enumerations.Rejections.No_Records_To_Reset.ToString().Replace("_", " ")
                && x.RejectionReason.RejectionReasonDescription != Enumerations.Rejections.Invalid_Case_Number.ToString().Replace("_", " ")
                ).ToList();
            EmailProgressBar.PerformStep();
            foreach (GetCandidateCaseModel validCandidateCaseListToDisplay in validCandidateCasesListToDisplay)
            {
                //Both penalties
                if ((validCandidateCaseListToDisplay.FirstPenalty.Value) && (validCandidateCaseListToDisplay.SecondPenalty.Value))
                    validCaseNumbers += "<tr><td>" + validCandidateCaseListToDisplay.CaseNbr.ToString() + "</td><td>      </td><td>" + "Both Penalties" + "</td></tr>";


                //If FirstPenalty = true display 1st Penalty
                else if (validCandidateCaseListToDisplay.FirstPenalty.Value)
                    validCaseNumbers += "<tr><td>" + validCandidateCaseListToDisplay.CaseNbr.ToString() + "</td><td>      </td><td>" + "1st Penalty" + "</td></tr>";

                //2nd Penalty
                else if (validCandidateCaseListToDisplay.SecondPenalty.Value)
                    validCaseNumbers += "<tr><td>" + validCandidateCaseListToDisplay.CaseNbr.ToString() + "</td><td>      </td><td>" + "2nd Penalty" + "</td></tr>";

            }
            validCaseNumbers += "</table>";
            EmailProgressBar.PerformStep();


            string invalidCaseNumbers = "<hr /><br /><h3>INVALID:</h3><table>";
            List<GetCandidateCaseModel> invalidCandidateCasesListToDisplay = await Controllers.CandidateCaseController.GetAllCandidates();
            invalidCandidateCasesListToDisplay = masterCandidateCasesListToDisplay.Where(x =>
                x.RejectionReason.RejectionReasonDescription != Enumerations.Rejections.Discarded.ToString()
                && x.RejectionReason.RejectionReasonDescription != Enumerations.Rejections.Duplicate_Case_Number.ToString().Replace("_", " ")
                && x.RejectionReason.RejectionReasonDescription != Enumerations.Rejections.Valid.ToString().Replace("_", " ")
                ).ToList();
            EmailProgressBar.PerformStep();

            foreach (GetCandidateCaseModel invalidCandidateCaseListToDisplay in invalidCandidateCasesListToDisplay)
            {
                invalidCaseNumbers += "<tr><td>" + invalidCandidateCaseListToDisplay.CaseNbr.ToString() + "</td><td>      </td><td>" + invalidCandidateCaseListToDisplay.RejectionReason.RejectionReasonDescription + "</td></tr>";
            }
            invalidCaseNumbers += "</table>";
            EmailProgressBar.PerformStep();

            string discardedCaseNumbers = string.Empty;
            List<GetCandidateCaseModel> discardedCandidateCasesListToDisplay = await Controllers.CandidateCaseController.GetAllCandidates();
            discardedCandidateCasesListToDisplay = masterCandidateCasesListToDisplay.Where(x => x.RejectionReason.RejectionReasonDescription == Enumerations.Rejections.Discarded.ToString()).ToList();
            EmailProgressBar.PerformStep();
            if (discardedCandidateCasesListToDisplay.Count > 0)
                discardedCaseNumbers = "<hr /><br /><h3>DISCARDED:</h3>" + string.Join("<br />", discardedCandidateCasesListToDisplay.Select(p => p.CaseNbr.ToString()));

            message = string.Format(message, validCaseNumbers, invalidCaseNumbers, discardedCaseNumbers);
            EmailProgressBar.PerformStep();

            using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress("NoReply_FTA@courts.state.wt.us");
                MailAddress to = new MailAddress(requestorEmail);
                mailMessage.To.Add(to);

                string ccEmailAddress = Authentication.GetADEmail();
                if (ccEmailAddress.Length > 0)
                {
                    MailAddress ccto = new MailAddress(ccEmailAddress);
                    mailMessage.CC.Add(ccto);
                }
                EmailProgressBar.PerformStep();

                mailMessage.Subject = "FTA Case Reset Notice";
                mailMessage.Body = message;
                mailMessage.IsBodyHtml = true;
                EmailProgressBar.PerformStep();

                SmtpClient smtpClient = new SmtpClient();
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.PickupDirectoryLocation = @"c:\smtp";
                smtpClient.EnableSsl = false;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Timeout = 60000;
                EmailProgressBar.PerformStep();

                smtpClient.Send(mailMessage);
                MessageBox.Show("An email has been sent to " + requestorName, "Email", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
        }
        else
            MessageBox.Show("No Requestor was found.  Unable to send an email.", "Email", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        EmailProgressBar.PerformStep();
        EmailProgressBar.Visible = false;
        EmailProgressBar.Value = 0;
        EmailButton.Visible = true;
    }
    catch (Exception ex)
    {
        string errorMsg = string.Format("An error has occured in {0}. \nException:\n{1}", "SubmitButton_Click()", ex.Message);
        MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

1 Ответов

Рейтинг:
1

Gerry Schmitz

Цитата:
Поле со списком на самом деле те же заказчиков (имена, адреса электронной почты) как элемент управления ListBox.

Выбери одно или другое, но не то и другое сразу.

Или речь идет о том, чтобы сбить пользователя с толку?


Member 11403304

Речь идет не о том, чтобы сбить пользователя с толку. Именно так я придумал заполнять список из одной и той же таблицы базы данных. Владелец проекта не хочет добавлять дополнительную работу, удаляя текущий combobox и заменяя его списком. Поэтому решение, которое мне было дано, состоит в том, чтобы создать список и заполнить его теми же именами из базы данных. Этот список предназначен для отправки электронной почты дополнительным людям, которых вы наверняка решите отправить.