Я хочу вставить содержимое базы данных в тело электронной почты, индекс 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
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 вы хотите отправлять почту на один почтовый идентификатор с разным содержанием?
да, я хочу отправлять почту на один почтовый идентификатор с разным содержанием.
@ moonir01, можешь показать мне фиктивные данные? что вы получаете из базы данных и что хотите отправить
ID EMAIL ---------- -------------------------------------- ------------ 1 [email protected] 2 [email protected] 3 [email protected]
@ moonir01 перефразируйте свой вопрос.
Может ли таблица электронной почты содержать 2 поля, одно - это идентификатор, а другое электронное письмо, которое я хочу отправить, вставьте ее идентификатор в тело
количество идентификаторов последней строки с использованием кода, требуется тот же идентификатор строки,
Я думаю, проблема в том, что вы вызываете 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. Я удалил дубликат в приведенном выше фрагменте кода.
если производительность не является проблемой, а объем данных невелик. вы можете использовать datatable, а затем вы можете легко перебирать его и отправлять почту