Добавить значение базы данных SQL в тело письма - PullRequest
0 голосов
/ 29 октября 2018

Это моя электронная таблица

>         ID  EMAIL                               CREDIT
>         -----------------------------------  ----------
>          1  emal1@gmail.com                      2500
>          2  email2@gmail.com                     13500
>          3  email3@hotmail.com                   3750
>          4  email4@outlook.com                   11700
>          5  email5@outlook.com                   1200
>          6  email6@yahoo.com                     1997
>          7  email7@yahoo.com                     179
>          8  emal8@gmail.com                      10

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

Email Body:Dear User your credit value: 2500 

когда я выполняю код, указанный ниже, каждый адрес электронной почты получал несколько писем, например, 1-е письмо получало 8 писем и 2-е письмо получало 7 писем 3-е письмо получало 6 писем, как я могу избежать получения нескольких писем или как легко отправлять почту без код ошибки:

 MailMessage message = new MailMessage();
        DataTable dataTable = new DataTable();
        message.Subject = "Employee Access ";
        message.From = new MailAddress("xyz@gmail.com");
        var fromAddress = "zxy@gmail.com";
        const string fromPassword="password";
        var smtp = new System.Net.Mail.SmtpClient();
        {
            smtp.Host = "smtp.gmail.com";
            smtp.EnableSsl = true;
            smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
            smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
            smtp.Timeout = 20000;
        }
        OleDbCommand cmd = null;
        OleDbCommand cmd2 = null;
        string queryString = "select id,email,credit from emailinfo";
        using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = orcl; Password=bdipf;User ID = human; unicode=true"))
        {
            OleDbCommand command = new OleDbCommand(queryString, connection);
            connection.Open();
            cmd = new OleDbCommand(queryString);
            cmd.Connection = connection;
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            adapter.Fill(dataTable);
            adapter.Dispose();
        }
        foreach (DataRow dataRow in dataTable.Rows)
        {
            MailAddress to = new MailAddress(dataRow[2].ToString());
            StringBuilder body = new StringBuilder();
            if (!message.To.Contains(to))
            {
                message.To.Add(to);
              message.Body = "Dear User your credit value: " + dataRow[2].ToString();
                smtp.Send(message);continue
            }
        }

1 Ответ

0 голосов
/ 29 октября 2018

Самое простое решение - вы можете создать объект MailMessage в цикле foreach, как показано ниже: код

DataTable dataTable = new DataTable();

var smtp = new System.Net.Mail.SmtpClient();
       {
           smtp.Host = "smtp.gmail.com";
           smtp.EnableSsl = true;
           smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
           smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
           smtp.Timeout = 20000;
       }

       OleDbCommand cmd = null;
       OleDbCommand cmd2 = null;
       string queryString = "select id,email,credit from emailinfo";
       using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = orcl; Password=bdipf;User ID = human; unicode=true"))
       {
           OleDbCommand command = new OleDbCommand(queryString, connection);
           connection.Open();
           cmd = new OleDbCommand(queryString);
           cmd.Connection = connection;
           OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
           adapter.Fill(dataTable);
           adapter.Dispose();
       }
       foreach (DataRow dataRow in dataTable.Rows)
       {

MailMessage message = new MailMessage();
       message.Subject = "Employee Access ";
       message.From = new MailAddress("xyz@gmail.com");
       var fromAddress = "zxy@gmail.com";
       const string fromPassword="password";
               message.To.Add(new MailAddress(dataRow[1].ToString()););
             message.Body = "Dear User your credit value: " + dataRow[2].ToString();
               smtp.Send(message);continue
           }
       }

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

    foreach (DataRow dataRow in dataTable.Rows) {
 MailAddress to = new MailAddress(dataRow[1].ToString());
message.To.clear();
message.To.Add(to);
 message.Body = "Dear User your credit value: " + dataRow[2].ToString();
smtp.Send(message);
continue;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...