Azure WebJob для: создания CSV-файла из SQL и отправки в виде вложения по электронной почте - PullRequest
0 голосов
/ 23 ноября 2018

Пока что удалось :

  1. Создать проект C # Azure WebJob через Visual Studio и опубликовать его в веб-приложении, которое:
  2. Подключаетсяв базу данных SQL Azure и выполняет SQL-запрос (через SqlDataReader)
  3. Добавляет результаты SqlDataReader в тело письма
  4. Отправляет электронное письмо

В дополнение к вышеупомянутому, где-томежду пунктами 3 и 4 выше, мне нужно :

Создание файла .CSV Заполнение файла .CSV из SqlDataReader Отправка файла .CSV по электронной почте в виде вложения

Набор результатов из SqlDataReaderдля заполнения CSV выглядит следующим образом:

asdasd@gmail.com, 11/11 / 2018
asdasdasd@gmail.com, 11/19/2018
asdasdasasdas@live.co.uk, 11 /19/2018
asdasddsa@hotmail.com, 11/19/2018
asdasd@hotmail.com, 11/19/2018
asdasddsa@hotmail.com, 11/19/2018
asdasasd @gmail.com, 11/18/2018

Ниже приводится то, что я имею до сих пор:

    public static void Main(string[] args)
    {
        SmtpClient smtp = new SmtpClient();
        int SMTP_PORT = 587; 
        Int32.TryParse(ConfigurationManager.AppSettings["SMTP_PORT"], out SMTP_PORT);
        smtp.Port = SMTP_PORT;
        smtp.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["SMTP_USERNAME"], ConfigurationManager.AppSettings["SMTP_PASSWORD"]);
        smtp.Host = ConfigurationManager.AppSettings["SMTP_HOST"];
        string mailFrom = ConfigurationManager.AppSettings["SMTP_MAIL_FROM"];
        string mailSubject = ConfigurationManager.AppSettings["SMTP_MAIL_SUBJECT"];  

        using (SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["AzureDBConnString"]))
        {
            connection.Open();

            var queryString = @"SELECT * FROM MyTable WHERE Status = 1";

            using (SqlCommand command = new SqlCommand(queryString, connection))
            {
                command.CommandTimeout = 120;
                SqlDataReader reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read()) // loop each user and send email
                    {
                        bool emailSentSuccess = true;
                        using (MailMessage mail = new MailMessage())
                        {
                            try
                            {
                                mail.From = new MailAddress(mailFrom);
                                mail.To.Add(new MailAddress(reader["EmailAddress"].ToString()));
                                mail.IsBodyHtml = true;
                                mail.Subject = mailSubject;
                                mail.Body = reader["EmailBody"].ToString();
                                smtp.Send(mail);
                            }
                            catch (Exception ex)
                            {
                                emailSentSuccess = false;
                            }
                        }
                    }
                }
            }
        }
    }

Вопрос : Как я могу набрать очки 5, 6, 7

1 Ответ

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

Вы можете обратиться к следующему коду в вашем SqlCommand.

using (SqlCommand command = new SqlCommand(queryString, connection))
{
    command.CommandTimeout = 120;
    SqlDataReader reader = command.ExecuteReader();
    if (reader.HasRows)
    {
        StringBuilder sb = new StringBuilder();
        List<string> columnNames = new List<string>();
        List<string> rows = new List<string>();
        for (int i = 0; i < reader.FieldCount; i++)
        {
            string tmpColumnName = reader.GetName(i);
            columnNames.Add(tmpColumnName);
        } 
        sb.Append(string.Join(",", columnNames.ToArray())).Append("\r\n");
        List<string> currentRow = new List<string>();
        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                object item = reader[i];
                sb.Append(item.ToString().Replace(",", ";") + ',');
            }
            sb.Append("\r\n");
        }
        bool emailSentSuccess = true;
        using (MailMessage mail = new MailMessage())
        {
            try
            {
                using (MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(sb.ToString())))
                {
                    Attachment attachment = new Attachment(stream, new ContentType("text/csv"));
                    attachment.Name = "hello.csv";
                    mail.Attachments.Add(attachment);
                    mail.From = new MailAddress(mailFrom);
                    mail.To.Add(new MailAddress(reader["EmailAddress"].ToString()));
                    mail.IsBodyHtml = true;
                    mail.Subject = mailSubject;
                    mail.Body = reader["EmailBody"].ToString();
                    smtp.Send(mail);
                }
            }
            catch (Exception ex)
            {
                emailSentSuccess = false;
            }
        }
    }
}

Тест, который я проверяю, выглядит следующим образом:

enter image description here

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