设为首页 收藏本站
查看: 1109|回复: 0

[经验分享] 邮件也疯狂之Outlook约会邮件

[复制链接]

尚未签到

发表于 2015-9-12 13:01:26 | 显示全部楼层 |阅读模式
  工作中经常用邮件来进行沟通,对我来说,经常使用outlook来收发邮件。用outlook发邮件大家一定也不陌生,但outlook中有一种“约会邮件”大家一定用的不多,这类邮件一般是领导安排任务或召开重大会议时的一种通知方式,因为它有提醒功能。
  
DSC0000.gif
  (新建约会邮件)
  
DSC0001.gif
  (录入信息,注意有一个提醒设置)
  
  简单介绍完了,下面就来看看如何用代码实现,废话不多说直接上代码,因为也不是我写的。(当时在项目中为了实现这个功能可花了N长时间)
  



Code
public struct AppointMail
{
    public string from;     //发件人邮箱
    public string to;        //收件人邮箱;号分隔的一个串
    public string fromDisplayName; //发件人姓名
    public string subject;  //标题
    public string body;     //正文
    public string location; //地点
    public DateTime sTime;  //开始时间
    public DateTime eTime;  //结束时间
}
  



Code
public static void SendAppointMail(AppointMail mail)
    {
        MailMessage msg = new MailMessage();
        MailAddressCollection attendeeList = new MailAddressCollection();
        string[] sendTo = mail.to.Split(';');
        foreach (string temp in sendTo)
        {
            msg.Bcc.Add(temp);
            attendeeList.Add(temp);
        }
        //  Set up the different mime types contained in the message
        System.Net.Mime.ContentType textType = new System.Net.Mime.ContentType("text/plain");
        System.Net.Mime.ContentType HTMLType = new System.Net.Mime.ContentType("text/html");
        System.Net.Mime.ContentType RTFType = new System.Net.Mime.ContentType("text/rtf");
        System.Net.Mime.ContentType calendarType = new System.Net.Mime.ContentType("text/calendar;");
        //Add parameters to the calendar header
        calendarType.Parameters.Add("method", "REQUEST");
        calendarType.Parameters.Add("name", "meeting.ics");
        //calendarType.Parameters.Add("charset", "utf-8");
        //  Create message body parts

        /*
        //  create the Body in text format  
        string bodyText = "Type:Single Meeting\r\nOrganizer: {0}\r\nStart Time:{1}\r\nEnd Time:{2}\r\nTime Zone:{3}\r\nLocation: {4}\r\n\r\n*~*~*~*~*~*~*~*~*~*\r\n\r\n{5}";
        bodyText = string.Format(bodyText,
        mail.fromDisplayName,
        mail.sTime.ToLongDateString() + " " + mail.sTime.ToLongTimeString(),
        mail.eTime.ToLongDateString() + " " + mail.eTime.ToLongTimeString(),
        System.TimeZone.CurrentTimeZone.StandardName,
        mail.location,
        mail.subject);
        AlternateView textView = AlternateView.CreateAlternateViewFromString(bodyText, textType);
        msg.AlternateViews.Add(textView);*/

        //create the Body in HTML format
        /*
        string bodyHTML = "";
        bodyHTML = string.Format(bodyHTML,
        mail.subject,
        mail.fromDisplayName,
        mail.sTime.ToLongDateString() + " " + mail.sTime.ToLongTimeString(),
        mail.eTime.ToLongDateString() + " " + mail.eTime.ToLongTimeString(),
        System.TimeZone.CurrentTimeZone.StandardName,
        mail.location,
        mail.subject);
        AlternateView HTMLView = AlternateView.CreateAlternateViewFromString(bodyHTML, HTMLType);
        msg.AlternateViews.Add(HTMLView);
         */
        //create the Body in VCALENDAR format

        string calDateFormat = "yyyyMMddTHHmmssZ";
        string bodyCalendar = "BEGIN:VCALENDAR\r\nMETHOD:REQUEST\r\nPRODID:Microsoft CDO for Microsoft Exchange\r\nVERSION:2.0\r\nBEGIN:VTIMEZONE\r\nTZID:(GMT-06.00) Central Time (US & Canada)\r\nX-MICROSOFT-CDO-TZID:11\r\nBEGIN:STANDARD\r\nDTSTART:16010101T020000\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nDTSTART:16010101T020000\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTAMP:{8}\r\nDTSTART:{0}\r\nSUMMARY:{6}\r\nUID:{5}\r\nATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"{9}\":MAILTO:{9}\r\nACTION;RSVP=TRUE;CN=\"{4}\":MAILTO:{4}\r\nORGANIZER;CN=\"{3}\":mailto:{4}\r\nLOCATION:{2}\r\nDTEND:{1}\r\nDESCRIPTION:{7}\\N\r\nSEQUENCE:1\r\nPRIORITY:5\r\nCLASS:\r\nCREATED:{8}\r\nLAST-MODIFIED:{8}\r\nSTATUS:CONFIRMED\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:BUSY\r\nX-MICROSOFT-CDO-INSTTYPE:0\r\nX-MICROSOFT-CDO-INTENDEDSTATUS:BUSY\r\nX-MICROSOFT-CDO-ALLDAYEVENT:FALSE\r\nX-MICROSOFT-CDO-IMPORTANCE:1\r\nX-MICROSOFT-CDO-OWNERAPPTID:-1\r\nX-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE:{8}\r\nX-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE:{8}\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:REMINDER\r\nTRIGGER;RELATED=START:-PT00H15M00S\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n";
        bodyCalendar = string.Format(bodyCalendar,
        mail.sTime.ToUniversalTime().ToString(calDateFormat),
        mail.eTime.ToUniversalTime().ToString(calDateFormat),
        mail.location,
        mail.fromDisplayName,
        mail.from,
        Guid.NewGuid().ToString("B"),
        mail.subject,//summary
        mail.body,//正文
        DateTime.Now.ToUniversalTime().ToString(calDateFormat),
        attendeeList.ToString(),
        mail.body
        );
        AlternateView calendarView = AlternateView.CreateAlternateViewFromString(bodyCalendar, calendarType);
        calendarView.TransferEncoding = TransferEncoding.SevenBit;
        msg.AlternateViews.Add(calendarView);
        //  Adress the message
        msg.From = new MailAddress(mail.from, mail.fromDisplayName);
        msg.IsBodyHtml = true;
        SmtpClient smtpClient = new SmtpClient(ConfigurationManager.AppSettings["mail"]);
        smtpClient.Send(msg);
    }
  
  这个功能有一个小问题,就是无法在邮件正文中设置html样式,虽然设置了IsBodyHtml = true;但可惜还是不行,希望哪位高人能够解决一下~
  
  额外附送我的邮件发送类 (普通的邮件)

  
  



Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Mail;
namespace Project.Common
{
    /// <summary>
    /// 静态类 提供发送邮件的方法
    /// </summary>
    public static class Mail
    {
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail">MailEntity实体</param>
        /// <param name="host">邮件服务器</param>
        public static void sendMail(MailEntity mail,string host)
        {
            MailAddress fromAddress = new MailAddress(mail.From, mail.FromDisplayName);
            MailMessage msg = new MailMessage();
            msg.From = fromAddress;
            string[] sendTo = mail.To.Split(';');
            foreach (string temp in sendTo)
            {
                if (temp != string.Empty)
                {
                    msg.Bcc.Add(temp);
                }
            }
            msg.IsBodyHtml = true;
            msg.Subject = mail.Subject;
            msg.Body = mail.Body;
            SmtpClient smtpClient = new SmtpClient(host);
            smtpClient.Send(msg);
        }
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail">MailEntity实体</param>
        /// <param name="host">邮件服务器</param>
        /// <param name="port">端口</param>
        public static void sendMail(MailEntity mail, string host,int port)
        {
            MailAddress fromAddress = new MailAddress(mail.From, mail.FromDisplayName);
            MailMessage msg = new MailMessage();
            msg.From = fromAddress;
            string[] sendTo = mail.To.Split(';');
            foreach (string temp in sendTo)
            {
                if (temp != string.Empty)
                {
                    msg.Bcc.Add(temp);
                }
            }
            msg.IsBodyHtml = true;
            msg.Subject = mail.Subject;
            msg.Body = mail.Body;
            SmtpClient smtpClient = new SmtpClient(host,port);
            smtpClient.Send(msg);
        }
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail">MailEntity实体</param>
        /// <param name="host">邮件服务器</param>
        /// <param name="port">端口</param>
        /// <param name="adminName">权限验证所需的用户名</param>
        /// <param name="adminPassword">权限验证所需的密码</param>
        public static void sendMail(MailEntity mail, string host, int port, string adminName, string adminPassword)
        {
            MailAddress fromAddress = new MailAddress(mail.From, mail.FromDisplayName);
            MailMessage msg = new MailMessage();
            msg.From = fromAddress;
            string[] sendTo = mail.To.Split(';');
            foreach (string temp in sendTo)
            {
                if (temp != string.Empty)
                {
                    msg.Bcc.Add(temp);
                }
            }
            msg.IsBodyHtml = true;
            msg.Subject = mail.Subject;
            msg.Body = mail.Body;
            SmtpClient smtpClient = new SmtpClient(host, port);
            smtpClient.Credentials = new System.Net.NetworkCredential(adminName, adminPassword);
            smtpClient.Send(msg);
        }
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail">MailEntity实体</param>
        /// <param name="host">邮件服务器</param>
        /// <param name="port">端口</param>
        /// <param name="adminName">权限验证所需的用户名</param>
        /// <param name="adminPassword">权限验证所需的密码</param>
        /// <param name="domain">域</param>
        public static void sendMail(MailEntity mail, string host, int port,string adminName,string adminPassword,string domain)
        {
            MailAddress fromAddress = new MailAddress(mail.From, mail.FromDisplayName);
            MailMessage msg = new MailMessage();
            msg.From = fromAddress;
            string[] sendTo = mail.To.Split(';');
            foreach (string temp in sendTo)
            {
                if (temp != string.Empty)
                {
                    msg.Bcc.Add(temp);
                }
            }
            msg.IsBodyHtml = true;
            msg.Subject = mail.Subject;
            msg.Body = mail.Body;
            SmtpClient smtpClient = new SmtpClient(host, port);
            smtpClient.Credentials = new System.Net.NetworkCredential(adminName,adminPassword,domain);
            smtpClient.Send(msg);
        }
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail">MailEntity实体</param>
        /// <param name="host">邮件服务器</param>
        /// <param name="adminName">权限验证所需的用户名</param>
        /// <param name="adminPassword">权限验证所需的密码</param>
        public static void sendMail(MailEntity mail, string host, string adminName, string adminPassword)
        {
            MailAddress fromAddress = new MailAddress(mail.From, mail.FromDisplayName);
            MailMessage msg = new MailMessage();
            msg.From = fromAddress;
            string[] sendTo = mail.To.Split(';');
            foreach (string temp in sendTo)
            {
                if (temp != string.Empty)
                {
                    msg.Bcc.Add(temp);
                }
            }
            msg.IsBodyHtml = true;
            msg.Subject = mail.Subject;
            msg.Body = mail.Body;
            SmtpClient smtpClient = new SmtpClient(host);
            smtpClient.Credentials = new System.Net.NetworkCredential(adminName, adminPassword);
            smtpClient.Send(msg);
        }
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mail">MailEntity实体</param>
        /// <param name="host">邮件服务器</param>
        /// <param name="adminName">权限验证所需的用户名</param>
        /// <param name="adminPassword">权限验证所需的密码</param>
        /// <param name="domain">域</param>
        public static void sendMail(MailEntity mail, string host, string adminName, string adminPassword, string domain)
        {
            MailAddress fromAddress = new MailAddress(mail.From, mail.FromDisplayName);
            MailMessage msg = new MailMessage();
            msg.From = fromAddress;
            string[] sendTo = mail.To.Split(';');
            foreach (string temp in sendTo)
            {
                if (temp != string.Empty)
                {
                    msg.Bcc.Add(temp);
                }
            }
            msg.IsBodyHtml = true;
            msg.Subject = mail.Subject;
            msg.Body = mail.Body;
            SmtpClient smtpClient = new SmtpClient(host);
            smtpClient.Credentials = new System.Net.NetworkCredential(adminName, adminPassword, domain);
            smtpClient.Send(msg);
        }
    }
    /// <summary>
    /// 邮件实体
    /// </summary>
    public struct MailEntity
    {
        private string from;
        /// <summary>
        /// 发送者邮箱
        /// </summary>
        public string From
        {
            get { return from; }
            set { from = value; }
        }
        private string to;
        /// <summary>
        /// 收件者集合以;分号分隔
        /// </summary>
        public string To
        {
            get { return to; }
            set { to = value; }
        }
        private string fromDisplayName;
        /// <summary>
        /// 发送者姓名
        /// </summary>
        public string FromDisplayName
        {
            get { return fromDisplayName; }
            set { fromDisplayName = value; }
        }
        private string subject;
        /// <summary>
        /// 邮件标题
        /// </summary>
        public string Subject
        {
            get { return subject; }
            set { subject = value; }
        }
        private string body;
        /// <summary>
        /// 邮件正文
        /// </summary>
        public string Body
        {
            get { return body; }
            set { body = value; }
        }
    }
}

  
  
  另外再PS一点VS的小功能,真的是非常小,所以不想再写一篇了。
  在VS开发时,我们可以看到一个叫ASP的命名空间,看下面:

  这个命名空间只有在页面的CS文件中才能看到,下面放着在该页面上注册过的usercontrol(不支持customcontrol)、页面使用的masterpage以及Global.asax文件。


  看到了吗,就算给usercontrol指定了命名空间还是可以在ASP下看到。
  over!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-112675-1-1.html 上篇帖子: Outlook 2010邮件管理OBA插件 下篇帖子: 如何批量导出Outlook附件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表