使用C#,轻松发邮件

很早的时候,大概是刚学习C#那会儿,就很想使用C#来发送自己的邮件,可是一直在网上都没有找到合适的代码,前阵子有几个哥们儿在做Socket编程,一个局域网办公管理软件,我就跟着看了看,主要实现了局域网聊天、文件传输、视频和音频聊天等功能,这个时侯我忽然又很想写一个发送邮件的软件了。没办法,只能再次一点一点的学习,在查了几次MSDN之后,居然让我给实现了,并且感觉还是蛮好用的,所以就拿出来给园友分享一下,写的不够清楚的地方,您就多多包含了,如果对你还有点帮助,那就麻烦顶一下了。。。闲话就到这里,马上开始!



 

      先做一个Windows应用程序,把界面设计成这个样子:

 

图1、程序设计界面

     下面来一一介绍界面的控件:

     1、在发件人信息的groupbox中,先是一个下拉列表,用来选择SMTP服务器,SMTP服务器是为你提供发送邮件的服务器,如果你使用的是163邮箱,那么SMTP服务器就是smtp.163.com;如果是Gmail,那么SMTP服务器就是smpt.gmail.com。用户名是你在登陆该邮箱的名称,比如我有一个gmail账号youring2@gmail.com,那么这里就应该填写youring2。要显示的姓名是邮件接收方能够看到的姓名,你可以随便填写,比如我想让收件人知道这封邮件来自齐飞,那么我这里就填写齐飞,这是一个非必选项,可以不填写。邮箱密码就是你的邮箱密码,是123就填写123,是456就填写456,我这里就不公开我的邮箱密码了。

     2、在收件人信息的groupbox中,收件人姓名为要收到这封邮件人的姓名,可以填写,也可以不填。例如我这封信是写给youring2的,我就可以在这里填写youring2。Email是收件人的地址,如果我要发给youring2的163邮箱,我就可以填写youring2@163.com。这个是一定要写的,原因我就不说了。。。

     3、邮件信息里面首先是主题,然后是附件,再然后是内容,这里不再多说。点击添加按钮来添加附件,点击删除按钮删除选中的附件,点击发送将邮件发送出去。

如果你的界面设计水平已经很厉害了,那么就自己设计一个界面,直接到下面的代码设计!



 

      你需要添加命名空间: using System.Net.Mail;
                                   using System.Net.Mime;
                                   using System.Net;
                                   using System.IO;      

      第一步,添加一个Form Load事件。在这个事件的代码里,主要实现窗体初始化的工作。这些代码同样可以放在Form的构造函数中完成。

        private void Form1_Load(object sender, EventArgs e)
        {
            //添加俩个smpt服务器的名称
            cmbBoxSMTP.Items.Add("smtp.163.com");
            cmbBoxSMTP.Items.Add("smtp.gmail.com");
            //设置为下拉列表
            cmbBoxSMTP.DropDownStyle = ComboBoxStyle.DropDownList;
            //默认选中第一个选项
            cmbBoxSMTP.SelectedIndex = 0;
            //在下面添加你想要初始化的内容,比如显示姓名、用户名等

        }

     第二步,添加一个"添加"按钮的单击事件。用来实现选择文件,并把文件添加到TreeView中。

        //添加按钮的单击事件
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //定义并初始化一个OpenFileDialog类的对象
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.InitialDirectory = Application.StartupPath;
            openFile.FileName = "";
            openFile.RestoreDirectory = true;
            openFile.Multiselect = false;

            //显示打开文件对话框,并判断是否单击了确定按钮
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                //得到选择的文件名
                string fileName = openFile.FileName;
                //将文件名添加到TreeView中
                treeViewFileList.Nodes.Add(fileName);
            }
        }

     第三步,添加一个"删除"按钮的单击事件,用来实现选中一个TreeView项后,把该选项删除掉。

        //删除按钮的单击事件
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //判断是否选中了节点
            if (treeViewFileList.SelectedNode != null)
            {
                //得到选择的节点
                TreeNode tempNode = treeViewFileList.SelectedNode;
                //删除选中的节点
                treeViewFileList.Nodes.Remove(tempNode);
            }
            else
            {
                MessageBox.Show("请选择要删除的附件。");
            }
        }

     第四步,也是最关键的一步,"发送"按钮的单击事件,用来实现发送邮件功能。

        //发送按钮的单击事件
        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                //确定smtp服务器地址。实例化一个Smtp客户端
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(cmbBoxSMTP.Text);
                //生成一个发送地址
                string strFrom = string.Empty;
                if (cmbBoxSMTP.SelectedText == "smtp.163.com")
                    strFrom = txtUserName.Text + "@163.com";
                else
                    strFrom = txtUserName.Text + "@gmail.com";

                //构造一个发件人地址对象
                MailAddress from = new MailAddress(strFrom, txtDisplayName.Text, Encoding.UTF8);
                //构造一个收件人地址对象
                MailAddress to = new MailAddress(txtEmail.Text, txtToName.Text, Encoding.UTF8);

                //构造一个Email的Message对象
                MailMessage message = new MailMessage(from, to);

                //为 message 添加附件
                foreach (TreeNode treeNode in treeViewFileList.Nodes)
                {
                    //得到文件名
                    string fileName = treeNode.Text;
                    //判断文件是否存在
                    if (File.Exists(fileName))
                    {
                        //构造一个附件对象
                        Attachment attach = new Attachment(fileName);
                        //得到文件的信息
                        ContentDisposition disposition = attach.ContentDisposition;
                        disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                        disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                        disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                        //向邮件添加附件
                        message.Attachments.Add(attach);
                    }
                    else
                    {
                        MessageBox.Show("文件" + fileName + "未找到!");
                    }
                }

                //添加邮件主题和内容
                message.Subject = txtSubject.Text;
                message.SubjectEncoding = Encoding.UTF8;
                message.Body = rtxtBody.Text;
                message.BodyEncoding = Encoding.UTF8;

                //设置邮件的信息
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.IsBodyHtml = false;

                //如果服务器支持安全连接,则将安全连接设为true。
                //gmail支持,163不支持,如果是gmail则一定要将其设为true
                if (cmbBoxSMTP.SelectedText == "smpt.163.com")
                    client.EnableSsl = false;
                else
                    client.EnableSsl = true;

                //设置用户名和密码。
                //string userState = message.Subject;
                client.UseDefaultCredentials = false;
                string username = txtUserName.Text;
                string passwd = txtPassword.Text;
                //用户登陆信息
                NetworkCredential myCredentials = new NetworkCredential(username, passwd);
                client.Credentials = myCredentials;
                //发送邮件
                client.Send(message);
                //提示发送成功
                MessageBox.Show("发送成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }



 

下面是我的运行结果:

图2、发送Email

现在打开我的Gmail邮箱,看看是不是已经收到的邮件,我果然收到了,不信你看:

图3、收件箱查看邮件



 

     看到了吧,就是这么简单,赶紧动手自己做一个!最后需要说明一点,这里用的是Send方法进行发送的,你也可以使用SendAsync方法来发送邮件,如果采用了异步,你就需要设置一个回调函数来处理发送完成以后的工作,我这里偷懒了啊!我现在有两个示例,一个是同步的,就是上面说的这个,还有一个是采用异步的方式发送的,如果你需要源代码,点击这里下载:SendEmail.rar。 感谢你能够看到最后,谢谢!

如果认为此文对您有帮助,别忘了支持一下哦!

作者:齐飞

来源:http://youring2.cnblogs.com/

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/archive/2008/11/29/1343911.html 

时间: 2024-10-28 04:31:26

使用C#,轻松发邮件的相关文章

发邮件、带附件。利用属性升级变量轻松使用Session

session|变量|发邮件 后台代码: //------------------------------------------------------------------------------------------------------- using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;u

简单快捷实现ASP在线发邮件功能

发邮件|在线 简单快捷实现ASP在线发邮件功能 -------------------------------------------------------------------------------- 在编写网上应用程序时,经常碰到需要在线发送邮件的问题,邮件内容是由程序动态决定的,如果你采用的是ASP方式来编写网上应用程序,如何简单.快捷地实现这一功能呢? 笔者在实践中利用ASP的com组件功能,在vb中实现了一个发邮件的小组件,在ASP中只通过轻松调用,就可以实现该功能.所有邮件处理

实现ASP文件在线发邮件

笔者在实践中利用ASP的COM组件功能,在VB中实现了一个发邮件的小组件,在ASP中只通过轻松调用,就可以实现该功能.所有邮件处理机制都被封装在这个组件中,使用起来极为方便.下面将详细介绍该组件的基本开发原理以及在ASP中的应用. 1. 利用Winsock控件与发送邮件的SMTP联系 和SMTP的联系包括握手.发送数据以及关闭等全过程,主要程序如下: 建立一个frmsendmail 的窗体,其中包含一个Winsock控件,有以下几个公共变量: Public mSTMP As String //发

法国新规定:非工作时段不能给员工发邮件

法国新规定:非工作时段不能给员工发邮件4月11日消息,法国企业和工会日前签署了一项新协议--非正常工作时间,公司将不被允许向员工发送邮件--因为此举有可能对员工在工作以外的生活造成压力.当然,公司的管理人员则例外.法国是全球工作环境最为轻松的国家之一,每周法定工作时间仅为35个小时,此外员工每年还必须配有至少5个星期的带薪假期.但随着科技的进步,越来越多的工作任务开始进入人们非工作时段的生活.此项新协议便是对" 数字时代"新工作方式的一种约束.

java利用QQ邮件服务器发邮件的代码 谁有 各位大神谢谢了

问题描述 java利用QQ邮件服务器发邮件的代码 谁有 各位大神谢谢了 ...................................................................... 解决方案 //发送邮件 try { Properties prop = new Properties(); //设置服务器地址 prop.put("mail.smtp.host", "smtp.qq.com"); //设置需要身份验证 prop.put(&

extension-关于android里面发邮件的问题,下面是我运行时候的log,请各位帮我看一下。

问题描述 关于android里面发邮件的问题,下面是我运行时候的log,请各位帮我看一下. 04-07 14:06:05.294: I/System.out(2970): DEBUG: JavaMail version 1.4.104-07 14:06:05.294: I/System.out(2970): DEBUG: not loading file: /system/lib/javamail.providers04-07 14:06:05.298: I/System.out(2970):

在win2003上用cdo代替CDONTS发邮件

发邮件|发邮件 Introduction CDONTS was actually replaced by CDO already in Windows 2000 and Windows XP. But these Operating Systems supported CDONTS, and you could use CDONTS. Windows Server 2003 does not support CDONTS, and we are forced to use CDO. This t

五招轻松应对邮件服务器攻击

对邮件服务器的攻击形式多种多样:有利用缓冲区溢出漏洞进行的攻击,还有拒绝服务攻击和目录收集攻击等等.加固邮件服务器.使用邮件过滤工具.采用被管理的服务.安装集成软件等措施都可以从不同的侧面终止邮件服务器所受到的攻击.本文对上述这些措施都有具体描述. 加固邮件服务器,首先在它前面安装邮件过滤网络工具,或者使用被管理的邮件过滤服务将有助于减轻来自垃圾邮件发送者和其它途径的攻击. 随着针对最终用户和他们的桌面系统的攻击日渐增多,直接攻击邮件服务器的情况有所减少(虽然这种减少是相对的).但是,服务器仍然

ASP实现在提交表单到数据库的同时发邮件通知

发邮件|数据|数据库|提交表单 <%  dim  objCDOMail  Set  objCDOMail  =  Server.CreateObject("CDONTS.NewMail")  objCDOMail.From  ="xxx@hotmail.com"          objCDOMail.To  =xxx@hotmail.com  '接收人的邮箱(将表单内容发邮件到一固定地址)      objCDOMail.Subject  ="邮件