Как вставить значение базы данных или строку в тело письма

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

message.Body = "The Employee id is 5  "+reader[1].ToString();

Полный код:

MailMessage message = new MailMessage();
message.Subject = "Employee Access ";

message.From = new MailAddress("[email protected]");
var fromAddress = "[email protected]";
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,status from tableemail";
    using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = xe;
    Password=654321;User ID = xpress; unicode=true"))
    {
        OleDbCommand command = new OleDbCommand(queryString, connection);
        connection.Open();
        cmd = new OleDbCommand(queryString);
        cmd.Connection = connection;
        OleDbDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            MailAddress to = new MailAddress(reader[1].ToString());
            message.To.Add(to);   
        }

        message.Body = "The Employee id is 5  "+reader[1].ToString();
        smtp.Send(message);
        reader.Close();
    }
}

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

если производительность не является проблемой, а объем данных невелик. вы можете использовать datatable, а затем вы можете легко перебирать его и отправлять почту

Ameya Deshpande 29.10.2018 08:26

не могли бы вы привести мне пример использования таблицы данных ??

moonir01 29.10.2018 08:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
811
2

Ответы 2

Я не уверен, как именно вашему коду понадобилась эта функция, но, насколько я понимаю, вы можете сделать это примерно так. с использованием DataTable

    DataTable dataTable = new DataTable();
    MailMessage message = new MailMessage();
    message.Subject = "Employee Access ";

    message.From = new MailAddress("[email protected]");
    var fromAddress = "[email protected]";
    const string fromPassword = "password";


    OleDbCommand cmd = null;

    string queryString = "select id,email,status from tableemail";
    using (OleDbConnection connection = new OleDbConnection("Provider = OraOLEDB.Oracle.1; Data Source = xe; Password = 654321; User ID = xpress; 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)
    {
        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;

            MailAddress to = new MailAddress(dataRow[1].ToString());

            if (!message.To.Contains(to))
            {
                    message.To.Add(to);
            }

            message.Body = "The Employee id is 5  " + dataRow[0].ToString();
            smtp.Send(message);
        }
    }

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

moonir01 29.10.2018 08:56

@ moonir01 вы хотите отправлять почту на один почтовый идентификатор с разным содержанием?

Ameya Deshpande 29.10.2018 08:57

да, я хочу отправлять почту на один почтовый идентификатор с разным содержанием.

moonir01 29.10.2018 09:00

@ moonir01, можешь показать мне фиктивные данные? что вы получаете из базы данных и что хотите отправить

Ameya Deshpande 29.10.2018 09:02

ID EMAIL ---------- -------------------------------------- ------------ 1 [email protected] 2 [email protected] 3 [email protected]

moonir01 29.10.2018 09:08

@ moonir01 перефразируйте свой вопрос.

Ameya Deshpande 29.10.2018 09:09

Может ли таблица электронной почты содержать 2 поля, одно - это идентификатор, а другое электронное письмо, которое я хочу отправить, вставьте ее идентификатор в тело

moonir01 29.10.2018 09:11

количество идентификаторов последней строки с использованием кода, требуется тот же идентификатор строки,

moonir01 29.10.2018 10:40

Я думаю, проблема в том, что вы вызываете DataReader после того, как он прочитал последнюю запись. Reader.Read () вернул false, что означает, что reader[1] должен выдать ошибку, поскольку читать нечего.

Я не знаю, нужно ли вам каждое значение в теле письма или только последнее ... при условии, что вам нужно каждое значение, должно сработать что-то вроде этого:

using (OleDbConnection connection = new OleDbConnection(cs))
{
    connection.Open();

    using (OleDbCommand cmd = new OleDbCommand(queryString, connection))
    {
        using (OleDbDataReader reader = cmd.ExecuteReader())
        {
            StringBuilder body = new StringBuilder();

            while (reader.Read())
            {
                string to = reader.GetString(0);
                message.To.Add(to);
                body.AppendFormat("The Employee id is 5 {0}<br>", to);
            }

            message.Body = body.ToString();
            reader.Close();
        }
    }
}
smtp.Send(message);

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

По не относящемуся к делу вопросу, вы дважды создаете экземпляр объекта OLE Command. Я удалил дубликат в приведенном выше фрагменте кода.

Другие вопросы по теме