一、造一个QQ邮件发送的窗体
二、开始编写关于邮件发送的代码,以及当点发送按钮的时候,给发送按钮单独造了一个新的线程。这样如果发送的附件太多的话,如果不给发送按钮造新的线程,便会卡住,但是如果给发送按钮造了新的线程,就算附件很多,也不会影响到操作别的按钮
namespace QQ邮件发送 { public partial class Form1 : Form { public Thread thread;//定义一个线程 public Form1() { InitializeComponent(); this.im = Image.FromFile("1.jpg"); this.BackgroundImage = im; } string file; //string aa; ArrayList Lujing=new ArrayList(); private void button6_Click(object sender, EventArgs e) //添加附件 { openFileDialog1.Filter = "Word文件.doc|*.doc|表格文件.xls|*.xls|所有文件|*.*"; //筛选文件类型 DialogResult dk = openFileDialog1.ShowDialog(); //创建一个枚举类型的变量dk来接收打开这个对话框 if (dk == DialogResult.OK) //如果点的是确定,才会执行下面的代码 { string[] files = openFileDialog1.FileNames;//将获取到的所有路径都存到一个string类型的数组里面 foreach (string file in files)//遍历所有路径,一条条的加到Lujing这个ArrayList里面去,然后用的时候再从集合里面一条条遍历出来 { Lujing.Add(file); txtfujianname.AppendText(file + " ");//AppendText追加文本 } MessageBox.Show("添加附件成功"); //获取附件的名字添加到文本框当中 } } //下面开始写SendEmail函数 MailMessage msg; public void SendEmail(string Emailshoujian, string Emailbiaoti, string Emailzhengwen, MailAddress EmailFrom) { try { //创建发送邮箱,并获取发件人地址,收件人地址,以及邮件标题与正文 msg = new MailMessage(); //创建一个MailMessage的类,用来发送邮件 msg.To.Add(Emailshoujian); //将收件人的邮箱地址添加进来 msg.Subject = Emailbiaoti; //获取一下发送邮件的标题 msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题改成国际编码方式 msg.From = EmailFrom;//获取一下发件人的邮箱地址 msg.Body = Emailzhengwen;//邮件的正文内容 msg.BodyEncoding = System.Text.Encoding.UTF8; //将邮件的正文内容改一下编码方式 msg.IsBodyHtml = false; //确认正文内容是不是以网页格式发送的 msg.Priority = MailPriority.High;//邮件发送的优先等级为最高 //添加附件 if(txtfujianname.Text!="") { foreach (string path in Lujing) //路径都存到Lujing里面去了,全部遍历出来 { Attachment data = new Attachment(path); //Attachment:附件 msg.Attachments.Add(data); } } // //设置用于验证发件人身份的凭据 SmtpClient client = new SmtpClient(); //允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件。 client.Host = "smtp.qq.com"; //设置一下应用程序的服务器名称 client.Credentials = new System.Net.NetworkCredential("527384244@qq.com", "XXXXXX"); //输入发件人邮箱的用户名密码来发送邮件 //注意!!必须在发送的时候将发件人的邮箱账户POP3/IMAP协议开启,然后输入的密码是QQ邮箱独立密码,而不是QQ密码!!!! client.Send(msg);//发送 //mail from address must be same as authorization user 若出现这个错误,证明没有将发件人邮箱的POP3/IMAP协议打开,并且密码是QQ邮箱独立密码,而不是QQ密码 //打开方式在最有一张截图 MessageBox.Show("发送成功"); } catch (Exception ex ) { MessageBox.Show("请正确输入信息"); } } //当点击发送按钮的时候启动新的线程,从而不会因为卡住而影响到别的按钮的功能 private void button1_Click(object sender, EventArgs e) //发送按钮 { thread = new Thread(new ThreadStart(fasong)); //为button1按钮造一个新的线程,这样点button1的话,就会运行新造的这个线程,而不会影响到窗体的主线程,button1执行的发送,点了button1如果卡住,但不会影响到别的按钮的作用 thread.IsBackground = true;//确认新造的线程后台运行 thread.Start(); } public void fasong() { // MailAddress 表示电子邮件发件人或收件人的地址。 MailAddress EmailFrom = new MailAddress("527384244@qq.com"); //发件人邮箱地址 //创建一个MailAddress的类来写发件人的地址 string Emailshoujian = txtshoujian.Text; //收件人邮箱地址 string Emailbiaoti = txtbiaoti.Text; //邮件标题 string Emailzhengwen = textBox1.Text; //邮件内容 SendEmail(Emailshoujian, Emailbiaoti, Emailzhengwen, EmailFrom); //调用发送邮件函数 } private bool isok; private int dianxiaqux; private int dianxiaquy; private int chushix; private int chushiy; private int movex; private int movey; private void Form1_MouseDown(object sender, MouseEventArgs e) { isok = true; dianxiaqux = Cursor.Position.X; dianxiaquy = Cursor.Position.Y; chushix = this.Location.X; chushiy = this.Location.Y; } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (isok) { movex = Cursor.Position.X; movey = Cursor.Position.Y; this.Location = new Point(chushix + movex - dianxiaqux, chushiy + movey - dianxiaquy); } } private void Form1_MouseUp(object sender, MouseEventArgs e) { isok = false; } private void button5_Click(object sender, EventArgs e) { this.Close(); } private void button7_Click(object sender, EventArgs e) { } private void button7_Click_1(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; } Image im; private int i = 1; private void button8_Click(object sender, EventArgs e) { if (i == 0) { this.im = Image.FromFile("5.jpg"); this.BackgroundImage = im; } else if(i == 1) { this.im = Image.FromFile("2.jpg"); this.BackgroundImage = im; } else if(i == 2) { this.im = Image.FromFile("3.jpg"); this.BackgroundImage = im; } else if (i == 3) { this.im = Image.FromFile("4.jpg"); this.BackgroundImage = im; } else if (i == 4) { this.im = Image.FromFile("5.jpg"); this.BackgroundImage = im; } else { this.im = Image.FromFile("1.jpg"); this.BackgroundImage = im; i = 0; } i++; } private void button9_Click(object sender, EventArgs e) { } string pic; private void button9_Click_1(object sender, EventArgs e) { } //这是为了打开添加附件的窗口,从而获得选择的附件的路径 } }
三、实际操作
在这里已经点了发送了,但是因为所添加的附件太多,如果不加线程的话这个窗体便会卡住,什么按钮也不能点,但是给发送按钮加了一个新的线程,这样点击发送就算附件太多也不会卡住,也不会影响到换肤功能的实现。
下面是点击发送后,然后又点击的换肤按钮
下面是发送成功: