一、造一个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 + "\r\n");//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 = ;
private void button8_Click(object sender, EventArgs e)
{
if (i == )
{
this.im = Image.FromFile("5.jpg");
this.BackgroundImage = im;
}
else if(i == )
{
this.im = Image.FromFile("2.jpg");
this.BackgroundImage = im;
}
else if(i == )
{
this.im = Image.FromFile("3.jpg");
this.BackgroundImage = im; }
else if (i == )
{
this.im = Image.FromFile("4.jpg");
this.BackgroundImage = im;
}
else if (i == )
{
this.im = Image.FromFile("5.jpg");
this.BackgroundImage = im;
}
else
{
this.im = Image.FromFile("1.jpg");
this.BackgroundImage = im;
i = ;
} i++;
} private void button9_Click(object sender, EventArgs e)
{ }
string pic;
private void button9_Click_1(object sender, EventArgs e)
{ } //这是为了打开添加附件的窗口,从而获得选择的附件的路径 }
}

三、实际操作

在这里已经点了发送了,但是因为所添加的附件太多,如果不加线程的话这个窗体便会卡住,什么按钮也不能点,但是给发送按钮加了一个新的线程,这样点击发送就算附件太多也不会卡住,也不会影响到换肤功能的实现。

下面是点击发送后,然后又点击的换肤按钮

下面是发送成功:

线程——QQ邮件发送的更多相关文章

  1. Java实现QQ邮件发送客户端

    目录 一.前言:QQ邮件发送程序 二.封装SMTP操作 三.实现多线程接收 四.QQ邮件客户端界面设计 1.连接按钮 2.发送按钮 五.QQ邮件发送效果演示 六.总结 一.前言:QQ邮件发送程序 在上 ...

  2. Java网络编程:QQ邮件发送客户端程序设计

    目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...

  3. python定时利用QQ邮件发送天气预报

    大致介绍 好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下 1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.c ...

  4. Java实现QQ邮件发送

    首先我们需要两个jar包,点击下面即可下载这两个包: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 我们这里采用QQ邮箱发送邮件为例,代码如 ...

  5. SpringBoot实现QQ邮件发送

    建项目 创建一个SpringBoot项目 改pom,导入相关依赖 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE & ...

  6. 基于Vue、Springboot网站实现第三方登录之QQ登录,以及邮件发送

    基于Vue.Springboot实现第三方登录之QQ登录 前言 一.前提(准备) 二.QQ登录实现 1.前端 2.后端 1.application.yml 和工具类QQHttpClient 2.QQL ...

  7. System.Net邮件发送功能踩过的坑

    System.Net邮件发送功能踩过的坑 目录 System.Net邮件发送功能踩过的坑 1.EazyEmail邮件发送类库 2.邮件发送授权码与邮件密码 3.通过邮件密码来发送邮件 4.Wiresh ...

  8. 使用javaMail实现简单邮件发送

    一.首先你要用来发送邮件的qq邮箱需要开通pop3/smtp服务,这个可以百度一下就知道了 二.导入所需要的jar包,我使用的是maven添加依赖 <dependency> <gro ...

  9. spring 5.x 系列第20篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置类为com.heibaiyin ...

随机推荐

  1. Unity3D 将 Unity 嵌入WPF中的一些研究笔记

     一. 在 WPF 中使用 WebBrowser,直接打开 WebPlayer.html 以这种方式有一个问题是. 无法在 WebBrowser 的上面 放置其它的控件, 在运行时,都不会显示 . 以 ...

  2. [初级教程]用SecureCRT+Xming轻松远程实现Linux的X DISPLAY

    [初级教程]用SecureCRT+Xming轻松远程实现Linux的X DISPLAY 发布者:sqqdugdu 时间:10-06 阅读数:2117 测试环境:RHEL 6.1,SecureCRT 5 ...

  3. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?

    [编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于Parse特点,打造一款类似Instagram的应 ...

  4. Java 中最常见的 5 个错误

    在编程时,开发者经常会遭遇各式各样莫名错误.近日,Sushil Das 在 Geek On Java上列举了 Java 开发中常见的 5 个错误,与君共「免」. 原文链接:Top 5 Common M ...

  5. java与.net之间xml传递,xml最前面多了个?

    最近做一个项目,是java提供webservice供.net调用.参数采用xml格式.首先碰到的问题: 1).net这边采用XmlSerializer 方式序列化对象传递给对方.对方在本机调试可以收到 ...

  6. (转)Android学习进阶路线导航线路(Android源码分享)

     转载请注明出处:http://blog.csdn.net/qinjuning 前言:公司最近来了很多应届实习生,看着他们充满信心但略带稚气的脸庞上,想到了去年的自己,那是的我是不是也和 现在的他们一 ...

  7. App接口设计

    关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/

  8. poj 3317 Stake Your Claim 极大极小搜索

    思路:为了方便,当c1>c2时将0变为1,1变为0. 空格最多有10个,每个空格有3个状态,如果不状态压缩,会TLE的.所以最多有3^10种情况 代码如下: #include<iostre ...

  9. (转)两分钟彻底让你明白Android Activity生命周期(图文)!

    转自: http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在 ...

  10. jmeter中线程之间传递参数

    JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法 ...