C# 发送邮件以及附件


最近想要新增了一个功能,便是验证邮箱以及将日记以邮件的形式保存起来。

这个功能对于网站本身而言是致命的,但是对于执着写日记的朋友而言,是友善的

以下是技术积累的笔记
使用C#开发发送邮件相关功能,代码来源于网络,个人照搬,但是做了极其细微的调整


    /// <summary>
    /// 发送邮件相关操作
    /// </summary>
    public class SendEmail
    {
        /// <summary>
        /// 主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)
        /// </summary>
        private MailMessage mMailMessage;
        /// <summary>
        /// 主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)
        /// </summary>
        private SmtpClient mSmtpClient;
        /// <summary>
        /// 发送邮件所用的端口号(htmp协议默认为25)
        /// </summary>
        private int mSenderPort;
        /// <summary>
        /// 发件箱的邮件服务器地址(IP形式或字符串形式均可)
        /// </summary>
        private string mSenderServerHost;
        /// <summary>
        /// 发件箱的密码
        /// </summary>
        private string mSenderPassword;
        /// <summary>
        /// 发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)
        /// </summary>
        private string mSenderUsername;
        /// <summary>
        /// 是否对邮件内容进行socket层加密传输
        /// </summary>
        private bool mEnableSsl;
        /// <summary>
        /// 是否对发件人邮箱进行密码验证
        /// </summary>
        private bool mEnablePwdAuthentication;

        ///<summary>
        /// 构造函数
        ///</summary>
        ///<param name="Server">发件箱的邮件服务器地址</param>
        ///<param name="ToAddress">收件人地址(可以是多个收件人,程序中是以“;"进行区分的)</param>
        ///<param name="FromMail">发件人地址</param>
        ///<param name="Email_Subject">邮件标题</param>
        ///<param name="Email_Message">邮件内容(可以以html格式进行设计)</param>
        ///<param name="username">发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)</param>
        ///<param name="password">发件人邮箱密码</param>
        ///<param name="port">发送邮件所用的端口号(htmp协议默认为25)</param>
        ///<param name="sslEnable">true表示对邮件内容进行socket层加密传输,false表示不加密</param>
        ///<param name="pwdCheckEnable">true表??对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证</param>
        public SendEmail(string Server, string ToAddress, string FromMail, string Email_Subject,
            string Email_Message, string username, string password,
            string port, bool sslEnable = true, bool pwdCheckEnable = true)
        {
            try
            {
                mMailMessage = new MailMessage();
                mMailMessage.To.Add(ToAddress);
                mMailMessage.From = new MailAddress(FromMail);
                mMailMessage.Subject = Email_Subject;
                mMailMessage.Body = Email_Message;
                mMailMessage.IsBodyHtml = true;
                mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
                mMailMessage.Priority = MailPriority.Normal;
                this.mSenderServerHost = Server;
                this.mSenderUsername = username;
                this.mSenderPassword = password;
                this.mSenderPort = Convert.ToInt32(port);
                this.mEnableSsl = sslEnable;
                this.mEnablePwdAuthentication = pwdCheckEnable;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        ///<summary>
        /// 添加附件
        ///</summary>
        ///<param name="attachmentsPath">附件的路径集合,以分号分隔</param>
        public bool  AddAttachments(string attachmentsPath)
        {
            try
            {
                string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义
                Attachment data;
                ContentDisposition disposition;
                for (int i = 0; i < path.Length; i++)
                {
                    data = new Attachment(path[i], MediaTypeNames.Application.Octet);
                    disposition = data.ContentDisposition;
                    disposition.CreationDate = File.GetCreationTime(path[i]);
                    disposition.ModificationDate = File.GetLastWriteTime(path[i]);
                    disposition.ReadDate = File.GetLastAccessTime(path[i]);
                    mMailMessage.Attachments.Add(data);
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        ///<summary>
        /// 邮件的发送
        ///</summary>
        public bool Send()
        {
            try
            {
                if (mMailMessage == null)
                {return false;}
                mSmtpClient = new SmtpClient();
                //mSmtpClient.Host = "smtp." + mMailMessage.From.Host;
                mSmtpClient.Host = this.mSenderServerHost;
                mSmtpClient.Port = this.mSenderPort;
                mSmtpClient.UseDefaultCredentials = false;
                mSmtpClient.EnableSsl = this.mEnableSsl;
                if (this.mEnablePwdAuthentication)
                {
                    System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
                    //mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
                    //NTLM: Secure Password Authentication in Microsoft Outlook Express
                    mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");
                }
                else
                {
                    mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
                }
                mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                mSmtpClient.Send(mMailMessage);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
    }


核心类文件,通过定义此类文件可以实现邮件发送功能


            try
            {
                string Server = "smtp.qq.com";
                string ToAddress = "milkezhang@qq.com";
                string FromMail = "dratk@foxmail.com";
                string Email_Subject = DateTime.Now.ToString();
                string Email_Message = "Hello milkezhang";
                string mailUsername = "dratk@foxmail.com";
                string mailPassword = "xxxxxxxxxxxx"; //发送邮箱的密码()
                string mailPort = "587";
                string attachPath = "z://1.jpg";

                SendEmail email = new SendEmail(Server, ToAddress, FromMail, Email_Subject
                    , Email_Message, mailUsername, mailPassword, mailPort, true, true);
                email.AddAttachments(attachPath);
                return email.Send();
            }
            catch (Exception ex)
            {
                return false;
            }


同过上一段代码发送邮件


艾金森

每一个童年的梦想都值得用青春去捍卫!




用户首页 用户信息 用户动态 用户日历 用户笔记 用户日记 用户心情 用户时间轴 心情地图 日记地图 笔记地图 时间轴地图 投票地图 习题地图 秋风起减少几件事情 听歌 照镜子 不必要的玩手机????????橙味安妃aesop 的笔记 2025/06/23 04:21:45【总有人“看见我”,总有人“被看见”(三)】宋禹嬉我喜欢你但最近不太可能写日记2022.0313我总怕来不及周处除三害【【初音ミク】太阳系迪斯科【ナユタン星人】】https://www.bilibili.com/video/BV1Fs411a7mr?vd_source=3b25d8375d6412718184e54753f4fece人生感想:不要在冬天穿斗篷上班,手都抬不起来可还行事实上,再也不会回去了。判断题疑难点43-57 基本办公软件还有夹里夹气但是问就是不知道,又极其喜欢瞎猜问题瞎联想的,听见声音起鸡皮疙瘩吃了双份的粉面菜蛋,暂时是不想再碰泡面了温十壁纸手机版哥斯拉准备第三周去学校,还在适应中时间轴 2023/10/15 15:27:39继续烧脑中,继续脑壳发晕中。2023.5.13 (4)关于朋友520太快乐了,npy给我做了一个视频,是我们一起打过的本,玩过的地方,走过的路。发朋友圈里大家直呼太甜了、天花板。说实在的我是个很想争第一的人,突然就被满足了一下,实在是真的很高兴。2023-05-20 Web开发记录【强化清理功能】你购买过盲盒吗?从现在就开始期待明天啦瘦了,可能一个礼拜瘦了,4斤吧。总结经验,少吃少动,多吃多动。挺过平台期,减肥大业势在必得。戴着口罩打了个喷嚏,全是口水味儿,没法再戴了泰勒丝女士(中)《孙子兵法》第二十一计 金蝉脱壳我做得最成功的甜品:伯爵红茶布丁奶油又快过期了咋办?你做布丁啊!——来自赞不绝口的我妈思考了许久,目前最大的问题是前端UI的设计,特别是交互的代码我也不知道,还是想走走看,能够远离这些所谓的人情世故的话,我想要真的学习一些东西,不是为了考试,也而不是为所谓的工作,就只是单纯地学习,我知道那种我对一个知识前后左右都搞懂地那种感觉,很快乐,他毕竟不是人,虽然会更新,但不会本质上突然发生改变,所以这就是了,我这一次选择的道路。MosiS 的日记 2024/04/21 20:08:19三件事——让你自己给100分。游泳第四天;五公里以上饭后遛弯第二天;六点起床第一天;第四件事,好好过周末第一天。早上带着我父母和丈母娘四个人一起去体检。截止中午已知我自己的新增项,脂肪肝和慢性咽喉炎接受现实不嘴硬,是很重要却又很难做到的事情没有足够充电桩的地方就别买小电驴、电动车。拿着电池上楼充置所有人安全于不顾然后说没办法?问题也不是光死你一个人啊今天上课,走神的时候突然想通了一件事情,有种茅塞顿开的感觉。有时候和别人交流,嗯,应该特指一些男生,会有种走到死胡同的感觉。一种礼貌的疏离。很奇怪,因为通常来说,我对他们都相对热情,是在认真地在释放善意的,他们不可能没感受到。但热情的加农炮,却攻不破他们的心理防线。为什么他们会这样呢?难道,成年人就是这样,人与人的距离会被刻意地拉远?夏日炎炎正好眠 的日记 2022/6/19 8:00:05《记录》情绪稳定,来源于:工作顺利,家庭和谐,感情不添麻烦,一切都稳定上升,自然心情愉快,身体健康,不生气,不焦虑,如果家庭很痛苦,工作不顺利,感情还不如意,那肯定……活的很难过。最近状态好了许多。因为一个人的空间,真的是太幸福了。对于我来说,完全不需要复杂的、无用的社交,不需要累赘的感情。有没有什么锻炼过目不忘的方法,东西太多了,时间又紧,我真的没时间反复去复习,记不住我就焦虑,一焦虑就烦躁,一烦躁就记不住,整个一个崩溃。铁蛋儿 的日记 2024/05/13 23:51:22看mrc打抖,刚回家就发现丢了一个大比分,好相似跑起来,跑起来,拯救世界吧真变态啊这题目 真烦 啊啊啊啊啊仙人掌一号 的笔记 2024/07/09 10:50:44以前的领导续上篇,不被尊重,自我感觉是一个努力的人,至少是比周围人努力的,看到周围人的不努力不想去跟其相处,但这样反而让自己陷入孤立的境地。被孤立被针对的感觉时常发生,这也是为什么自己不喜欢人际交往的原因。打小就害怕在很多人面前讲话,怕讲出来的东西被嘲笑,被针对,被回复又不知道怎么去应对,这些导致我不喜欢发言,或者是发言的时候,没找到一个愉快的聊下去的话题。这种感觉不知道怎么说,我所收到的观念是对的,但当遭受反驳时我又该怎么去维护它呢。看太多小红书,总是会被影响,小红书上的观点又是否完全正确,又是否偏激把文献收集收集,写一些文献综述正式开始干活了,开干吧2021年1月15日 隔离的第23天 今天吃到了想吃东西 很开心