Прежде всего, я очень плохо знаком с 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()
.
Вот фрагмент окна вывода: