C# 如何发送邮件消息

1.安装NUGET包

MailKit

 

 

2.代码如下

 

using MailKit.Net.Smtp;
using MimeKit;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1
{
    public class MailHelper
    {
        /// <summary>
        /// 发送电子邮件
        /// </summary>    
        /// <param name="subj">邮件标题</param>
        /// <param name="bodys">邮件内容</param>
        /// <param name="mailData">发送邮件需要的基本参数信息</param>
        /// <returns></returns>

        public async Task SendMail(string subj, string bodys, SaleMail mailData)
        {
            #region 发邮件需要的基本参数

            var fromMail = mailData.LoginAccount; //发件人邮箱账号
            var pwd = mailData.LoginPwd;//发件人邮箱登录密码

            var toMail = mailData.ReceivedUser;//接收人邮箱账号,多个接收人用逗号分割开
            var otherUser = mailData.ReceivedOtherUser;//抄送人邮箱账号,多个抄送人用逗号分割开

            var smtpserver = mailData.MailServer;//邮箱服务地址 // smtp.mxhichina.com
            var port = mailData.MailPort;//邮箱端口:25

            if (string.IsNullOrWhiteSpace(smtpserver) ||
                port <= 0 ||
                string.IsNullOrWhiteSpace(fromMail) ||
                string.IsNullOrWhiteSpace(pwd) ||
                string.IsNullOrWhiteSpace(toMail))
            {
                return;
            }

            #endregion

            #region 发送内容
            var bodyType = "html"; //暂时只支持html类型的,Body里面可以支持其余类型
            var message = new MimeMessage
            {
                Subject = subj,//邮件标题
                Body = new TextPart(bodyType) //有其余类型消息体类型可以支持
                {
                    Text = bodys
                }
            };
            #endregion

            #region 发送人
            message.From.Add(new MailboxAddress("", fromMail));//发送人
            #endregion

            #region 收件人

            var toMailList = new List<string>();
            if (!string.IsNullOrWhiteSpace(toMail))
            {
                toMailList = toMail.Split(',').ToList();
            }
            foreach (var item in toMailList)
            {
                var curToMail = item.Trim();
                if (string.IsNullOrWhiteSpace(curToMail))
                {
                    continue;
                }
                message.To.Add(new MailboxAddress("", curToMail));//接收人

            }

            #endregion

            #region 抄送人
            var others = new List<string>();
            if (!string.IsNullOrWhiteSpace(otherUser))
            {
                others = otherUser.Split(',').ToList();
            }
            foreach (var s in others)
            {
                var curOther = s.Trim();
                if (string.IsNullOrWhiteSpace(curOther))
                {
                    continue;
                }
                message.Cc.Add(new MailboxAddress("", curOther));
            }

            #endregion

            #region 进行发送邮件

            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Connect(smtpserver, port);//建立连接:邮箱服务地址与端口
            smtpClient.Authenticate(fromMail, pwd);//发件人邮箱登录密码与登录账号            
            await smtpClient.SendAsync(message);//邮件传送
            smtpClient.Disconnect(true);//连接释放

            #endregion

        }

    }

    /// <summary>
    /// 发送邮件需要的基本参数信息实体
    /// </summary>
    public class SaleMail
    {

        /// <summary>
        /// 邮箱登录人(发送人)账号
        /// </summary>
        [Required]
        [StringLength(200)]
        [DefaultValue("")]
        public string LoginAccount { get; set; }


        /// <summary>
        /// (发送人)邮箱登录密码
        /// </summary>
        [Required]
        [StringLength(200)]
        public string LoginPwd { get; set; }


        /// <summary>
        /// 接收人(多个按照逗号隔开)
        /// </summary>
        [Required]
        [StringLength(200)]
        [DefaultValue("")]
        public string ReceivedUser { get; set; }

        /// <summary>
        /// 抄送人(多个按照逗号隔开)
        /// </summary>
        [Required]
        [StringLength(200)]
        [DefaultValue("")]
        public string ReceivedOtherUser { get; set; }


        /// <summary>
        /// 邮箱服务地址(smtp.mxhichina.com)
        /// </summary>
        [Required]
        [StringLength(200)]
        [DefaultValue("")]
        public string MailServer { get; set; }


        /// <summary>
        /// 邮箱端口(25)
        /// </summary>
        [Required]
        public int MailPort { get; set; }

    }
}

 

 

3.常见企业邮箱POP/SMTP/IMAP服务器地址设置

原文:http://mail.lzcdc.com/v2/help/detail?id=57

 

全球云邮
协议 无加密 SSL / TSL 服务器地址  
POP3 110 995 pop3.yunyou.top  
SMTP 25 465 / 587 smtp.yunyou.top  
IMAP 143 993 imap.yunyou.top  
新浪企业邮箱
协议 无加密 北京机房网通用户 北京机房电信用户 广州机房电信用户
POP3 110 pop3.sina.net pop3x.sina.net gzpop3.sina.net
SMTP 25 smtp.sina.net smtpx.sina.net gzsmtp.sina.net
IMAP 143 imap.sina.net imap.sina.net imap.sina.net
搜狐企业邮箱
协议 无加密 服务器地址    
POP3 110 mail.sohu.net    
SMTP 25 mail.sohu.net    
IMAP 143 mail.sohu.net    
21CN企业邮箱
协议 无加密 SSL / TSL 国内服务器 海外服务器
POP3 110 995 Pop.bnet.cn Pop-enthk.bnet.cn
SMTP 25 465 / 587 smtp.bnet.cn smtp-enthk.bnet.cn
IMAP 143 993 imap.bnet.cn imap-enthk.bnet.cn
阿里云企业邮箱(原万网邮箱)
协议 无加密 SSL / TSL 服务器地址  
POP3 110 995 pop3.mxhichina.com  
SMTP 25 465 smtp.mxhichina.com  
IMAP 143 993 imap.mxhichina.com  
腾讯企业邮箱
协议 无加密 SSL / TSL 国内服务器地址 海外服务器地址
POP3 110 995 pop.exmail.qq.com hwpop.exmail.qq.com
SMTP 25 465 smtp.exmail.qq.com hwsmtp.exmail.qq.com
IMAP 143 993 imap.exmail.qq.com hwimap.exmail.qq.com
163网易企业邮箱
协议 无加密 SSL / TSL 服务器地址  
POP3 110 995 pop.qiye.163.com  
SMTP 25 994 smtp.qiye.163.com  
IMAP 143 993 imap.qiye.163.com

本文转载于网络 如有侵权请联系删除

相关文章

  • Linux(二)

    Linux(二)發佈於 2019-06-06上一篇中,我们说了一些Linux的历史,讲解了一些shell的基本命令。本篇,我们在来说一下在Linux下,如何根据条件查找文件以及打包压缩指令。查找指令命令查找我们可以使用which或者whereis命令查找命令所在路径。whichmkdir #/usr/bin/mkdir whereismkdir #mkdir:/usr/bin/mkdir/usr/share/man/man1/mkdir.1.gz/usr/share/man/man1p/mkdir.1p.gz/usr/share/man/man2/mkdir.2.gz/usr/share/man/man3p/mkdir.3p.gz复制文件查找我们使用find命令来查找文件。 find命令用于精确查找,磁盘搜索,IO读写,CPU开销大。查找后输出到标准输出格式:find[目标路径][选项][关键字]复制常见选项:name:按文件名查找文件iname:按文件名忽略大小写查找文件size:按文件大小查找文件,+1M表示大于1M的文件,-1M表示小于1M的文件type:按文件类型查找文件mt

  • 扒一扒那些叫欧拉的定理们(五)——平面几何欧拉定理的证明

    今天我们接着上一讲的内容,来看看平面几何欧拉定理的证明过程,以及其中的数学智慧。平面几何欧拉定理的思路分析与证明平面几何欧拉定理如下图所示,三角形外心与内心的距离d可表示为:d^2=R(R-2r),其中R为外接圆半径,r为内切圆半径。图1平面几何欧拉定理图 设三角形为ABC,外心为O,内心为I,其R和r代表的长度如图所示。内心和外心别看画上去是两个孤零零的点,其实一旦做出辅助线来有着众多的相等边和角的关系。因为本身就是作了角平分线、中垂线来的,这些都是潜在被抹掉的辅助线,根据需要随时恢复。比如我们这里至少要连接AI,并延长到与圆弧相交于L,内心给出了相等角,并且在外心对应的外接圆上转化成了相邻边。至于O,到ABC距离都相等,到时候再看,不过至少我们IO=d这根线得连上。有了这些基本的辅助线以后,我们不妨来看下结论的形式,我们知道,除了勾股定理,射影定理,平面几何定理中是不会出现平方这样的形式的,除非是面积,或者由某对有公共边的相似三角形的比例关系转化而来,又或是黄金分割。而在欧拉定理这个公式里,等式右边其实是R^2-2Rr。这么写是因为R-2r这个是在是不好凑,2r倒是可以是任意一条内

  • Java面试——JVM知识

    一、什么情况下会发生栈内存溢出二、JVM的内存结构三、JVM内存为什么分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor四、JVM中一次完整的GC流程是怎样的,说说你知道的几种主要的JVM参数五、你知道的垃圾收集器,各自的优缺点,重点讲下cms和G1六、垃圾回收算法的实现原理七、当出现了内存溢出,你怎么排错八、JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存等九、简单说说你了解的类加载器,可以打破双亲委派么,怎么打破十、讲讲JAVA的反射机制十一、你们线上应用的JVM参数有哪些十二、G1和CMS区别,吞吐量优先和响应优先的垃圾收集器选择十三、怎么打出线程栈信息十四、请解释如下jvm参数的含义:-server-Xms512m-Xmx512m -Xss1024K-XX:PermSize=256m-XX:MaxPermSize=512m-XX:MaxTenuringThreshold=20-XX:CMSInitiatingOccupancyFraction=80-XX:+UseCMSInitiatingOccupan

  • RocketMQ入门到入土(一)新手也能看懂的原理和实战!

    学任何技术都是两步骤:搭建环境helloworld我也不例外,直接搞起来。一、RocketMQ的安装1、文档官方网站http://rocketmq.apache.orgGitHubhttps://github.com/apache/rocketmq2、下载wgethttps://mirror.bit.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip 复制我们是基于Centos8来的,面向官方文档学习,所以下载地址自然也是官方的。去官方网站找合适的版本进行下载,目前我这里最新的是4.7.0版本。http://rocketmq.apache.org/dowloading/releases/https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip3、准备工作3.1、解压unziprocketmq-all-4.7.0-bin-release.zip 复制3.2、安装jdksudoyumins

  • [译] 用 Web Worker 改善 Vue 组件性能

    原文:https://vuedose.tips/use-web-workers-in-your-vuejs-component-for-max-performance/ 有时开发者需要和一些“很重”的组件打交道--这通常是指由于执行了复杂的任务,所以创建和渲染开销都很大的组件。比方说,我昨天就在使用“StoryBlok”工具库创建富文本编辑器的时候遇到了麻烦。事情是这样的,从StoryBlokAPI获取富文本内容的时候,得到的数据有其独有的结构。为了将这种数据渲染到HTML中,就必须使用storyblok-js-client库提供的richTextResolver.render(content)方法。我们可以将这个功能封装到一个RichText.vue组件中。一种基本的实现可能是:<template> <divv-html="contentHtml"></div> </template> <script> exportdefault{ props:["content"], comput

  • Windows Media Player + 音乐可视化 + 音乐倒放

    ◎音乐可视化利用Windows自带的多媒体播放器WindowsMediaPlayer,呈现多彩,超强空间感的音乐可视化效果,另外还有音乐倒放?~前言WindowsMediaPlayer是Windows自带的多媒体播放器,虽然长得土里土气,但是支持音乐可视化的插件,有自带的音效插件。用它听歌,还是别有一番风味,特别是自带的SRS(SoundRetrievalSystem)环绕立体音效听一些歌(比如TaylorSwift的1989里面的歌)超赞?,空间感十足。预览可视化要下载的话,官网点这里,如下图,随便点一个下载FreeTrial版就行,选WindowsMediaPlayer,然后可能要填个表,邮箱年龄啥的,乱填一下就好了。◎下载界面有几个不同的产品,根据我的尝试,我推荐Aeon、G-Force和WhiteCap。倒放把一首歌倒着放,感觉很怪,但有时也很赞。接触到这个,是因为Coldplay一首最深情的TheScientist正序版MV。正序的MV,倒序的音乐,却仍是满满的深情。使用GoldWave可以实现把一首歌倒序,当然如果你用其它音频处理的软件也行,只要你会就行。首先点击下载gol

  • 刷新:重新发现.NET与未来

    微软在比尔·盖茨手中创立并崛起,成为PC互联网时代的霸主,很多70,80后都有MVPEdiWang的体验<.NET成人礼|还记得20年前一起拖过的控件吗?>:“当时的微软对我来说就是神的存在。因为我认识电脑到使用电脑的一切几乎都离不开这家伟大的公司,它就像上帝一样开天辟地,创造万物:Windows、Office、IE这些当年几乎是唯一的主流产品。而微软的创始人之一比尔·盖茨也成了我的偶像。还记得当年,上海有个PC专题的电视频道,有一天该频道播放了比尔盖茨关于.NET战略的演讲,啥也不懂的我,居然坐在电视机前完整看完了节目。当时的我并不知道,.NET将会彻底改变我的人生轨迹。---EdiWang ”随着2008年比尔·盖茨退隐江湖,投身更伟大的为了全人类的梦想,销售出身的鲍尔默接手微软,微软的PC软件和服务器的利润让微软有点脱离IT江湖的主流,鲍尔默称GPL为“毒瘤”,前任Windows负责人JimAllchin称其为“un-American”,几乎错过了移动互联网的整个时代,windowsphone拱手让给了开源的Android。也就是在这一时期.NET遭遇了停滞,从201

  • Introducing Spark-Kafka integration for realtime Kafka SQL queries

    ApacheKafkahasbeenalltherageforthekeyjoinofthedatapipeline.Butinmostcases,weonlytreatKafkaasastreamsourceoramessagequeue.ThismeansifyouwannadosomeAdHocquery,youneedtosyncthedatatoHDFSorotherstoragefirstly.PeoplemayhaveforgottenthatKafkaisreallygoodathighthroughputsinceKafkamakesfulluseofbothparallelconsumingandsequentialreading.Inordertosatisfytheusecasesaroundadhocanalytics,dataexplorationandtrenddiscoverybasedonKafkadirectly,anewprojectcalledspark-adhoc-kafkaisopensourced.Withthisproject,whaty

  • 贼心不死,海莲花APT组织一季度攻击活动揭秘

    一、背景“海莲花”(又名APT32、OceanLotus),被认为是来自越南的APT攻击组织,自2012年活跃以来,一直针对中国的敏感目标进行攻击活动,是近几年来针对中国大陆进行攻击活动的最活跃的APT攻击组织之一。在2019年第一季度,腾讯御见威胁情报中心持续的检测到该组织针对中国大陆的政府、海事机构、商务部门、研究机构的攻击活动。此外该组织还在不断的更新他们的攻击武器库,无论是钓鱼的诱饵形式、payload的加载、横向移动等。尤其值得注意的是,我们发现该组织针对不同的机器下发不同的恶意模块,使得即便恶意文件被安全厂商捕捉到,也因为无相关机器特征而无法解密最终的payload,无法知晓后续的相关活动。活动钻石模型如下:二、技术分析1、初始攻击恶意文件投递的方式依然是最常用的鱼叉攻击的方式,钓鱼关键字包括”干部培训”,”绩效”,”工作方向”,”纪检监察”等,相关的邮件如下:除此该次攻击还新增了敏感内容的主题,用户吸引被攻击者打开,如敏感图片:2、诱饵类型2019年一季度投递的恶意诱饵类型众多,包括白加黑、lnk、doc文档、带有WinRARACE(CVE-2018-20250)漏洞的压

  • Github项目推荐 | 面向任务对话的全局到本地存储指针网络

    本项目是ICLR2019论文《面向任务的对话的全局到本地存储指针网络》的PyTorch代码实现byChien-ShengWu,RichardSocher,CaimingXiong.ICLR2019.[PDF][OpenReivew]论文地址:https://arxiv.org/pdf/1901.04713Github项目地址:(点击此链接可直接跳转)https://github.com/jasonwu0731/GLMP代码使用PyTorch>=0.4编写。如果你在工作中使用此工具包中包含的任何源代码或数据集,请引用以下文章。bibtex字段如下:@inproceedings{wu2019global,title={Global-to-localMemoryPointerNetworksforTask-OrientedDialogue},author={Wu,Chien-ShengandSocher,RichardandXiong,Caiming},booktitle={ProceedingsoftheInternationalConferenceonLearningReprese

  • Linux下Socket编程(三)——非阻塞select的使用简介

    简介什么叫阻塞和非阻塞selectfd_set类型的变量相关宏定义fcntl实例select总是返回1的问题。什么叫阻塞和非阻塞阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。 使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况读写或是异常。select/*AccordingtoPOSIX.1-2001*/ #include<sys/select.h> /*Accordingtoearlierstandards*/ #include<sys/time.h> #include<sys/types.h> #include<unistd.h> intselec

  • 将链接地址转换为二维码并且复制文字_二维码怎么转换成链接

    大家好,又见面了,我是你们的朋友全栈君。前言:我的需求是讲链接地址转换成二维码,供用户去使用并展示H5端,这里会说到一些小细节,先上代码吧~1.html结构2.生成二维码3.复制二维码要注意的一点是:首先二维码的密度是根据参数的多少来显示的,参数如果特别多,就会导致二维码密度太密,用户拿手机是扫不出来的.解决方案:1.要后端或者自己写一个接口专门放这些地址,可以理解成压缩.然后拿到压缩的东西再去转码.2.把在另外一端能获取到的参数,通过方式获取到,在转码的时候尽量减少参数的携带,带上必要值即可.版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除。发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196731.html原文链接:https://javaforall.cn

  • 腾讯云分布式身份凭证颁发趋势api接口

    1.接口描述接口请求域名:tdid.tencentcloudapi.com。 凭证颁发趋势 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:GetCredentialIssueTrend。 Version 是 String 公共参数,本接口取值:2021-05-19。 Region 是 String 公共参数,详见产品支持的地域列表。 StartTime 是 String 开始时间(支持到天2021-4-23) EndTime 是 String 结束时间(支持到天2021-4-23) ClusterId 否 String 网络ID 3.输出参数 参数名称 类型 描述 Trend ArrayofTrend Tr

  • 腾讯云人脸核身获取动作顺序api接口

    1.接口描述接口请求域名:faceid.tencentcloudapi.com。 使用动作活体检测模式前,需调用本接口获取动作顺序。 默认接口请求频率限制:100次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:GetActionSequence。 Version 是 String 公共参数,本接口取值:2018-03-01。 Region 否 String 公共参数,本接口不需要传递此参数。 ActionType 否 String 默认不需要使用 3.输出参数 参数名称 类型 描述 ActionSequence String 动作顺序(2,1or1,2)。1代表张嘴,2代表闭眼。 RequestId String 唯一请求ID,每次请求都

  • Future源码一观-JUC系列

    背景介绍 在程序中,主线程启动一个子线程进行异步计算,主线程是不阻塞继续执行的,这点看起来是非常自然的,都已经选择启动子线程去异步执行了,主线程如果是阻塞的话,那还不如主线程自己去执行不就好了。那会不会有一种场景,异步线程执行的结果主线程是需要使用的,或者说主线程先做一些工作,然后需要确认子线程执行情况来进行后续的操作。那么这里就需要子线程异步执行完任务能把结果告诉主线程,并且主线程还能访问到子线程执行任务的状态,比如是否执行完成或正在执行中。 Future就是上面概念的抽象,按照源码中的注释,它代表着一个异步计算的结果,提供的方法中可以通过get方法获取异步线程计算的结果,如果计算还没结束,就会阻塞等待返回成功;也可以通过cancel方法取消异步计算任务;还可以通过isCancelled和isDone获得异步执行的状态;如果一个异步执行的内容并没有返回值,但是希望可以使用Future来获得取消异步计算任务的能力,可以返回null。 FutureTask FutureTask提供了对Future的基础实现,在进入FutureTask源码之前,我们先考虑下如果要实现Future的功能可以

  • Elasticsearch Mantanence Lessons Learned Today

    TodayItroubleshootedanElasticsearch-cluster-downissue. Severallessonswerelearned: Whenmanyelasticsearchclusternodesarerestarted,toavoidHEAPspike,bettertotemporarilystopallconnectionattempts; Avoidsettingallow_primary=truewhenrerouteshardsviaAPI; Don’tforgetbackup!Itcouldsaveyousomeday! ViewDetails

  • 设计模式之Adapter(适配器模式)

    1、出现原因: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。(所以可以在他们之间建立一个适配器的中间类)   2、意图: 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(就是在新环境的 接口 和 原来的 类之间 建立一个适配器,将他们联系起来)   3、两种实现适配器模式的方式 1》对象适配器 推荐使用,因为相对于下面的类继承的方式耦合度更低  结构图: 1、对象适配器采用对象组合,通过引用一个类(原来的类)与另一个类接口(实现新的环境接口) 在对象适配器中通过组合获得Adaptee对象   2、通过调用Adaptee对象的方法,转换后返回Target结果   2》类的多继承方式 不推荐使用,因为使用继承实现的,对象之间的耦合度过高  结构图: 1、类适配器通过多继承对一个接口与另一个接口进行匹配。  

  • 编译原理-01基本概念

    这个学期的编译原理课上了已经有3个星期了,发现上到后面就是有一种坐火箭的感觉,究其原因是前面的基本知识忘了哈。课本中的知识基本上要依靠前面的一些概念,符号的定义来完成的。因此在这里跟着中南大学的一个mooc将涉及的基本概念补上。所谓”浮沙之上,勿筑高台“,前面欠的债后面还是要还的。基础知识,是所有高级的知识的基础。 高级语言 传值方式 传值 传地址 传名?? 存储管理 静态存储 动态存储 程序语言的定义 一个程序语言是一个记号系统,其完整的定义包括语法和语义(形式语言) 语法:一组规则,可以产生和形成一个合适的程序 语义:什么样的符号列是合法的 基本概念 字母表 元素的非空有限集合(Σ) 字母表中的元素称为:符号 字母表包含了语言中所出现的所有符号 符号串 符号的有穷序列 不含元素的:ε 符号串的运算 符号的串的长度:含有字符的个数,记号:|x|, |ε|=0空符号串的长度为0 符号串连接 若x,y是定义在Σ上的符号串,则xy称为x和y的连接,xy也是Σ上的符号串 εx=xε =x(关于空符号串的连接) 符号串集

  • Git忽略规则(.gitignore配置)不生效原因和解决

     git库所在的文件夹中的文件大致有4种状态     Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制.通过gitadd状态变为Staged. Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致.这种类型的文件有两种去处,如果它被修改,而变为Modified.如果使用gitrm移出版本库,则成为Untracked文件 Modified:文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过gitadd可进入暂存staged状态,使用gitcheckout则丢弃修改过,返回到unmodify状态,这个gitcheckout即从库中取出文件,覆盖当前修改 Staged:暂存状态.执行gitcommit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态.执行gitresetHEADfilename取消暂存,文件状态为Modified Git忽略规则(.gitignore配置)不生效原因和解决 第一种方法:.gitignore中已经标明忽略的文件

  • 2017级算法第二次上机-B.女娲加农炮

    这道题本质上还是最经典的优先队列的使用的例题:合并果子。 借用这道题总结复习一下优先队列。 优先队列的头文件:<queue> 升序队列priority_queue<int,vector<int>,greater<int>>q;降序队列priority_queue<int,vector<int>,less<int>>q; 注意优先队列有升序版本的也有降序版本的 接下来说明一下优先队列常用的方法: q.empty()如果队列为空,则返回true,否则返回false注意这个函数的返回值是bool类型的 q.size()返回队列中元素的个数  q.pop()删除队首元素 但不返回其值  q.top()返回具有最高优先级的元素值 但不删除该元素 q.push(item)在基于优先级的适当位置插入新元素 二维元素的合并果子: #include<algorithm> #include<iostream> #include<queue> u

  • 本人修改了,需要把新的AndroidManifest.xml 覆盖原来的,AndroidManifest.xml 覆盖问题

    问题描述:我同事改了Flutter的一点东西,其中需要把他的那个AndroidManifest.xml文件覆盖掉我本地的,于是我覆盖之后,flutterrun运行之后就报错    一开始我也看不懂,因为昨天才配好环境能够运行,但是我新建一个Flutter项目看了一下本地的这个文件和需要覆盖的文件有什么不同,发现同事弄得这里    packages跟我有出入,于是我根据提示改为我本地新建是命名的(其实上面报错哪里有提示),改成这样子    运行就成功了  

相关推荐

推荐阅读