如何用asp.net进行邮件群发以及显示每一次的发送状态

Amor7 2015-08-14 11:28:05
我已经完成了对邮件的单个发送,但无法进行群发,.asp.cs文件具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Net;
using System.Data;
using System.Configuration;
using System.Data.Common;
using System.Data.SqlClient;

public partial class Email : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void btn_SendEmail_Click(object sender, EventArgs e)
{
MailMessage mymail = new MailMessage();

mymail.From = new MailAddress("*******@******", "*******");
mymail.To.Add(new MailAddress(tb_Email.Text));

mymail.SubjectEncoding = System.Text.Encoding.UTF8;
mymail.Body = tb_Body.Text;
mymail.BodyEncoding = System.Text.Encoding.UTF8;

mymail.IsBodyHtml = true;
mymail.Priority = MailPriority.High;
SmtpClient myclient = new SmtpClient();
myclient.Host = "smtp.qq.com";
myclient.Port = 587;
myclient.Timeout = 60000;
myclient.EnableSsl = true;

myclient.Credentials = new NetworkCredential("*******", "*******");
myclient.Send(mymail);

}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("About.aspx");
}

protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("data source = (local); initial catalog =******; user id =*****; password = ******");

//读取
String sql = "select 邮箱 from tian where 邮箱 != '' ";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
tb_Email.Text = tb_Email.Text +" "+ dr[0].ToString();
}
conn.Close();
}

}


tb_Email.Text = tb_Email.Text +" "+ dr[0].ToString();我能将数据库中所有的邮箱选中,但是却不能一次发出去。求帮助!
...全文
329 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你都已经循环了,干嘛还要AddRange
Amor7 2015-08-17
  • 打赏
  • 举报
回复
@娃都会打酱油了
  protected void btn_SendEmail_Click(object sender, EventArgs e)
    {
        string mailadds = tb_Email.Text;
        string[] mailadd = mailadds.Split(';');
        MailMessage mymail = new MailMessage();
        for (int i = 0; i <= mailadd.Length; i++)
        {
            mymail.To.addRange(mailadds.Split(';'));
        }
后面再跟邮件的其他东西,是这样么? 可是出现错误说没有定义addRange,我查了网上说是对数组定义 还有如果这样写,那我前面的string[] mailadd = mailadds.Split(';');不是和你写的重复了么
Amor7 2015-08-17
  • 打赏
  • 举报
回复
解决了,谢谢
Amor7 2015-08-17
  • 打赏
  • 举报
回复
@娃都会打酱油了 还是不行,mymail.To.Add(mailadd[i]);这里出现索引超出了数组界限。
  • 打赏
  • 举报
回复
string mailadds = tb_Email.Text;
string[] mailadd = mailadds.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
MailMessage mymail = new MailMessage();
for (int i = 0; i <= mailadd.Length; i++)
{
    mymail.To.Add(mailadd[i]);
}
  • 打赏
  • 举报
回复
string mailadds = tb_Email.Text;
string[] mailadd = mailadds.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
MailMessage mymail = new MailMessage();
for (int i = 0; i <= mailadd.Length; i++)
{
    mymail.To.Add(mailadd[i]);
}
Amor7 2015-08-17
  • 打赏
  • 举报
回复
@娃都会打酱油了
string mailadds = tb_Email.Text;
        string[] mailadd = mailadds.Split(';');

        String[] adds = mailadd.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

        MailMessage mymail = new MailMessage();
        for (int i = 0; i <= adds.Length; i++)
        {
            mymail.To.Add(new MailAddress(adds[i]));
        }
出现的问题是我查了无法解决的 'string[]' does not contain a definition for 'Split' and no extension method 'Split' accepting a first argument of type 'string[]' could be found (are you missing a using directive or an assembly reference?)
  • 打赏
  • 举报
回复
不是针对char,是针对分割后的结果,学会实验,大胆的尝试
Amor7 2015-08-17
  • 打赏
  • 举报
回复
@娃都会打酱油了 是这一句么?StringSplitOptions.RemoveEmptyEntries,可是它是针对char值的。我加不来,能说清楚点么?
  • 打赏
  • 举报
回复
split方法有个枚举参数,是否移除空字符串的
Amor7 2015-08-17
  • 打赏
  • 举报
回复
@娃都会打酱油了 但是我按着我加的循环,只循环一句To的,但还是出现参数”address“不能是空字符串,该怎么办
Amor7 2015-08-14
  • 打赏
  • 举报
回复
还有就是不知道发送出去之后,对方是否接受到,如何在我的页面中显示这种状态?
  • 打赏
  • 举报
回复
mymail.To.AddRange(mailadds.Split(';')) 如果有AddRange方法的话,没的话就是循环To一段就可以,没必要整个方法循环
Amor7 2015-08-14
  • 打赏
  • 举报
回复
@娃都会打酱油了 可是我用;把字符串分割开来了呀,其实应该怎么写?能指导一下么?
  • 打赏
  • 举报
回复
To的是一个集合,所以你要将你要发的人一个个的添加进去,不是将带了逗号的一个字符串添加进去
Amor7 2015-08-14
  • 打赏
  • 举报
回复
我私下加了循环,但是不知道是循环加的地方不对还是怎么,就是出现参数“address”不能是空字符串。代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Net.Mail; using System.Net; using System.Data; using System.Configuration; using System.Data.Common; using System.Data.SqlClient; public partial class Email : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btn_SendEmail_Click(object sender, EventArgs e) { string mailadds = tb_Email.Text; string[] mailadd = mailadds.Split(';'); for (int i = 0; i <= mailadd.Length; i++) { MailMessage mymail = new MailMessage(); mymail.From = new MailAddress("*******@qq.com", "********"); mymail.To.Add(new MailAddress(mailadd[i])); mymail.SubjectEncoding = System.Text.Encoding.UTF8; mymail.Body = tb_Body.Text; mymail.BodyEncoding = System.Text.Encoding.UTF8; mymail.IsBodyHtml = true; mymail.Priority = MailPriority.High; SmtpClient myclient = new SmtpClient(); myclient.Host = "smtp.qq.com"; myclient.Port = 587; myclient.Timeout = 60000; myclient.EnableSsl = true; myclient.Credentials = new NetworkCredential("*************", "************"); myclient.Send(mymail); //Response.Write("<script>alert('发送成功')</script>"); } } protected void Button2_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("data source = (local); initial catalog = ********; user id = *******; password = *******;"); //读取 String sql = "select 邮箱 from tian where 邮箱 != '' "; conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { tb_Email.Text = tb_Email.Text +";"+ dr[0].ToString(); } conn.Close(); } 求大神帮忙!!!!
Amor7 2015-08-14
  • 打赏
  • 举报
回复
@燕儿归 几个邮箱发送,那不管要申请邮箱之外,这样效率很低啊。
燕儿归 2015-08-14
  • 打赏
  • 举报
回复
对邮件的单个发送可以的话,那就用循环吧 模拟群发,几个邮箱循环几次单个发送。。。。
Amor7 2015-08-14
  • 打赏
  • 举报
回复
tb_Email.Text = tb_Email.Text +" "+ dr[0].ToString();我能将数据库中所有的邮箱选中,不仅不能一次发出去,而且只发送最后一个邮箱,剩下其他的邮箱没有反应
Amor7 2015-08-14
  • 打赏
  • 举报
回复
引用 3 楼 findcaiyzh 的回复:
显示状态估计够呛。 邮件地址不是使用空格的,一般使用分号,而且不能用MailAddress的构造函数加入多个地址。 可以使用 类似下面的代码 MailMessage mail = new MailMessage(); mail.To.Add("me@mycompany.com;him@hiscompany.com;her@hercompany.com"); smtp协议是不知道对方是否接受到的。
邮箱地址是不使用空格的,但是我改成你这样就会出现在邮件标头中找到无效的字符:“;”。这样的错误 smtp协议是不知道对方是否接受到的。照你这样说不是完全可能出现丢失邮件的可能?
加载更多回复(2)

62,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧