一次发送多封邮件

本文关键字:一次 | 更新日期: 2023-09-27 18:10:34

我想向不止一个人发送电子邮件。为什么这个代码显示这个消息:"参数'to'不能是一个空字符串参数名称: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");
    }
}

一次发送多封邮件

从数据表中获得电子邮件地址后,检查电子邮件是否为空。如果为空,继续下一行。

string email = row["Email"].ToString();
if(String.IsNullOrEmpty(value) || value.Trim().Length == 0)
{
    continue;
}

您必须至少添加一个收件人:

mm.To.Add("email@example.com");

还可以添加多个收件人。

我猜你从datatable得到的电子邮件可能是空的或空的。因此,在继续发送电子邮件之前,请确保检查null/空字符串。

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);
}

试试这个:

mm.To.Add(new MailAddress("addres1@emailserver.com"));
mm.To.Add(new MailAddress("addres2@emailserver.com"));

别忘了加上你发送邮件的地址:

mm.From = new MailAddress("addres3@emailserver.com"));

如果你想以密件抄送电子邮件,你可以使用:

mm.Bcc.Add(new MailAddress("addres1@emailserver.com"));
mm.Bcc.Add(new MailAddress("addres2@emailserver.com"));

<一口>来源:msdn.microsoft.com