热门标签 | 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



推荐阅读
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在C语言程序开发中,调试和错误分析是确保代码正确性和效率的关键步骤。本文通过一个简单的递归函数示例,详细介绍了如何编写和调试C语言程序。具体而言,我们将创建一个名为 `factorial.c` 的文件,实现计算阶乘的功能,并通过逐步调试来分析和解决可能出现的错误。此外,文章还探讨了常见的调试工具和技术,如GDB和断点设置,以帮助开发者高效地定位和修复问题。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
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社区 版权所有