C# 如何在邮件正文中插入数据库值或字符串
我想在电子邮件正文中插入数据库内容,数据读取器的索引0包含每个电子邮件地址的id号,我想使用在邮件正文中添加id号发送邮件,例如:员工id为5。 我需要在同一行中存在的每个邮件正文上插入每个id。 我用这个代码在身体里插入id,但没用C# 如何在邮件正文中插入数据库值或字符串,c#,sql,sendmail,sqldatareader,C#,Sql,Sendmail,Sqldatareader,我想在电子邮件正文中插入数据库内容,数据读取器的索引0包含每个电子邮件地址的id号,我想使用在邮件正文中添加id号发送邮件,例如:员工id为5。 我需要在同一行中存在的每个邮件正文上插入每个id。 我用这个代码在身体里插入id,但没用 message.Body = "The Employee id is 5 "+reader[1].ToString(); 完整代码为: MailMessage message = new MailMessage(); message.Subject = "Em
message.Body = "The Employee id is 5 "+reader[1].ToString();
完整代码为:
MailMessage message = new MailMessage();
message.Subject = "Employee Access ";
message.From = new MailAddress("avvv@gmail.com");
var fromAddress = "avvv@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,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();
}
}
我可以使用数据读取器在正文中插入多个数据库字段吗?我不确定您的代码究竟是如何需要此功能的,但据我所知,您可以这样做。使用数据表
我认为问题在于,您在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命令对象。我消除了上面代码段中的重复项。如果性能不是问题,数据也不是很大的话。您可以使用datatable,然后您可以轻松地对其进行迭代并发送邮件。请提供使用datatable的示例??多次发送给用户的邮件,我只需要用户一次接收一封邮件execution@moonir01您想将邮件发送到具有不同内容的单个邮件id吗?是的,我想将邮件发送到具有不同内容的单个邮件id。@moonir01您能给我看一些虚拟数据吗。您从数据库中获得的信息以及您想要发送的信息ID电子邮件----------------------1abc1@outlook.com2.abc2@gmail.com3.abc3@yahoo.com
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);