一次发送多次电子邮件
sending email more than once at a time
我想给不止一个人发邮件。为什么此代码显示此消息:"the parameter'to' can not be an empty string Parameter name:to" ?
connection.Open();
OleDbCommand command1 = new OleDbCommand();
command1.Connection = connection;
string cq = "Select Email From student where S_ID in(select S_ID FROM studentbook where DateDiff('d',[Issue_Date], NOW())=31) ";
command1.CommandText = cq;
OleDbDataAdapter da1 = new OleDbDataAdapter(command1);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
foreach (DataRow row in dt1.Rows)
{
string email = row["Email"].ToString();
MessageBox.Show("Trying to send email ");
using (MailMessage mm = new MailMessage("cuet.library12@gmail.com", email))
{
mm.Subject = "Attention please,renew your book";
mm.Body = string.Format("1 month over,you should renew or return the book");
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential();
credentials.UserName = "xxxxxxxxxxxxx";
credentials.Password = "xxxxxxxxxx";
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
smtp.Send(mm);
MessageBox.Show("Email sent successfully");
}
}
您必须至少添加一位收件人:
mm.To.Add("email@example.com");
您还可以添加多个收件人。
试试这个:
mm.To.Add(new MailAddress("addres1@emailserver.com"));
mm.To.Add(new MailAddress("addres2@emailserver.com"));
不要忘记添加您发送的地址:
mm.From = new MailAddress("addres3@emailserver.com"));
如果您要在 BCC 中发送电子邮件,您可以使用:
mm.Bcc.Add(new MailAddress("addres1@emailserver.com"));
mm.Bcc.Add(new MailAddress("addres2@emailserver.com"));
从数据表中获取电子邮件地址后,检查电子邮件是否不为空。如果为空,则继续下一行。
string email = row["Email"].ToString();
if(String.IsNullOrEmpty(value) || value.Trim().Length == 0)
{
continue;
}
我猜您从数据表收到的电子邮件可能为空。因此,请确保在继续发送电子邮件之前检查 null/empty 字符串。
if(String.IsNullOrEmpty(value))
continue;
此外,如果您要将同一封电子邮件发送给多个收件人,那么与其在 foreach 循环中执行所有操作,不如在 mm.To.Add("email address to send to");
中添加收件人,然后最后发送电子邮件。
connection.Open();
varcommand1 = new OleDbCommand();
command1.Connection = connection;
varcq = "Select Email From student where S_ID in(select S_ID FROM studentbook where DateDiff('d',[Issue_Date], NOW())=31) ";
command1.CommandText = cq;
varda1 = new OleDbDataAdapter(command1);
vardt1 = new DataTable();
da1.Fill(dt1);
using (var mm = new MailMessage())
{
foreach (DataRow row in dt1.Rows)
{
varemail = row["Email"].ToString();
if(string.IsNullOrWhitespace(email))
continue;
mm.Bcc.Add(email);
}
mm.From.Add("SenderEmailAddress");
mm.Subject = "Attention please,renew your book";
mm.Body = string.Format("1 month over,you should renew or return the book");
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
var credentials = new System.Net.NetworkCredential();
credentials.UserName = "xxxxxxxxxxxxx";
credentials.Password = "xxxxxxxxxx";
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
smtp.Send(mm);
}
我想给不止一个人发邮件。为什么此代码显示此消息:"the parameter'to' can not be an empty string Parameter name:to" ?
connection.Open();
OleDbCommand command1 = new OleDbCommand();
command1.Connection = connection;
string cq = "Select Email From student where S_ID in(select S_ID FROM studentbook where DateDiff('d',[Issue_Date], NOW())=31) ";
command1.CommandText = cq;
OleDbDataAdapter da1 = new OleDbDataAdapter(command1);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
foreach (DataRow row in dt1.Rows)
{
string email = row["Email"].ToString();
MessageBox.Show("Trying to send email ");
using (MailMessage mm = new MailMessage("cuet.library12@gmail.com", email))
{
mm.Subject = "Attention please,renew your book";
mm.Body = string.Format("1 month over,you should renew or return the book");
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential();
credentials.UserName = "xxxxxxxxxxxxx";
credentials.Password = "xxxxxxxxxx";
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
smtp.Send(mm);
MessageBox.Show("Email sent successfully");
}
}
您必须至少添加一位收件人:
mm.To.Add("email@example.com");
您还可以添加多个收件人。
试试这个:
mm.To.Add(new MailAddress("addres1@emailserver.com"));
mm.To.Add(new MailAddress("addres2@emailserver.com"));
不要忘记添加您发送的地址:
mm.From = new MailAddress("addres3@emailserver.com"));
如果您要在 BCC 中发送电子邮件,您可以使用:
mm.Bcc.Add(new MailAddress("addres1@emailserver.com"));
mm.Bcc.Add(new MailAddress("addres2@emailserver.com"));
从数据表中获取电子邮件地址后,检查电子邮件是否不为空。如果为空,则继续下一行。
string email = row["Email"].ToString();
if(String.IsNullOrEmpty(value) || value.Trim().Length == 0)
{
continue;
}
我猜您从数据表收到的电子邮件可能为空。因此,请确保在继续发送电子邮件之前检查 null/empty 字符串。
if(String.IsNullOrEmpty(value))
continue;
此外,如果您要将同一封电子邮件发送给多个收件人,那么与其在 foreach 循环中执行所有操作,不如在 mm.To.Add("email address to send to");
中添加收件人,然后最后发送电子邮件。
connection.Open();
varcommand1 = new OleDbCommand();
command1.Connection = connection;
varcq = "Select Email From student where S_ID in(select S_ID FROM studentbook where DateDiff('d',[Issue_Date], NOW())=31) ";
command1.CommandText = cq;
varda1 = new OleDbDataAdapter(command1);
vardt1 = new DataTable();
da1.Fill(dt1);
using (var mm = new MailMessage())
{
foreach (DataRow row in dt1.Rows)
{
varemail = row["Email"].ToString();
if(string.IsNullOrWhitespace(email))
continue;
mm.Bcc.Add(email);
}
mm.From.Add("SenderEmailAddress");
mm.Subject = "Attention please,renew your book";
mm.Body = string.Format("1 month over,you should renew or return the book");
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
var credentials = new System.Net.NetworkCredential();
credentials.UserName = "xxxxxxxxxxxxx";
credentials.Password = "xxxxxxxxxx";
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
smtp.Send(mm);
}