精华内容
下载资源
问答
  • 解决O365或outlook2016以上版本的会议通知在outlook2010中不显示会议通知郵件的图片和表格问题,
  • 邮件发送系统,支持OA系统会议,财务系统等等自动发送邮件通知
  • java对接钉钉发送消息通知

    千次阅读 热门讨论 2020-11-24 10:14:45
    现在,许多的消息会议,工作任务安排都不在是通过邮件呀,或者是使用口头表达的形式了,都是一些通讯软件进行分发,在工作中,也会有一些东西需要通过程序进行自动发送一些消息通知到指定的人,告诉他,你的,干活的...

    现在,许多的消息会议,工作任务安排都不在是通过邮件呀,或者是使用口头表达的形式了,都是一些通讯软件进行分发,在工作中,也会有一些东西需要通过程序进行自动发送一些消息通知到指定的人,告诉他,你的,干活的干活!
    现在钉钉被小学生差评之后,反而一些大人更喜欢用它来管理“孩子“们了,也就是通过钉钉消息通知,告诉同学们,这个东西有问题需要改了~
    博主也在工作中给老师安排了一道,结果呢,百度上面呢,只有机器人,没有工作通知(老师就要通知),博主大大就拿着钉钉的开发平台文档,捣鼓了两天,终于是发出去一个比较OK的通知了
    (效果图!)
    在这里插入图片描述
    看起来还是比较OK的哦,是吧!不多说废话了,出货了!
    钉钉发送消息,第一步肯定是要获取到用户的token,不然我怎么去调用接口(除非钉钉不要你的token,但是是不可能的,发送消息,肯定要登录了,用户合法才行)代码示例如下

    /**
         * 获取AccessToken
         * @return  AccessToken
         * @throws ApiException
         */
        private String getAccessToken() throws ApiException {
            DefaultDingTalkClient client =
                    new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
            OapiGettokenRequest request = new OapiGettokenRequest();
            //Appkey
            request.setAppkey(APP_KEY);
            //Appsecret
            request.setAppsecret(APP_SECRET);
            /*请求方式*/
            request.setHttpMethod("GET");
            OapiGettokenResponse response = client.execute(request);
            return response.getAccessToken();
        }
    

    这里面有一个APPkey和APPsecret 这两个东西是企业管理钉钉账号里面的连个密钥,获取方式呢,可以看一下钉钉开发平台开发文档
    好了,获取到token了,就可以进行发送消息了(发送消息代码如下)

    @Override
        public void sendNotification(String mobile,String park,String alarmCode,String severityDesc) throws ApiException {
            log.info("发送钉钉通知");
            String accessToken = getAccessToken();
            if(StringUtils.isBlank(mobile)){
                return;
            }
            //电话号码数组
            String[] split = mobile.split(",");
            for (String s : split) {
                DingTalkClient client2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get_by_mobile");
                OapiUserGetByMobileRequest req = new OapiUserGetByMobileRequest();
                req.setMobile(s);
                req.setHttpMethod("GET");
                OapiUserGetByMobileResponse rsp = client2.execute(req, accessToken);
                //获取到Urid就是在公司里要发送到那个人的id
                String urid = rsp.getUserid();
                DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
                OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
                request.setUseridList(urid);
                request.setAgentId(AGENT_ID);
                request.setToAllUser(false);
                OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
                msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
                msg.getOa().setMessageUrl(MESSAGE_URL);
                msg.getOa().setPcMessageUrl(PC_MESSAGE_URL);
                msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
                msg.getOa().getHead().setText("text");
                msg.getOa().getHead().setBgcolor("FFBBBBBB");
                msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
                msg.getOa().getBody().setContent("******");
                OapiMessageCorpconversationAsyncsendV2Request.Form formPark = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formPark.setKey(park);
                OapiMessageCorpconversationAsyncsendV2Request.Form formAlarmCode = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formAlarmCode.setKey("************");
                formAlarmCode.setValue(alarmCode);
                OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formSeverityDesc.setKey("************");
                formSeverityDesc.setValue(severityDesc);
                OapiMessageCorpconversationAsyncsendV2Request.Form formConner = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formConner.setKey("************");
                ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();
                objects.add(formPark);
                objects.add(formSeverityDesc);
                objects.add(formAlarmCode);
                objects.add(formConner);
                msg.getOa().getBody().setForm(objects);
                msg.setMsgtype("oa");
                request.setMsg(msg);
                log.info("获取发送通知消息体和获取发送通知人完成");
                OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request,accessToken);
                log.info("发送消息是否成功"+response.isSuccess());
                System.out.println(response.isSuccess());
                log.info("消息任务ID"+response.getTaskId());
                System.out.println(response.getTaskId());
            }
        }
    
    

    这上面的代码中都有注释,可以看到很清楚,博主在开发的时候唯有困了的就是设置那个消息体也就是这个

        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
                msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
                msg.getOa().setMessageUrl(MESSAGE_URL);
                msg.getOa().setPcMessageUrl(PC_MESSAGE_URL);
                msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
                msg.getOa().getHead().setText("text");
                msg.getOa().getHead().setBgcolor("FFBBBBBB");
                msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
                msg.getOa().getBody().setContent("******");
                OapiMessageCorpconversationAsyncsendV2Request.Form formPark = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formPark.setKey(park);
                OapiMessageCorpconversationAsyncsendV2Request.Form formAlarmCode = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formAlarmCode.setKey("************");
                formAlarmCode.setValue(alarmCode);
                OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formSeverityDesc.setKey("************");
                formSeverityDesc.setValue(severityDesc);
                OapiMessageCorpconversationAsyncsendV2Request.Form formConner = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                formConner.setKey("************");
                ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();
                objects.add(formPark);
                objects.add(formSeverityDesc);
                objects.add(formAlarmCode);
                objects.add(formConner);
                msg.getOa().getBody().setForm(objects);
                msg.setMsgtype("oa");
    

    这里面的Msgtype是系统通知的类型,在钉钉开发文档中也有说明,可以参考
    在这里插入图片描述
    到这来,是不是就以为结束了,nonono,还有最重要的一个,消息通知发过去了,怎么保证进去的那个人就是合法的(也就是说,这个坑怎么知道是不是这个萝卜的!)
    嘿嘿,不慌,钉钉有一个免密登录code,我们可以通过这个code获取到用户信息,同时通过网关或者拦截器这一类的东西,进行过滤用户请求,判断萝卜对不对!

     /***
         * 根据免密登录code获取用户信息
         * @param requestAuthCode 免密登录code
         * @throws ApiException
         */
        @Override
        public ResponseMessage getUserInfo(String requestAuthCode) throws ApiException {
            if(StringUtils.isBlank(requestAuthCode)){
                return ResponseMessage.error("免登录code不能为空");
            }
            String accessToken = getAccessToken();
            /*获取用户ID*/
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");
            OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
            request.setCode(requestAuthCode);
            request.setHttpMethod("GET");
            OapiUserGetuserinfoResponse response = client.execute(request, accessToken);
            String userId = response.getUserid();
            /*获取用户详细信息*/
            DingTalkClient getUserInfoClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
            OapiUserGetRequest getUserInfoRequest = new OapiUserGetRequest();
            getUserInfoRequest.setUserid(userId);
            getUserInfoRequest.setHttpMethod("GET");
            OapiUserGetResponse execute = getUserInfoClient.execute(getUserInfoRequest, accessToken);
            /*手机号*/
            String mobile = execute.getMobile();
            /*用户名*/
            String name = execute.getName();
            /*员工工号*/
            String jobNumber = execute.getJobnumber();
            String redisValues = mobile+":"+name+":"+jobNumber;
            String md5Value = MD5.create().digestHex(redisValues);
            /*存放Redis*/
            try {
                redisTemplate.opsForValue().set(requestAuthCode, md5Value, 2, TimeUnit.HOURS);
                return ResponseMessage.ok(execute);
            }catch (Exception e){
                return ResponseMessage.error("token生产存储失败!");
            }
        }
    

    看见没有,这个时候需要前台调用钉钉的免密登录接口,通过免密登录接口就能获取到code,把code发后台就能获取到钉钉用户的具体信息,可以将一些数据加密存入我们自己的token里面,用户每次将我们给他的token带回来,去rides中获取到token对比,如果存在,用户合法,如果token不存在获取过期了,提醒前台,用户需要重新登录!
    对于拦截器的和网关的使用可以查看博主的博客SpringBoot拦截器配置与使用
    SpringCloud组件4值zuul网关
    好了,老师,交作业了,多谢同学梦的支持,如有不对的地方,欢迎指正!

    展开全文
  • 在日常的办公文件处理中,经常需要制作缴费通知单、会议邀请函、请柬等并给相应的人员的发送邮件,这一类型的内容大部分是相同的,不同的只有少量的一部分信息,这种类型我们可以采用GoGoMail的功能来批量制作。...

    在日常的办公文件处理中,经常需要制作缴费通知单、会议邀请函、请柬等并给相应的人员的发送邮件,这一类型的内容大部分是相同的,不同的只有少量的一部分信息,这种类型我们可以采用GoGoMail的功能来批量制作。

    以下针对此功能进行举例介绍:

    第一步:准备Excel缴费人名单信息
    格式如下:(如图)

     

    这个表格的样式,就是第一行为标题行,即姓名、住宅等等名称之类的,每行表示1个人,发送时会按行处理,当然,最主要的就是要有一列“邮箱”列.

    第二步:使用GoGoMail向导的Excel-自定义样式处理向导 功能,这个功能的用途就是将我们准备的Excel缴费名单的数据导到工具上

     

    操作:双击,并运行起来,如下图所示,点击 “浏览(B)…”,选择我们第一步时准备好的

     

     

    选择好后,我们点击 “下一步”,出现如下图所示的选择项,很简单,它就2项让我们选择
    1.收件人姓名所在列 
    2.收件人邮箱地址所在列

    我们只需选择Excel对应的列就行了。

    然后再点击一下步。

    下一步会提示“是否开始处理?”,我们点 

    工具就帮我们自动处理到软件上来了,提示如下:

    处理完后,如图所示,会在工具的列表中出现我们excel每个人的列表。

     

    好了,这就把数据导到软件上来了,接下来,我们要做的事情就是要设计一下缴费通知单邮件的格式。

    第四步:缴费通知单邮件样式的设计

    点击GoGoMail 右上角的 “编辑邮件” ,进入编辑界面

    进入编辑邮件的界面,如下图所示:

     

    根据自己的需要,设计了格式如下图所示:

    解释一下格式的意思:

    主题:我在主题中填写了  {名称}-2018年09月缴费通知单

    这里的{名称}是关键字,也就是每个人的姓名,发送时,GoGoMail会把列表中的名称替换成收件人的名称

    正文:带{} 标识的,都为关键字,GoGoMail在发送时会自动处理成每个人的内容。

    如图所示 将文本框焦点指定到需要替换的位置(1),然后点击(2)工具栏中的插入自定义关键字按钮的图标,

    就会弹出之前向导入数据标题

    选好后确认,如下图用工具按这个按钮将{XXXX} 这些填入相应的位置即可

    好了,设计好后,我们保存内容后,点返回,返回GoGoMail工具的主界面来。如图所示。

    接下来选中列表随便一项,点  切到预览模式,就可看到发送前每个人会收到邮件的效果。

     

    以下是预览时的效果:

     

    最后一步:点击“开始发送“,GoGoMail工具,就会将每个人的工资条发到各自邮箱中去.

    展开全文
  • CMP会议 Web刮板,通过电子邮件发送有关市政厅会议通知 上市活动 -待开发 要求 将要执行 获取会议的开始时间 网页上列出了事件以及添加到日历中的链接 电子邮件通知订阅新事件 RSS订阅
  • C# 调用钉钉接口进行发送企业通知消息,适应于网页版 https://blog.csdn.net/kongwei521/article/details/79379024 C#+ashx+Js 获取钉钉个人对话ID进行发送消息 ... ...
    展开全文
  • 描述:node.js应用程序,用于将您的个人WordPress.com通知发送到Slack会议室。 作者: 作者URI: : 许可证:GNU通用公共许可证v2.0 许可URI: : 关于 这个小型的node.js应用程序会将您的个人WordPress.com...
  • C#发送会议(约会)邀请

    千次阅读 2017-09-08 16:19:23
    模型类: /// &lt;summary&gt; /// 使用net发送邮件实体类 /// &lt;/summary&gt; public class NetMeetingModel { private DateTime start; /// &lt;... /// 会议起...

    模型类:

        /// <summary>
        /// 使用net发送邮件实体类
        /// </summary>
        public class NetMeetingModel
        {
            private DateTime start;
            /// <summary>         
            /// 会议起始时间        
            /// </summary>       
            public DateTime Start
            {
                get { return this.start; }
                set { this.start = value; }
            }
            private DateTime end;
            /// <summary>         
            /// 会议结束时间         
            /// </summary>        
            public DateTime End
            {
                get { return this.end; }
                set { this.end = value; }
            }
            private string summary;
            /// <summary>         
            /// 会议主题         
            /// </summary>        
            public string Summary
            {
                get { return this.summary; }
                set { this.summary = value; }
            }
            private string location;
            /// <summary>         
            /// 会议地点         
            /// </summary>          
            public string Location
            {
                get { return this.location; }
                set { this.location = value; }
            }
            private string description;
            /// <summary>         
            /// 会议的详细说明         
            /// </summary>        
            public string Description
            {
                get { return this.description; }
                set { this.description = value; }
            }
            private string organizerName;
            /// <summary>         
            /// 发送人姓名        
            /// </summary>         
            public string OrganizerName
            {
                get { return this.organizerName; }
                set { this.organizerName = value; }
            }
            private string organizerEmail;
            /// <summary>         
            /// 发送人邮箱         
            /// </summary>          
            public string OrganizerEmail
            {
                get { return this.organizerEmail; }
                set { this.organizerEmail = value; }
            }
            private List<string> requiredRecipients = new List<string>();
            /// <summary>         
            /// 必选收件人邮件         
            /// </summary>          
            public List<string> RequiredRecipients
            {
                get { return this.requiredRecipients; }
                set { this.requiredRecipients = value; }
            }
            private List<string> optionalRecipients = new List<string>();
            /// <summary>        
            /// 传抄收件人邮件        
            /// </summary>         
            public List<string> OptionalRecipients
            {
                get { return this.optionalRecipients; }
                set { this.optionalRecipients = value; }
            }
            private List<string> resourceRecipients = new List<string>();
            /// <summary>        
            /// 密传抄收件人邮件         
            /// </summary>         
            public List<string> ResourceRecipients
            {
                get { return this.resourceRecipients; }
                set { this.resourceRecipients = value; }
            }
    
            private string body;
            /// <summary>         
            /// 邮件内容       
            /// </summary>          
            public string Body
            {
                get { return this.body; }
                set { this.body = value; }
            }
    
        }

    (一):调用OUTLOOK API

    添加引用:Microsoft.Office.Interop.Outlook

    public class NetMeetingManager
        {         
            // 邮件实体类          
            private NetMeetingModel CalendarModel;
            /// <summary>         
            /// 构造函数         
            /// </summary>          
            public NetMeetingManager(NetMeetingModel model)
            {
                this.CalendarModel = model;
            }
    
    	public static void SendAppointByOutlook()
            {
                try
                {
                    var oApp = new ApplicationClass(); // 会议是约会的一种 
                    AppointmentItem oItem = (AppointmentItem)oApp.CreateItem(OlItemType.olAppointmentItem);
                    oItem.MeetingStatus = OlMeetingStatus.olMeeting; // 会议主题 
                    oItem.Subject = this.CalendarModel.Summary;// 会议主题  
                    oItem.Body = this.CalendarModel.Body; // 会议内容  
                    oItem.Location = this.CalendarModel.Location;// 会议地点  
                    oItem.Start = this.CalendarModel.Start; // 会议开始时间 
                    oItem.End = this.CalendarModel.End;// 会议结束时间 
                    oItem.ReminderSet = true; // 提醒设置
                    oItem.ReminderMinutesBeforeStart = 5; 
                    oItem.AllDayEvent = true; // 是否全天事件 
                    oItem.BusyStatus = OlBusyStatus.olBusy; // 显示为忙 
    		oItem.SendUsingAccount = oApp.Session.Accounts[1];// 发件人的帐号信息(索引从1开始,而不是从0)
                    // 添加必选人 
                    foreach (string recipient in this.CalendarModel.RequiredRecipients)
                    {
                        if (!string.IsNullOrEmpty(recipient))
                        {
                            Recipient force = oItem.Recipients.Add(recipient);
                            force.Type = (int)OlMeetingRecipientType.olRequired;
                        }
                    }
    		// 添加可选人 
    		foreach (string recipient in this.CalendarModel.OptionalRecipients) 
    		{ 
    		    if (!string.IsNullOrEmpty(recipient))
                        {
    			Recipient opt = oItem.Recipients.Add(recipient);
    			opt.Type = (int)OlMeetingRecipientType.olOptional; 
    		    }
    		}
    		// 添加会议发起者				
    		if (!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail.Trim()))
                    {
    		     Recipient sender = oItem.Recipients.Add(this.CalendarModel.OrganizerEmail);
    		     sender.Type = (int)OlMeetingRecipientType.olOrganizer;
                    }
    		oItem.Recipients.ResolveAll();
                    oItem.Send();
                }
                catch (Exception ex)
                {
                }
            }
        }
    	public static void SendAppointByOutlook()
            {
                尝试
                {
                    var oApp = new ApplicationClass(); //会议是约会的一种 
                    AppointmentItem oItem =(AppointmentItem)oApp.CreateItem(OlItemType.olAppointmentItem);
                    oItem.MeetingStatus = OlMeetingStatus.olMeeting; //会议主题 
                    oItem.Subject = this.CalendarModel.Summary; //会议主题  
                    oItem.Body = this.CalendarModel.Body; //会议内容  
                    oItem.Location = this.CalendarModel.Location; //会议地点  
                    oItem.Start = this.CalendarModel.Start; //会议开始时间 
                    oItem.End = this.CalendarModel.End; //会议结束时间 
                    oItem.ReminderSet = true; //提醒设置
                    oItem.ReminderMinutesBeforeStart = 5; 
                    oItem.AllDayEvent = true; //是否全天事件 
                    oItem.BusyStatus = OlBusyStatus.olBusy; //显示为忙 
    		oItem.SendUsingAccount = oApp.Session.Accounts [1]; //发件人的帐号信息(索引从1开始,而不是从0)
                    //添加必选人 
                    foreach(this.CalendarModel.RequiredRecipients中的字符串收件人)
                    {
                        if(!string.IsNullOrEmpty(recipient))
                        {
                            收件人的力量= oItem.Recipients.Add(收件人);
                            force.Type =(int)OlMeetingRecipientType.olRequired;
                        }
                    }
    		//添加可选人 
    		foreach(this.CalendarModel.OptionalRecipients中的字符串收件人) 
    		{ 
    		    if(!string.IsNullOrEmpty(recipient))
                        {
    			收件人opt = oItem.Recipients.Add(收件人);
    			opt.Type =(int)OlMeetingRecipientType.olOptional; 
    		    }
    		}
    		//添加会议发起者				
    		if(!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail.Trim()))
                    {
    		     收件人发件人= oItem.Recipients.Add(this.CalendarModel.OrganizerEmail);
    		     sender.Type =(int)OlMeetingRecipientType.olOrganizer;
                    }
    		oItem.Recipients.ResolveAll();
                    oItem.Send();
                }
                catch(Exception ex)
                {
                }
            }
        }

     

    (二):使用SmtpClient

     

    public class NetMeetingManager
        {   // 发送邮件地址         
            string credentialEmail = ConfigurationManager.AppSettings["MailFrom"].ToString();
            // 发送邮件密码          
            string credentialPassword = ConfigurationManager.AppSettings["MailFromPWD"].ToString();
             //邮件服务器
    	string smtpserver = ConfigurationManager.AppSettings["smtpserver"].ToString();
            // 邮件实体类          
            private NetMeetingModel CalendarModel;
            /// <summary>         
            /// 构造函数         
            /// </summary>          
            public NetMeetingManager(NetMeetingModel model)
            {
                this.CalendarModel = model;
            }
            /// <summary>        
            /// 发送邮件         
            /// </summary>          
            public void SendEmail()
            {
                try
                {
                    #region 设置邮件信息                  
                    MailMessage mail = new MailMessage();
                    // 解决邮件标头的编码问题                 
                    Encoding czCoding = Encoding.UTF8;
                    // 邮件标头 
                    mail.Headers.Add("Content-class", "urn:content-classes:calendarmessage");
                    // 邮件主题                 
                    mail.Subject = this.CalendarModel.Summary;
                    mail.SubjectEncoding = czCoding;
                    // 设置邮件的优先级                 
                    mail.Priority = MailPriority.Normal;
                    // 设置邮件的发送通知                 
                    mail.DeliveryNotificationOptions = DeliveryNotificationOptions.None;
                    // 发件人邮件                  
                    mail.From = new MailAddress(this.credentialEmail, this.CalendarModel.Location, czCoding);
                    // 收件人邮件                  
                    foreach (string requiredemail in this.CalendarModel.RequiredRecipients)
                    {
                        if (!string.IsNullOrEmpty(requiredemail))
                        {
                            mail.To.Add(new MailAddress(requiredemail, requiredemail, czCoding));
                        }
                    }
                    // 传抄收件人邮件                  
                    foreach (string optionalemail in this.CalendarModel.OptionalRecipients)
                    {
                        if (!string.IsNullOrEmpty(optionalemail))
                        {
                            mail.CC.Add(new MailAddress(optionalemail, optionalemail, czCoding));
                        }
                    }
                    // 密传抄收件人邮件                  
                    foreach (string resourceemail in this.CalendarModel.ResourceRecipients)
                    {
                        if (!string.IsNullOrEmpty(resourceemail))
                        {
                            mail.Bcc.Add(new MailAddress(resourceemail, resourceemail, czCoding));
                        }
                    }
                    //对组织者进行传抄一份                  
                    if (!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail.Trim()))
                    {
                        mail.CC.Add(new MailAddress(this.CalendarModel.OrganizerEmail, this.CalendarModel.OrganizerName, czCoding));
                    }
                    // 设置邮件正文                  
                    mail.Body = this.CalendarModel.OrganizerName + ":" + this.CalendarModel.Description;
                    mail.BodyEncoding = Encoding.UTF8;
                    mail.IsBodyHtml = true;
                    // 在邮件中设置不同的Mime类型                  
                    ContentType typeText = new ContentType("text/plain");
                    ContentType typeHtml = new ContentType("text/html");
                    ContentType typeCalendar = new ContentType("text/calendar");
                    //向calendar header添加参数                  
                    typeCalendar.Parameters.Add("method", "REQUEST");
                    typeCalendar.Parameters.Add("charset", "utf-8");
                    typeCalendar.Parameters.Add("name", "meeting.ics");
    				
    		//使用文本类型创建邮件的body部分 
                    //AlternateView viewText = AlternateView.CreateAlternateViewFromString(this.CalendarModel.Body, typeText); 
    		//mail.AlternateViews.Add(viewText);
    		// 使用html格式创建邮件的body部分 
                    AlternateView viewHtml = AlternateView.CreateAlternateViewFromString(this.CalendarModel.Body, typeHtml);
                    mail.AlternateViews.Add(viewHtml);
                    // 使用vcalendar格式创建邮件的body部分                 
                    AlternateView viewCalendar = AlternateView.CreateAlternateViewFromString(this.CalendarGenerate(this.CalendarModel.Body), typeCalendar);
                    viewCalendar.TransferEncoding = TransferEncoding.SevenBit;
                    mail.AlternateViews.Add(viewCalendar);
                    SmtpClient smtp = new SmtpClient(this.smtpserver);
                    // 是否使用默认证书                  
                    smtp.UseDefaultCredentials = false;
                    // 获取发件人验证证书                  
                    smtp.Credentials = new NetworkCredential(this.credentialEmail, this.credentialPassword);
                    // 通过网络处理待发电子邮件                 
                    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                    // 使用套间字加密连接                 
                    smtp.EnableSsl = false;
                    // 发送邮件 
                    smtp.Send(mail);
                    #endregion
                }
                catch (Exception ex)
                {
                }
            }
    
            /// <summary>          
            /// 生成ics文件(为以Outlook主要参考)         
            /// </summary>          
            /// <returns></returns>         
            private string CalendarGenerate(string strBodyHtml)
            {
                string calDateFormat = "yyyyMMddTHHmmssZ";
                StringBuilder sb = new StringBuilder();
                sb.Append("BEGIN:VCALENDAR").Append("\r\n");
                sb.Append("PRODID:").Append("-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN").Append("\r\n");
                sb.Append("VERSION:2.0").Append("\r\n");
                sb.Append("METHOD:REQUEST").Append("\r\n");
                sb.Append("X-MS-OLK-FORCEINSPECTOROPEN:TRUE").Append("\r\n");
                sb.Append("BEGIN:VEVENT").Append("\r\n");
                if (!string.IsNullOrEmpty(this.CalendarModel.OrganizerEmail))
                {
                    sb.Append("ORGANIZER;CN=\"").Append(this.CalendarModel.OrganizerName).Append("\":MAILTO" + ":").Append(this.CalendarModel.OrganizerEmail).Append("\r\n");
                }
                foreach (string recipient in this.CalendarModel.RequiredRecipients)
                {
                    sb.Append("ATTENDEE;CN=\"" + recipient + "\";RSVP=TRUE:mailto:" + recipient).Append("\r\n");
                }
                foreach (string recipient in this.CalendarModel.OptionalRecipients)
                {
                    sb.Append("ATTENDEE;CN=\"" + recipient + "\";ROLE=OPT-PARTICIPANT;RSVP=TRUE:mailto:" + recipient).Append("\r\n");
                }
                foreach (string recipient in this.CalendarModel.ResourceRecipients)
                {
                    sb.Append("ATTENDEE;CN=\"" + recipient + "\";CUTYPE=RESOURCE;ROLE=NON-PARTICIPANT;RSVP=TRUE:mailto:" + recipient).Append("\r\n");
                }
                sb.Append("CLASS:PUBLIC").Append("\r\n");
                sb.Append("CREATED:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("DESCRIPTION:").Append(this.NotNull(this.CalendarModel.Description)).Append("\r\n");
                sb.Append("DTEND:").Append(this.CalendarModel.End.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("DTSTAMP:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("DTSTART:").Append(this.CalendarModel.Start.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("LAST-MODIFIED:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("LOCATION:").Append(this.NotNull(this.CalendarModel.Location)).Append("\r\n");
                sb.Append("PRIORITY:5").Append("\r\n");
                sb.Append("SEQUENCE:0").Append("\r\n");
                sb.Append("SUMMARY:").Append(this.NotNull(this.CalendarModel.Summary)).Append("\r\n");
                sb.Append("UID:").Append(Guid.NewGuid().ToString().Replace("-", "") + Guid.NewGuid().ToString().Replace("-", "")).Append("\r\n");
                sb.Append("X-ALT-DESC;FMTTYPE=text/html:").Append(strBodyHtml).Append("\r\n");
                sb.Append("STATUS:CONFIRMED").Append("\r\n");
                sb.Append("TRANSP:OPAQUE").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-BUSYSTATUS:BUSY").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-IMPORTANCE:1").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-INSTTYPE:0").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-ALLDAYEVENT:FALSE").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-OWNERAPPTID:-611620904").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-APPT-SEQUENCE:0").Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("X-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE:").Append(DateTime.Now.ToUniversalTime().ToString(calDateFormat)).Append("\r\n");
                sb.Append("BEGIN:VALARM").Append("\r\n");
                sb.Append("ACTION:DISPLAY").Append("\r\n");
                sb.Append("DESCRIPTION:REMINDER").Append("\r\n");
                sb.Append("TRIGGER;RELATED=START:-PT00H15M00S").Append("\r\n");
                sb.Append("END:VALARM").Append("\r\n"); sb.Append("END:VEVENT").Append("\r\n");
                sb.Append("END:VCALENDAR").Append("\r\n");
                return sb.ToString();
            }
            /// <summary>         
            /// 设定不为null值         
            /// </summary>         
            /// <param name="str"></param>         
            /// <returns></returns>          
            private string NotNull(string str)
            {
                return str ?? String.Empty;
            }
        }
    
    

     

     

     

    展开全文
  • 1.使用java发送 日程 会议邮件 可以达到安排别人日程预约的目的,代码如下。这个网上教程和多,但是如果已经发送了日程,又需要使用代码进行修改怎么办呢? 2.会议的修改和取消: 首先,发送安排时需要记录生成的...
  • 会议背景: 2018年“第二届Stata中国用户大会”(2018China Stata Users' Conference)是由北京友万信息科技有限公司(简称:友万科技)主办,顺德职业技术学院承办的聚焦Stata应用与技术落地的盛会。继2017年Stata...
  • Android --前台通知 Notification

    千次阅读 2019-04-03 16:04:10
    最近项目中有遇到这样一个问题:app在视频会议中,退出后台去做其他事情,不到一会的时间我的app就死掉了,后来推测是因为我的app占的cpu太大,让系统给杀死了。然后就想到了前台服务Notification,我也是第一次了解...
  • 招聘会、宣讲会、学术会议、技术沙龙 酒店 名字、位置、电话 账单 蚂蚁、信用卡、白条 采用技术和库 name usage Realm 数据 ButterKnife View绑定 Lombok 生成样板代码 RxJava Reactive RxPermission 权限管理 ...
  • Outlook无法发出会议邀请

    千次阅读 2017-11-23 16:45:00
    症状:用户报告说突然无法发出会议邀请,收到回弹邮件,提示:This message could not be sent. Try sending the message again later, or contact your network administrator. Error is [0x80070057-00000000-...
  • 微信公众号消息通知手把手教程

    千次阅读 2020-10-16 16:29:16
    项目需求:微信公众号消息推送 首先你需要我给你提供以下地址 方便你进行开发 ...2 这是时候你肯定不知道 模版消息是什么 就是你公众号 推送给 用户的一个固定模版的消息格式 比如我要弄的会议提醒 效果如...
  • 使用ical4j和javamail发送会议邀请

    千次阅读 2015-07-07 11:51:01
    最近项目在做会议日程时需要发送邮件提醒,并要能把日程以会议邀请的方式显示在日历中(邮件通过邮件客户端接收如outlook、Foxmail等),利用ical4j可以读写iCalendar 数据流,把日程信息作为邮件正文发送会议邀请。...
  • 这是一个简单的perl脚本,在传入会议室名称,身份验证令牌和消息后,它将使用Hipchat的API v2向会议发送消息。 还包括用于选择颜色,通知房间,传递html消息,使用代理以及根据需要选择使用API​​ v1的功能。 ...
  • 发送通知 您需要一种“服务器端”的方式来“发送通知”,方法是简单地导航到: http://localhost:5000/notify ,它将通知发送到您的另一个窗口。 (或者,如果您将其关闭,则会在计算机,顶部或手机的右侧弹出一条...
  • 此脚本会在每次会议前 15 分钟通知您您的 google 日历帐户,以及您的 Fitbit 健康助手的跟踪器警报(小振动)。 这是一个谷歌脚本:您需要在主函数上创建一个每小时事件触发器,以在您的 Fitbit 设备上发送通知。 ...
  • .net c# outlook发送邀请功

    千次阅读 2015-06-03 15:57:07
    用.net c#语言做一个发送会议邀请到outlook并显示在日历上
  • 最近几天有人需要帮忙做一个关于发送验证码的功能,之前没有做过,于是我鼓捣一阵子,记录一下关于web项目中注册登录常用的手机验证码和邮箱验证码的发送。 作为一个演示项目,我没有使用任何框架,用了一个简单的...
  • 第四步详情:发送模板消息,模板的内容需要我们自己去配凑起来,首先要去你的微信公众平台申请一个模板消息,申请成功之后,微信会给你发送一个模板id;例如下图:   //传递模板数据 function data($...
  • 在相关会议召开前及时获得通知! 当订阅者关心的话题出现在会议议程上时,此服务会提醒他们。 它监视指定网站的新会议议程和附件,向订阅者发送电子邮件警报,其中包含指向与指定关键字或搜索查询匹配的新发布议程的...
  • 软件测试面试题(面试前准备篇)

    万次阅读 多人点赞 2019-09-27 10:42:37
    UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) 4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信 5、TCP首部...
  • 企业微信群机器人消息发送和管理 开源地址:https://github.com/crisschan/workwechatbot 使用方法 在botconfig配置机器人的回调地址和机器人别名,运行webapp后,会在8080启动服务,访问127.0.0.1:8080就可以访问...
  • java技术--电话语音通知

    千次阅读 2019-10-19 15:37:12
    对长时间的语音数据流进行识别,适用于会议演讲、视频直播等长时间不间断识别的场景 < 3 > 一句话识别 1.支持音频编码格式:PCM、OPUS、OPU 2.支持Java,C++,iOS,Android语言 3.对一分钟内的短语音进行识别,...
  • SpringBoot整合发送邮件的四种方式

    千次阅读 2020-08-14 13:55:41
    邮件发送是一个非常非常常见的功能,注册时的身份认证、 重要通知发送等都会用到邮件发送。Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。Spring 中提供了JavaMailSender用来简化邮件配置。Spring Boot 则...
  • 中信银行总行信息科技部今年在成都设立研发中心,而且今年总部也在扩招,听说一共招1000+(宣讲会说的),成都这边招400+...邮件通知实习(11月28日),正式批的同学大概也是这两天发的面试通知。 实习(2019年12月...
  • SmartEvent Web规模管理系统,具有提醒通知,出席确认和通过Meet进行的在线会议。 专注于自愿工作组,因为它们具有简单的功能,而不必为不需要这些功能的更复杂的系统付费。 仪表盘
  • outlook 从2013升级到2016后,发出的会议邀请正文中,...解决方法就是将outlook--选项--向组织以外发送会议要求是,使用icalendar格式,这个关掉,icalendar这个标准不是微软原生的,可能存在兼容性问题。 ...
  • GitHub Actions 部署爬虫并定时发送邮件

    千次阅读 多人点赞 2020-02-02 11:22:40
    本文将介绍如何在 GitHub Actions 上部署爬虫并定时发送邮件,无需额外购买服务器 GitHub Actions GitHub Actions 是在 GitHub Universe 大会上发布的,被 Github 主管 Sam Lambert 称为 “再次改变软件开发” 的一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,352
精华内容 9,340
关键字:

发送会议通知的要求