Добавленные строки в теле сообщения не отправляются по электронной почте с использованием SMTPClient () и StringBuilder () - PullRequest
0 голосов
/ 08 ноября 2018

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

Я отправляю электронное письмо через SmtpClient() Я пытаюсь построить тело письма, используя строки, которые возвращаются из функций в циклах. Моя проблема в том, что строка для тела строится не так, как я думал.

В настоящее время я создаю новый StringBuilder() с текстом по умолчанию. Затем я запускаю некоторые функции и пытаюсь добавить результаты к объекту StringBuilder() через StringBuilder.AppendLine().

Вот мой код:

// Setup SMTP Client for sending mail updates
//-----------------------------------
String from_addr_text = "<removed>";
String to_addr_text = "<removed>";
String msg_subject = "Updates to USPTO searches";
StringBuilder msg_body = new StringBuilder("The following searches have received updated results:" + Environment.NewLine);
SmtpClient AlertMail = new SmtpClient
{
    Port = 587,
    Host = "<removed>",
    EnableSsl = true,
    Timeout = 10000,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new System.Net.NetworkCredential("<removed>", "<removed>")
};
MailMessage update = new MailMessage(from_addr_text, to_addr_text, msg_subject, msg_body.ToString())
{
    BodyEncoding = UTF8Encoding.UTF8,
    IsBodyHtml = false,
    DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure
};

            ...

// Process data from api for Assignor
//-----------------------------------
bool isUpdated = false;
foreach (String url in searchesByAssignorUSPTO)
{
    try
    {
        String longName = <removed>); 
        String name = <removed>;
        String thisHash = await GetSearchData(url, name, "Assignor");
        if (DoesHashExist(thisHash))
        {
            Debug.WriteLine(thisHash + " already exists. No update to " + name + " search.");
        }
        else
        {
        Debug.WriteLine(thisHash + " does not exist. There is an update to " + name + " search.");
        isUpdated = true;
        msg_body.AppendLine(name + " as " + "Assignor" + Environment.NewLine);
        }
    }
    catch
    {
        Console.WriteLine("something is broken with ASSIGNOR search dummy!");
    }
}
// Process data from api for Assignee
foreach (String url in searchesByAssigneeUSPTO)
{
    try
    {
        String longName = <removed>;
        String name = <removed>;
        String thisHash = await GetSearchData(url, name, "Assignee");
        if (DoesHashExist(thisHash))
        {
            Debug.WriteLine(thisHash + " already exists. No update to " + name + " search.");
        }
        else 
        {
            Debug.WriteLine(thisHash + " does not exist. There is an update to " + name + " search.");
            isUpdated = true;
            msg_body.AppendLine(name + " as " + "Assignee" + Environment.NewLine);
        }
    }
    catch
    {
        Console.WriteLine("something is broken with ASSIGNEE search dummy!");
    }
}
// Send email is search results are updated
if (isUpdated)
{
    AlertMail.Send(update);
    Debug.WriteLine(msg_body.ToString());
}

Когда программа запускается и результаты возвращаются из циклов, msg_body правильно выводится в окно вывода, но, когда электронное письмо получено, тело имеет только: «Следующие поиски получили обновленные результаты:».

Я пытался:

  • изменив значение isBodyHtml на true и использовав <br /> вместо Environment.NewLine.
  • добавление \n в конец строки и удаление Environment.NewLine.
  • изменение msg_body на тип String и объединение результатов с msg_body с использованием =+.
  • с использованием метода Append() вместо AppendLine().

Вот фрагмент окна вывода: Output window showing strings appended to SB

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Обязательно следите за назначением переменных в вашем коде. Когда вы присваиваете msg_body объекту update MailMessage, он вводит только одну упомянутую строку, которая возвращается в электронном письме, и не включает информацию, сгенерированную API.

Попробуйте переместить инициализацию ваших SmtpClient и MailMessage переменных прямо перед блоком if (isUpdated), и вам будет хорошо идти.

0 голосов
/ 08 ноября 2018

per @ tym32167, мне нужно было переместить создание MailMessage(), чтобы ПОСЛЕ того, как мои циклы и функции были завершены. Я создавал объект до того, как были вызваны методы AppendLines(), и поэтому они не были включены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...