热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#实现发送邮件——核心部分代码

在KS系统中有个发送邮件的功能需要做上网查阅资料以后,通过自己的部分修改实现了发送邮件的功能话不多说先来个界面:邮件发送分一下步骤:1.s

       在KS系统中有个发送邮件的功能需要做上网查阅资料以后,通过自己的部分修改实现了发送邮件的功能话不多说先来个界面:

 

邮件发送分一下步骤:

1.smtp服务信息设置

2.验证发件人信息

3.添加附件

4.正式发送邮件

5.发送邮件后处理

 

1.smtp服务信息设置

#region 设置Smtp服务器信息///

/// 设置Smtp服务器信息/// /// SMTP服务名/// 端口号private void setSmtpClient(string ServerHost, int Port){SmtpClient = new SmtpClient();SmtpClient.Host = ServerHost;//指定SMTP服务名 例如QQ邮箱为 smtp.qq.com 新浪cn邮箱为 smtp.sina.cn等SmtpClient.Port = Port; //指定端口号SmtpClient.Timeout = 0; //超时时间}#endregion


 

2.验证发件人信息

#region 验证发件人信息///

/// 验证发件人信息/// /// 发件邮箱地址/// 邮箱密码private void setAddressform(string MailAddress, string MailPwd){//创建服务器认证NetworkCredential NetworkCredential_my = new NetworkCredential(MailAddress, MailPwd);//实例化发件人地址MailAddress_from = new System.Net.Mail.MailAddress(MailAddress, textBoxX4.Text);//指定发件人信息 包括邮箱地址和邮箱密码SmtpClient.Credentials = new System.Net.NetworkCredential(MailAddress_from.Address, MailPwd);;}#endregion


 

3.添加附件

#region 检测附件大小private bool Attachment_MaiInit(string path){try{FileStream_my = new FileStream(path, FileMode.Open);string name = FileStream_my.Name;int size = (int)(FileStream_my.Length / 1024 / 1024);FileStream_my.Close();//控制文件大小不大于10Mif (size > 10){MessageBox.Show("文件长度不能大于10M!你选择的文件大小为" + size.ToString() + "M", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);return false;}return true;}catch (IOException E){MessageBox.Show(E.Message);return false;}}#endregion


 

4.正式发送邮件

private void btnSend_Click_1(object sender, EventArgs e){if (txt_SmtpServer.Text == ""){MessageBox.Show("请输入SMTP服务器名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}if (textBoxX2.Text == ""){MessageBox.Show("请输入发件人邮箱地址!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}if (txtformPwd.Text == ""){MessageBox.Show("请输入发件人邮箱密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}if (MessageBox.Show("您确定要发送当前邮件吗?", "询问", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){try{//初始化Smtp服务器信息setSmtpClient("smtp." + txt_SmtpServer.Text.Trim() + comboBoxEx3.Text, Convert.ToInt32(numericUpDown1.Text));}catch (Exception Ex){MessageBox.Show("邮件发送失败,请确定SMTP服务名是否正确!" + "\n" + "技术信息:\n" + Ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}try{//验证发件邮箱地址和密码setAddressform(textBoxX2.Text.Trim() + comboBoxEx2.Text, txtformPwd.Text.Trim());}catch (Exception Ex){MessageBox.Show("邮件发送失败,请确定发件邮箱地址和密码的正确性!" + "\n" + "技术信息:\n" + Ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}//清空历史发送信息 以防发送时收件人收到的错误信息(收件人列表会不断重复)MailMessage_Mai = new MailMessage(); MailMessage_Mai.To.Clear();//添加收件人邮箱地址MailAddress_to = new MailAddress(textBox4.Text.Trim() + comboBox4.Text.Trim());MailMessage_Mai.To.Add(MailAddress_to);//发件人邮箱MailMessage_Mai.From = MailAddress_from;//邮件主题MailMessage_Mai.Subject = txttitle.Text;MailMessage_Mai.SubjectEncoding = System.Text.Encoding.UTF8;//邮件正文MailMessage_Mai.Body = Rtb_Message.Text;MailMessage_Mai.BodyEncoding = System.Text.Encoding.UTF8;//清空历史附件 以防附件重复发送MailMessage_Mai.Attachments.Clear();//注册邮件发送完毕后的处理事件SmtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);//开始发送邮件SmtpClient.SendAsync(MailMessage_Mai, "000000000");}}


 

5.发送邮件后处理

#region 发送邮件后所处理的函数private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e){try{if (e.Cancelled){MessageBox.Show("发送已取消!");}if (e.Error != null){MessageBox.Show("邮件发送失败!" + "\n" + "技术信息:\n" + e.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}else{MessageBox.Show("邮件成功发出!", "恭喜!", MessageBoxButtons.OK, MessageBoxIcon.Information);}}catch (Exception Ex){MessageBox.Show("邮件发送失败!" + "\n" + "技术信息:\n" + Ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}#endregion


 

参考资料连接:http://www.cnblogs.com/maiweibiao/articles/1837821.html

 代码:http://download.csdn.net/detail/gwblue/6353807

转:https://www.cnblogs.com/iplus/p/4490417.html



推荐阅读
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
author-avatar
a105451223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有