winform网页抓取邮箱单发群发并有附件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net.Mail;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void send(string sender, string pwd, string receiver, string title, string content)
        {
            SmtpClient client = new SmtpClient();//邮箱传输协议类
            client.Host = "smtp.qq.com";//邮件服务器
            client.Port = 25;//smtp主机上的端口号,默认是25.
            client.DeliveryMethod = SmtpDeliveryMethod.Network;//邮件发送方式:通过网络发送到SMTP服务器
            client.Credentials = new NetworkCredential(sender, pwd); //凭证,发件人登录邮箱的用户名和密码

            MailAddress Sender = new MailAddress(sender); //发件人Email,在邮箱是显示
            MailAddress Receiver = new MailAddress(receiver); //收件人Email,在邮箱是显示
            MailMessage mailMessage = new MailMessage(sender, receiver); //创建一个电子邮件类
            mailMessage.Subject =txttitle.Text;//标题
            mailMessage.Body = txtcontent.Text;//内容可为html格式文本
            mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//邮件主题编码
            mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//邮件内容编码
            mailMessage.IsBodyHtml = true;//邮件内容是否为html格式
            mailMessage.Priority = MailPriority.High;//邮件的优先级,有三个值:高(在邮件主题前有一个红色感叹号,表示紧急),低(在邮件主题前有一个蓝色向下箭头,表示缓慢),正常(无显示).
            //添加附件
            if (file!=null)
            {
                Attachment ss = new Attachment(file); //file是所选择的文件的路径    Attachment电子邮件的附件
                mailMessage.Attachments.Add(ss);
            }
            //Attachment ss = new Attachment(file); //file是所选择的文件的路径    Attachment电子邮件的附件
            //mailMessage.Attachments.Add(ss);
            try
            {
                client.Send(mailMessage);//发送邮件
                mailMessage.Dispose();//释放资源 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtadd.Text))
            {
                MessageBox.Show("请添加收件人邮箱");
            }
            else
            {
                ListViewItem lt = new ListViewItem();
                lt.Text = txtadd.Text.Trim();
                listView1.Items.Add(lt);
                txtadd.Text = "";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                send(txtsend.Text, txtpwd.Text, listView1.Items[i].Text, txtadd.Text,txtcontent.Text);
                Thread.Sleep(2000);
            }
            MessageBox.Show("发送成功");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            txtsend.Text = "434418081@qq.com";
            txtpwd.UseSystemPasswordChar = true;
             textbiaoti.Text = "http://1111.baidu.com/p/3860763762";
        }
        string file;
        private void button4_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Word文件.doc|*.doc|表格文件.xls|*.xls|所有文件|*.*"; //筛选文件类型
            DialogResult dr = openFileDialog1.ShowDialog();  //创建一个枚举类型的变量dr来接收打开这个对话框
            if (dr == DialogResult.OK) //如果点的是确定,才会执行下面的代码
            {
                file = openFileDialog1.FileName;//定义一个变量来接收路径
                //创建文件流 来将路径转换
                StreamReader path = new StreamReader(file, Encoding.Default); //Encoding.Default 编码方式
                MessageBox.Show("添加附件成功");
                path.Close();//用完流之后必须关闭
            }
        }

        //---------------------------------------------------------------
        public String GetWebContent(String url, Encoding encode)// encode 编码
        {
            url = textbiaoti.Text.Trim(); //需要获取源代码的网页  
            WebRequest request = WebRequest.Create(url); //WebRequest.Create方法,返回WebRequest的子类HttpWebRequest  
            WebResponse response = request.GetResponse(); //WebRequest.GetResponse方法,返回对 Internet 请求的响应  
            Stream resStream = response.GetResponseStream(); //WebResponse.GetResponseStream 方法,从 Internet 资源返回数据流。   
            Encoding enc = Encoding.GetEncoding("utf-8"); // 如果是乱码就改成 utf-8 / GB2312  
            StreamReader sr = new StreamReader(resStream, enc); //命名空间:System.IO。 StreamReader 类实现一个 TextReader (TextReader类,表示可读取连续字符系列的读取器),使其以一种特定的编码从字节流中读取字符。   
            txtshow.Text = sr.ReadToEnd(); //输出(HTML代码),ContentHtml为Multiline模式的TextBox控件  
            return txtshow.Text;
        }
        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                string x = GetWebContent(textbiaoti.Text, Encoding.UTF8);
                txtshow.Text = "";
                Regex r = new Regex(@"([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})");//正则 
                System.Text.RegularExpressions.MatchCollection mc = r.Matches(x);
                for (int i = 0; i < mc.Count; i++)
                {
                    if (mc.Count == 0)
                    {
                        txtshow.Text = "未查询到符合邮箱地址的信息。";
                    }
                    else
                    {
                        txtshow.Text += mc[i].Value + "\r\n";
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("获取网站信息错误:" + ex.Message);
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            ListViewItem lt = new ListViewItem();
            lt.Text = txtshow.SelectedText;
            listView1.Items.Add(lt);
        }
    }
}

1这个小程序目前可以抓取在网页地址栏输入网址并且抓取此网页有的QQ号。

现在来给大家介绍一下它的原理,在网页地址栏输入目标网址,点击抓去邮箱时请求网页源代码并且通过写好的正则表达式遍历符合的邮箱地址并通过For循环写入到下方的TextBox中。

2通过抓取已经把邮箱地址显示在了右边的文本框中,点击鼠标选中要添加的邮箱地址(可以多选),点击添加按钮就通过赋值显示在收件人文本框中(如果单发请选中一个,群发请选中多个)。

点击“添加收件人”按钮时:添加网页抓取出来的邮箱地址;

点击“添加”按钮时:添加 “输入收件人”地址栏中输入的邮箱地址。

3点击“添加附件”按钮将选择的文件当作邮件附件发送。

通过openFileDialog1.Filter筛选出文件类型并打开对话框,定义变量来接收打开的对话框,OK后定义一个变量来接收文件路径,并创建一个流将文件路径转换。

4先输入发件人的邮箱地址及密码(为防止发送的为垃圾邮件,一般用企业邮箱当作发件地址,并在群发时做延时发送的处理)。

点击“发送按钮”将根据收件人地址的个数自动单发或者群发(收件人地址为一个时则单发,为多个时为群发),如果发送成功则提示“发送成功”,否则则提示获取的错误信息。

定义邮箱传输协议类,确定邮箱服务器及服务器smtp的端口号,确定发送方式为网络发送到smtp服务器,建立电子邮件类,确认编码,判断并且发送。

posted @ 2015-07-15 17:59  Yusarin  阅读(567)  评论(0编辑  收藏  举报