C#笔记8——多功能电子邮件发送程序实例

2024-05-31 00:32

本文主要是介绍C#笔记8——多功能电子邮件发送程序实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C#笔记8——多功能电子邮件发送程序实例

        最近需要使用C#发邮件的功能,利用QQ邮件服务器发送邮件,包含发送邮件功能,MD5加密解密功能,自动加载、保存用户信息功能,非常适用于项目中的一些小功能!

        效果图如下:

发送邮件


邮箱接收情况



源代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//for send mail
using System.Net.Mail;
using System.Net;
using System.Threading;
using System.Text.RegularExpressions;
//for RD、WR
using System.IO;
//for Json
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
//for MD5
using System.Security.Cryptography;namespace MyEmail
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void btn_send_Click(object sender, EventArgs e){if (tb_sender_addr.Text == ""){MessageBox.Show("发件人邮箱地址不能为空!\n");return;}else {if (!MatchEmailAddr(tb_sender_addr.Text)){MessageBox.Show("发件人邮箱格式不正确,请重新输入!");tb_sender_addr.Clear();return;}}if (tb_sender_pwd.Text == ""){MessageBox.Show("发件人邮箱密码不能为空!\n");return;}if (tb_receiver_addr.Text == ""){MessageBox.Show("收件人邮箱地址不能为空!\n");return;}else{if (!MatchEmailAddr(tb_receiver_addr.Text)){MessageBox.Show("收件人邮箱格式不正确,请重新输入!");tb_receiver_addr.Clear();return;}}if (tb_theme.Text == ""){MessageBox.Show("邮件主题不能为空!");return;}if (rtb_content.Text == ""){DialogResult dr1 = MessageBox.Show("请选择是否发送!\n", "邮件内容为空!", MessageBoxButtons.YesNo);if (dr1 == DialogResult.Yes){send_email(tb_sender_addr.Text, tb_receiver_addr.Text, tb_sender_pwd.Text, tb_theme.Text, rtb_content.Text);}else if (dr1 == DialogResult.No){lab_log.Text = GetCurrentTime() + "  内容为空,取消发送!";return;}else{return;}}else{send_email(tb_sender_addr.Text, tb_receiver_addr.Text, tb_sender_pwd.Text, tb_theme.Text, rtb_content.Text);}}private void btn_exit_Click(object sender, EventArgs e){SaveUserMessage(tb_sender_addr.Text,tb_receiver_addr.Text,tb_sender_pwd.Text,tb_theme.Text,rtb_content.Text);//关闭与该程序相关所有线程System.Environment.Exit(System.Environment.ExitCode);}private void Form1_Load(object sender, EventArgs e){LoadUserMessage();}#region send mail//参数说明:发件人地址,收件人地址,发件人邮箱密码,邮件主题,邮件内容private void send_email(string email_sender_addr, string email_receiver_addr, string email_sender_pwd, string email_subject, string email_content){//使用QQ邮件服务器发送邮件try{SmtpClient smtp = new SmtpClient();smtp.EnableSsl = true;smtp.UseDefaultCredentials = false;smtp.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式smtp.Host = "smtp.qq.com";//指定SMTP服务器smtp.Credentials = new NetworkCredential(email_sender_addr, email_sender_pwd);//发件人邮箱地址和密码#region 邮件内容MailMessage MyMail = new MailMessage(email_sender_addr, email_receiver_addr);//发件人和收件人/*  MailMessage MyMail = new MailMessage();MyMail.From = new MailAddress("690605677@qq.com");MyMail.To.Add(new MailAddress(email_addr));以上等价于MailMessage MyMail = new MailMessage(email_sender_addr,email_receiver_addr);*/MyMail.Subject = email_subject;MyMail.SubjectEncoding = Encoding.UTF8;MyMail.Body = email_content;MyMail.BodyEncoding = Encoding.UTF8;MyMail.IsBodyHtml = true;MyMail.Priority = MailPriority.Low;#endregionsmtp.Send(MyMail);lab_log.Text = GetCurrentTime() + "  发送邮件成功!";}catch (Exception e){MessageBox.Show("发送邮件出错:\n" + e.ToString());lab_log.Text = GetCurrentTime() + "  发送邮件出错!";return;}}#endregion//获取当前时间private string GetCurrentTime(){string ct = null;DateTime dt = new System.DateTime();dt = System.DateTime.Now;ct = dt.ToString();return ct;}//匹配邮箱地址private bool MatchEmailAddr(string EmailAddr){bool EmailStatus = false;//正则表达式字符串string emailStr = @"([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,5})+";//邮箱正则表达式对象Regex emailReg = new Regex(emailStr);if (emailReg.IsMatch(EmailAddr.Trim())){EmailStatus = true; ;}else{lab_log.Text = "输入的不是有效的邮件地址格式";EmailStatus = false;}return EmailStatus;}//保存用户信息private void SaveUserMessage(string email_sender_addr, string email_receiver_addr, string email_sender_pwd, string email_subject, string email_content){try {if (!File.Exists("./UserMsg.txt")){FileStream fs = File.Create("./UserMsg.txt");fs.Close();StreamWriter sw = new StreamWriter("./UserMsg.txt", false, System.Text.Encoding.GetEncoding("utf-8"));string content = GetUserMsg_json(tb_sender_addr.Text, tb_sender_pwd.Text, tb_receiver_addr.Text, tb_theme.Text, rtb_content.Text);sw.WriteLine(content);sw.Close();sw.Dispose();}else{StreamWriter sw = new StreamWriter("./UserMsg.txt", false, System.Text.Encoding.GetEncoding("utf-8"));string content = GetUserMsg_json(tb_sender_addr.Text, tb_receiver_addr.Text, tb_sender_pwd.Text, tb_theme.Text, rtb_content.Text);sw.WriteLine(content);sw.Close();sw.Dispose();}}catch {lab_log.Text = GetCurrentTime() + "  保存用户信息出错!";}}//加载用户信息private void LoadUserMessage(){if (File.Exists("./UserMsg.txt")){StreamReader sw = new StreamReader("./UserMsg.txt", System.Text.Encoding.GetEncoding("utf-8"), false);string str = null;str = sw.ReadToEnd();//MessageBox.Show("read:\n" + str);sw.Close();sw.Dispose();try{JObject job = new JObject();job = JObject.Parse(str);this.tb_sender_addr.Text = job["sender_addr"].ToString();this.tb_receiver_addr.Text = job["receiver_addr"].ToString();this.tb_sender_pwd.Text = MD5Decrypt(job["sender_pwd"].ToString());this.tb_theme.Text = job["subject"].ToString();this.rtb_content.Text = job["content"].ToString();}catch{lab_log.Text = GetCurrentTime() + "  加载用户信息失败!";}}}//将用户信息转为Json数据private string GetUserMsg_json(string email_sender_addr, string email_receiver_addr, string email_sender_pwd, string email_subject, string email_content){string retmsg = null;try {JObject job = new JObject();job.Add(new JProperty("sender_addr",email_sender_addr));job.Add(new JProperty("receiver_addr", email_receiver_addr));job.Add(new JProperty("sender_pwd", MD5Encrypt(email_sender_pwd)));job.Add(new JProperty("subject", email_subject));job.Add(new JProperty("content", email_content));retmsg = job.ToString();}catch{lab_log.Text = GetCurrentTime() + "  Json 数据出错!";}return retmsg;}//MD5加密private string MD5Encrypt(string data){string retmsg = null;string KEY_64 = "VavicApp";string IV_64 =  "VavicApp";try{byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();int i = cryptoProvider.KeySize;MemoryStream ms = new MemoryStream();CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);StreamWriter sw = new StreamWriter(cst);sw.Write(data);sw.Flush();cst.FlushFinalBlock();sw.Flush();retmsg = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);sw.Close();}catch (Exception x){MessageBox.Show("MD5 加密出错:\n"+x.Message);lab_log.Text = GetCurrentTime() + "  MD5 加密出错!";}return retmsg;} //MD5解密private string MD5Decrypt(string data){string retmsg = null;string KEY_64 =  "VavicApp";string IV_64 = "VavicApp"; try{byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);byte[] byEnc;byEnc = Convert.FromBase64String(data); //把需要解密的字符串转为8位无符号数组DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();MemoryStream ms = new MemoryStream(byEnc);CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);StreamReader sr = new StreamReader(cst);retmsg = sr.ReadToEnd();sr.Close();}catch (Exception x){MessageBox.Show("MD5 解密出错误:\n"+x.Message);lab_log.Text = GetCurrentTime() + "  MD5 解密出错误!";}return retmsg;} //关闭窗口事件private void FormCloseingAll(object sender, FormClosingEventArgs e){SaveUserMessage(tb_sender_addr.Text, tb_receiver_addr.Text, tb_sender_pwd.Text, tb_theme.Text, rtb_content.Text);//关闭所有线程System.Environment.Exit(System.Environment.ExitCode);}  }
}


本实例源代码:

http://download.csdn.net/download/u011127242/9714085


      若使用非qq邮箱向其它邮箱发邮件会导致发送失败,使用qq邮箱向其它任何邮箱(用gmail测试ok)都可以发送邮件的,所以使用的时候需要注意一下!一般的邮箱服务都只为自己的用户提供服务,所以非QQ邮箱是无法登陆到QQ邮箱客户端查看邮件信息的,更别说借用其服务发邮件了!
      如果想实现任意邮箱发送的功能,可以指定多个SMTP服务器(smtp.Host = "smtp.qq.com";//指定SMTP服务器)和对应的发送方式,发送之前根据邮箱地址判断邮箱类型,然后使用对应的SMTP服务就可以了,当然前提是你需要知道那么多的SMTP服务器地址,而且它们都对外开放了相应的接口才行!如果有兴趣的话可以试着做一下!




这篇关于C#笔记8——多功能电子邮件发送程序实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017141

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数