精华内容
下载资源
问答
  • c# outlook

    2008-08-21 17:15:00
    c# outlook Outlook & C# How to create Outlook 2003 items in C# ? For accesing Office 2003 you'll need the Office XP primary interop assemblies (you can download them here). Once yo.....

    c# outlook
    Outlook & C#
     
     
    How to create Outlook 2003 items in C# ?


    For accesing Office 2003 you'll need the Office XP primary interop assemblies (you can download them here). Once you got them you can start programming Office programs with C# :).

     

    So, start up MS Visual C#.NET and create new project (WinForms or Console) then add a reference to Microsoft.Office.Interop.Outlook.

     

    First thing you need to do is create an Outlook Application object. With this object you can programmatically control Outlook.

     

    using Outlook = Microsoft.Office.Interop.Outlook;

    // Create an Outlook Application object

    Outlook.Application outlookApp = new Outlook.Application ();

     

    Once you have an Application type you can create Outlook items. Items are represented by the Microsoft.Office.Interop.Outlook.OlItemType enumeration (olAppointmentItem, olContactItem, olTaskItem, etc).

     

    So, for example let's create new Task. All you have to do is pass OlItemType.olTaskItem as an argument to Application.CreateItem ():

     

    Outlook.TaskItem myTask = (Outlook.TaskItem ) outlookApp.CreateItem(Outlook.OlItemType.olTaskItem);

    myTask.Subject = "Task, created in C#";

    myTask.Body = "This is the body of Task item created in C#";

    myTask.DueDate = DateTime.Now;

    myTask.Save ();

     

    With above code you successfully created new very simple Task in Outlook 2003 (you can also add reminders, set more properties (priority, startDate, sensitivity, etc) and implement event handlers (read, reply, open, forward, etc)).


    With same approach you can create different types of items.

     

    How to display the list of items ?

     

    Let's say we want to display a list of all Task. The basic process (regardless of an Outlook items) is:

     

    1. Obtain a NameSpace from Application.GetNamespace ()

    2. Obtain a MAPIFolder type frome NameSpace.GetDefaultFolder ()

    3. Enumerate over the sub-items using the MAPIFolder.Items indexer.

     

    With GetNamespace () you will obtain access to data store items. In Outlook 2003 the only namespace you can use is "MAPI". This gives you access to the set of Outlook folders (Inbox, Notes, etc). All folders are represented with OlDefaultFolders enumeration.

     

    To request a folder you'll need to pass and value from OlDefaultFolders as an argument to NameSpace.GetDefaultFolder (). Once you have a MAPIFolder type you can loop through the items and use them. Here is the code to display all completed tasks:

     

    // Create a namespace

    Outlook.NameSpace ns = outlookApp.GetNamespace ("MAPI");

    // Get all tasks

    Outlook.MAPIFolder myTasks = ns.GetDefaultFolder (Outlook.OlDefaultFolders.olFolderTasks);

    foreach (Outlook.TaskItem task in myTasks.Items)

    {

          if (task.Complete)

          {   // Display the creation time and body

             string str = task.CreationTime + ": " + task.Body; 

             MessageBox.Show (str); 

          }

    }

     

    More info on Office/Outlook programming:


     
     
     

    转载于:https://www.cnblogs.com/bluewelkin/archive/2008/08/21/1273390.html

    展开全文
  • C# Outlook

    2008-05-31 16:41:45
    C#编写的一个Outlook客户端! 支持附件! 03环境!
  • c# outlook风格窗口

    2011-08-30 23:16:14
    c# outlook风格窗口 c# outlook风格窗口 c# outlook风格窗口
  • c# OUTLOOK菜单效果源码

    热门讨论 2008-09-05 10:34:39
    c# OUTLOOK菜单效果 c# OUTLOOK菜单效果 c# OUTLOOK菜单效果
  • C# Outlook 界面实现Demo 工程 ,C#2008 总结网上OUTlOOK界面实现资料,写了个测试项目,容易看懂的。自由发挥
  • C# Outlook 示例

    2010-10-22 09:50:10
    C#调用Outlook功能,实现Outlook功能的补充
  • C# outlook发信

    2020-08-17 15:54:49
    } } } demo namespace EmailSender { class Program { static void Main(string[] args) { string smtpServer = "smtp-mail.outlook.com"; SendEmail(smtpServer); } static void SendEmail(string smtpServer) { /...
    using System;  
    using System.Net.Mail;  
    using System.Net.Mime;  
      
    namespace EmailSender  
    {  
        public class EmailManager  
        {  
            private string m_HostName; // your email SMTP server  
      
            public EmailManager(string hostName)  
            {  
                m_HostName = hostName;  
            }  
      
            public void SendMail(EmailSendConfigure emailConfig, EmailContent content)  
            {  
                MailMessage msg = ConstructEmailMessage(emailConfig, content);  
                Send(msg, emailConfig);  
            }  
      
            // Put the properties of the email including "to", "cc", "from", "subject" and "email body"  
            private MailMessage ConstructEmailMessage(EmailSendConfigure emailConfig, EmailContent content)  
            {  
                MailMessage msg = new System.Net.Mail.MailMessage();  
                foreach (string to in emailConfig.TOs)  
                {  
                    if (!string.IsNullOrEmpty(to))  
                    {  
                        msg.To.Add(to);  
                    }  
                }  
      
                foreach (string cc in emailConfig.CCs)  
                {  
                    if (!string.IsNullOrEmpty(cc))  
                    {  
                        msg.CC.Add(cc);  
                    }  
                }  
      
                msg.From = new MailAddress(emailConfig.From, 
                                           emailConfig.FromDisplayName,
                                           System.Text.Encoding.UTF8);  
                msg.IsBodyHtml = content.IsHtml;  
                msg.Body = content.Content;  
                msg.Priority = emailConfig.Priority;  
                msg.Subject = emailConfig.Subject;  
                msg.BodyEncoding = System.Text.Encoding.UTF8;  
                msg.SubjectEncoding = System.Text.Encoding.UTF8;  
      
                if (content.AttachFileName != null)  
                {  
                    Attachment data = new Attachment(content.AttachFileName, 
                                                     MediaTypeNames.Application.Zip);  
                    msg.Attachments.Add(data);  
                }  
      
                return msg;  
            }  
      
            //Send the email using the SMTP server  
            private void Send(MailMessage message, EmailSendConfigure emailConfig)  
            {  
                SmtpClient client = new SmtpClient();  
                client.UseDefaultCredentials = false;  
                client.Credentials = new System.Net.NetworkCredential(
                                      emailConfig.ClientCredentialUserName, 
                                      emailConfig.ClientCredentialPassword);  
                client.Host = m_HostName;  
                client.Port = 25;  // this is critical
                client.EnableSsl = true;  // this is critical
      
                try  
                {  
                    client.Send(message);  
                }  
                catch (Exception e)  
                {  
                    Console.WriteLine("Error in Send email: {0}", e.Message);  
                    throw;  
                }  
                message.Dispose();  
            }  
      
        }  
      
        public class EmailSendConfigure  
        {  
            public string[] TOs { get; set; }  
            public string[] CCs { get; set; }  
            public string From { get; set; }  
            public string FromDisplayName { get; set; }  
            public string Subject { get; set; }  
            public MailPriority Priority { get; set; }  
            public string ClientCredentialUserName { get; set; }  
            public string ClientCredentialPassword { get; set; }  
            public EmailSendConfigure()  
            {  
            }  
        }  
      
        public class EmailContent  
        {  
            public bool IsHtml { get; set; }  
            public string Content { get; set; }  
            public string AttachFileName { get; set; }  
        }  
    }
    

    demo

    namespace EmailSender  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                string smtpServer = "smtp-mail.outlook.com";  
                SendEmail(smtpServer);  
            }  
      
            static void SendEmail(string smtpServer)  
            {  
                //Send teh High priority Email  
               EmailManager mailMan = new EmailManager(smtpServer);  
      
                EmailSendConfigure myConfig = new EmailSendConfigure(); 
                // replace with your email userName  
                myConfig.ClientCredentialUserName = "abc@outlook.com";
                // replace with your email account password
                myConfig.ClientCredentialPassword = "password!";   
                myConfig.TOs = new string[] { "user1@outlook.com" };  
                myConfig.CCs = new string[] { };  
                myConfig.From = "<YOUR_ACCOUNT>@outlook.com";  
                myConfig.FromDisplayName = "<YOUR_NAME>";  
                myConfig.Priority = System.Net.Mail.MailPriority.Normal;  
                myConfig.Subject = "WebSite was down - please investigate";  
      
                EmailContent myContent = new EmailContent();  
                myContent.Content = "The following URLs were down - 1. Foo, 2. bar";  
      
                mailMan.SendMail(myConfig, myContent);  
            }  
      
        }  
    }
    
    展开全文
  • C# outlook样式 工具条

    2012-07-31 12:49:41
    C#版本的outlook样式工具条,该工具条可是实现像微软outlook样式左侧的工具条
  • 我决定编写一个简单的C#控制台应用程序以提取它们,以减小PST文件的大小。 作者 该项目由Matthew Proctor 创建并维护,作为如何从Microsoft Outlook中提取附件的示例。 在哪里了解更多? 通过了解有关此项目的更...
  • .net c# outlook发送邀请功

    千次阅读 2015-06-03 15:57:07
    用.net c#语言做一个发送会议邀请到outlook并显示在日历上

    用.net c#语言做一个发送会议邀请到outlook并显示在日历上
    outlook日历(

    iCalendar

    )支持RFC5545标准 地址是https://rsync.tools.ietf.org/html/rfc5545(全英文)
    iCalendar维基百科上的解释:http://zh.wikipedia.org/wiki/ICalendar
    用c#开发可以选择用DDay.iCal库进行开发生成RRule格式发送下载地址:http://sourceforge.net/projects/dday-ical/ 
    也可以自己手动拼接iCalendar格式的字符串
    有关RRule的描述:http://www.kanzaki.com/docs/ical/rrule.html(全英文)
    关于此库对RRule格式的生成各解析地址为:http://blog.csdn.net/studyzy/article/details/11524627

    先来看一下我找的资料链接

    1.http://www.jiancool.com/article/71062631552/       用java通过iCal4j的一个例子
    2.http://imggt.com/technology/ical4j-cycle-reminder.html     同样用java通过iCal4j的一个例子 不过较第一个清析并有修改和取消
    3.http://blog.csdn.net/bestdowt1314/article/details/6573631 使用C#拼接的例子
    4.http://blog.csdn.net/e111r222/article/details/11554995   关于ics格式的一篇文章
    5.http://intl-bcds.iteye.com/blog/629470  同样用java通过iCal4j的一个例子
    ------------------------------------------------------------------------------------------------------------------------------------

    你可以通过编写代码对outlook进行创建 修改 删除 添加

    1.创建

      /// <summary>
            /// 创建
            /// </summary>
            public string createEmail()
            {
                StringBuilder sb = new StringBuilder();
                //头部 VCALENDAR
                {
                    sb.Append("BEGIN:VCALENDAR\nPRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN\nVERSION:2.0\nMETHOD:REQUEST\n");
                }
                //时区    
                {
                    sb.Append("BEGIN:VTIMEZONE\n");
                    sb.Append("TZID:中国标准时间\n");
                    sb.Append("TZID:Beijing, Chongqing, Hong Kong, Urumqi\n");
                    sb.Append("BEGIN:STANDARD\nDTSTART:16010101T000000\nTZOFFSETFROM:+0800\nTZOFFSETTO:+0800\n");
                    sb.Append("END:STANDARD\n");
                    sb.Append("END:VTIMEZONE\n");
                }
                //事件 VEVENT
                {
                    sb.Append("BEGIN:VEVENT\nATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;MAILTO=111@1111.com:\nDTEND:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T170000")) + "\nDTSTART:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T080000")) + "\nSUMMARY:活动\nUID:ewrewewoqprue@dfjewfdsfwe#$Q@$#@fwef1231\nDESCRIPTION:今天广场活动\nLOCATION:中国\nORGANIZER;CN=111@12222.com:\nSEQUENCE:0\n");
                    //提醒开始 VALARM
                    {   
                        sb.AppendLine("BEGIN:VALARM");//开始
                        sb.AppendLine("TRIGGER;RELATED=START:-PT00H5M00S");//触发
                        sb.AppendLine("ACTION:DISPLAY");
                        // sb.AppendLine("DURATION:PT10M");//每隔15分触发一次
                        // sb.AppendLine("REPEAT:4");//重复4次
                        sb.AppendLine("DESCRIPTION:REMINDER");//描述
                        sb.AppendLine("END:VALARM");//VALARM 结束
    
                    }
                    //事件结束
                    sb.Append("END:VEVENT\n");
                }
                //结束
                {
                    sb.Append("END:VCALENDAR");
                }
                return sb.ToString();
        }
    *需要注意的是:ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;MAILTO=111@111.com:这句话必需放在BEGIN:VEVENT之后否则发送之后在outlook显示会有问题 
    *MAILTO属性值后必需有":"(冒号)否则outlook将视为普通事件,不视为邀请处理
    *ORGANIZER组织者(属性为CN时)后有":"(冒号) outlook将视为与出席者必须同在 否则只会出现出席者的邮箱
    *一定要有组织者 和ATTENDEE的RSVP属性要为TRUE 设置METHOD为REQUEST
    *每一个VEVENT的uid都是唯一的,如果发送的多封邮件uid都相同那么outlook将视为一封
    *****特别注意的是一定要注意空格,一开始我怎么试都不成最后发现是多了空格

    2.修改

    /// <summary>
            /// 修改
            /// </summary>
            /// <returns></returns>
            public string modifyEmail()
            {
                StringBuilder sb = new StringBuilder();
                //头部 VCALENDAR
                {
                    sb.Append("BEGIN:VCALENDAR\nPRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN\nVERSION:2.0\nMETHOD:REQUEST\n");
                }
                //时区    
                {
                    sb.Append("BEGIN:VTIMEZONE\n");
                    sb.Append("TZID:中国标准时间\n");
                    sb.Append("TZID:Beijing, Chongqing, Hong Kong, Urumqi\n");
                    sb.Append("BEGIN:STANDARD\nDTSTART:16010101T000000\nTZOFFSETFROM:+0800\nTZOFFSETTO:+0800\n");
                    sb.Append("END:STANDARD\n");
                    sb.Append("END:VTIMEZONE\n");
                }
                //事件 VEVENT
                {
                    sb.Append("BEGIN:VEVENT\nATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;MAILTO=111@111.com:\nDTEND:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T200000")) + "\nDTSTART:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T080000")) + "\nSUMMARY:活动\nUID:ewrewewoqprue@dfjewfdsfwe#$Q@$#@fwef1231\nDESCRIPTION:今天广场活动\nLOCATION:中国\nORGANIZER;CN=111@222.com:\nSEQUENCE:1\n");
                    //提醒开始 VALARM
                    {
                        sb.AppendLine("BEGIN:VALARM");//开始
                        sb.AppendLine("TRIGGER;RELATED=START:-PT00H5M00S");//触发
                        sb.AppendLine("ACTION:DISPLAY");
                        // sb.AppendLine("DURATION:PT10M");//每隔15分触发一次
                        // sb.AppendLine("REPEAT:4");//重复4次
                        sb.AppendLine("DESCRIPTION:REMINDER");//描述
                        sb.AppendLine("END:VALARM");//VALARM 结束
    
                    }
                    //事件结束
                    sb.Append("END:VEVENT\n");
                }
                //结束
                {
                    sb.Append("END:VCALENDAR");
                }
                return sb.ToString();
            }

    *需要注意思的是:修改邀请的时候只需要保持uid一致即可(可选项SEQUENCE表示修改序列号 叠加的,实际测试可以对它不做任何修改保持原来的0表示未修改过 此时应该值为1 因为是根据上面做的第一次修改)
    *在这里我只修改了开始和结束时间

    3.删除(也就是取消邀请)

    /// <summary>
            /// 取消
            /// </summary>
            /// <returns></returns>
            public string cancelEmail()
            {
                StringBuilder sb = new StringBuilder();
                //头部 VCALENDAR
                {
                    sb.Append("BEGIN:VCALENDAR\nPRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN\nVERSION:2.0\nMETHOD:CANCEL\n");
                }
                //时区    
                {
                    sb.Append("BEGIN:VTIMEZONE\n");
                    sb.Append("TZID:中国标准时间\n");
                    sb.Append("TZID:Beijing, Chongqing, Hong Kong, Urumqi\n");
                    sb.Append("BEGIN:STANDARD\nDTSTART:16010101T000000\nTZOFFSETFROM:+0800\nTZOFFSETTO:+0800\n");
                    sb.Append("END:STANDARD\n");
                    sb.Append("END:VTIMEZONE\n");
                }
                //事件 VEVENT
                {
                    sb.Append("BEGIN:VEVENT\nATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;MAILTO=111@111.com:\nDTEND:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T200000")) + "\nDTSTART:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T080000")) + "\nSUMMARY:活动\nUID:ewrewewoqprue@dfjewfdsfwe#$Q@$#@fwef1231\nDESCRIPTION:今天广场活动\nLOCATION:中国\nORGANIZER;CN=111@222.com:\nSEQUENCE:2\n");
                    //提醒开始 VALARM
                    {
                        sb.AppendLine("BEGIN:VALARM");//开始
                        sb.AppendLine("TRIGGER;RELATED=START:-PT00H5M00S");//触发
                        sb.AppendLine("ACTION:DISPLAY");
                        // sb.AppendLine("DURATION:PT10M");//每隔15分触发一次
                        // sb.AppendLine("REPEAT:4");//重复4次
                        sb.AppendLine("DESCRIPTION:REMINDER");//描述
                        sb.AppendLine("END:VALARM");//VALARM 结束
    
                    }
                    //事件结束
                    sb.Append("END:VEVENT\n");
                }
                //结束
                {
                    sb.Append("END:VCALENDAR");
                }
                return sb.ToString();
            }

    *需要注意的是:取消邀请的时候只需要保持uid一致并设置METHOD:CANCEL即可(可选项SEQUENCE表示修改序列号 叠加的,实际测试可以对它不做任何修改保持原来的0表示未修改过 此时应该值为2 因为根据上面在取消时进行了修改)

    4.添加

    /// <summary>
            /// 添加
            /// </summary>
            /// <returns></returns>
            public string insertEmail()
            {
                StringBuilder sb = new StringBuilder();
                //头部 VCALENDAR
                {
                    sb.Append("BEGIN:VCALENDAR\nPRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN\nVERSION:2.0\nMETHOD:REQUEST\n");
                }
                //时区    
                {
                    sb.Append("BEGIN:VTIMEZONE\n");
                    sb.Append("TZID:中国标准时间\n");
                    sb.Append("TZID:Beijing, Chongqing, Hong Kong, Urumqi\n");
                    sb.Append("BEGIN:STANDARD\nDTSTART:16010101T000000\nTZOFFSETFROM:+0800\nTZOFFSETTO:+0800\n");
                    sb.Append("END:STANDARD\n");
                    sb.Append("END:VTIMEZONE\n");
                }
                //事件2 VEVENT
                {
                    sb.Append("BEGIN:VEVENT\nATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;MAILTO=111@111.com:\nDTEND:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150604T170000")) + "\nDTSTART:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150604T080000")) + "\nSUMMARY:6月4号活动\nUID:wqefasfewfoiweuj4123@#$#@$^*ewkorjweiofj\nDESCRIPTION:6月4号今天广场活动\nLOCATION:中国xxx\nORGANIZER;CN=111@222.com:\nSEQUENCE:0\n");
                    //提醒开始 VALARM
                    {
                        sb.AppendLine("BEGIN:VALARM");//开始
                        sb.AppendLine("TRIGGER;RELATED=START:-PT00H5M00S");//触发
                        sb.AppendLine("ACTION:DISPLAY");
                        // sb.AppendLine("DURATION:PT10M");//每隔15分触发一次
                        // sb.AppendLine("REPEAT:4");//重复4次
                        sb.AppendLine("DESCRIPTION:REMINDER");//描述
                        sb.AppendLine("END:VALARM");//VALARM 结束
    
                    }
                    //事件结束
                    sb.Append("END:VEVENT\n");
                }
                //事件1 VEVENT
                {
                    sb.Append("BEGIN:VEVENT\nATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;MAILTO=111@111.com:\nDTEND:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T170000")) + "\nDTSTART:" + (string.Format("{0:yyyyMMddTHHmmssZ}", "20150603T080000")) + "\nSUMMARY:活动\nUID:<span style="font-family: 'Open Sans';">ewrewewoqprue@dfjewfdsfwe#$Q@$#@fwef1231</span>\nDESCRIPTION:今天广场活动\nLOCATION:中国\nORGANIZER;CN=111@2222.com:\nSEQUENCE:0\n");
                    //提醒开始 VALARM
                    {
                        sb.AppendLine("BEGIN:VALARM");//开始
                        sb.AppendLine("TRIGGER;RELATED=START:-PT00H5M00S");//触发
                        sb.AppendLine("ACTION:DISPLAY");
                        // sb.AppendLine("DURATION:PT10M");//每隔15分触发一次
                        // sb.AppendLine("REPEAT:4");//重复4次
                        sb.AppendLine("DESCRIPTION:REMINDER");//描述
                        sb.AppendLine("END:VALARM");//VALARM 结束
    
                    }
                    //事件结束
                    sb.Append("END:VEVENT\n");
                }
    
                //结束
                {
                    sb.Append("END:VCALENDAR");
                }
                return sb.ToString();
            }
    *需要注意的是:添加第一种:(添加VEVENT节) 添加时要将新添加的放在前面并且uid不能为同一个(个人认为放在前面是因为:如果放在后面outlook发现第一个VEVENT的uid与之前的发送邀请的uid相同那么它会认为是同一个请求,此时不会将新的EVENT添加到原来的日历上)
    *添加第二种:添加只要重新发送一个邀请即可只要VEVENT节的uid不重复outlook就会在日历(仅限于此计算机栏目)上
    ------------------------------------------------------------------------------------------------------------------------------------

    接下来就是执行发送邮件的程序

    /// <summary>
            /// 发送邮件
            /// </summary>
            /// <param name="from">发送人邮件地址</param>
            /// <param name="fromname">发送人显示名称</param>
            /// <param name="to">发送给谁(邮件地址)</param>
            /// <param name="subject">主题</param>
            /// <param name="body">内容</param>
            /// <param name="username">邮件登录名</param>
            /// <param name="password">邮件密码</param>
            /// <param name="server">邮件服务器</param>
            public static void
               MySendMail(string from, string fromname, string to, string subject, string body, string username, string password, string server)
            {
                try
                {
                    //邮件发送类 
                    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
                    //是谁发送的邮件 
                    mail.From = new System.Net.Mail.MailAddress(from, fromname);
                    //发送给谁 
                    mail.To.Add(to);
                    //标题 
                    mail.Subject = subject;
                    //内容编码 
                    mail.BodyEncoding = Encoding.Default;
                    //发送优先级 
                    mail.Priority = System.Net.Mail.MailPriority.High;
                    //邮件内容 
                    mail.Body = body;
                    //是否HTML形式发送 
                    mail.IsBodyHtml = true;
                    //邮件服务器和端口 
                    System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(server, 25);
                    smtp.UseDefaultCredentials = true;
                    //指定发送方式 
                    smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                    //指定登录名和密码 
                    smtp.Credentials = new System.Net.NetworkCredential(username, password);
                    //能不能发送看到效果全靠它了
                    {
                        System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar");
                        contype.Parameters.Add("method", "REQUEST");
                        contype.Parameters.Add("charset", "UTF-8");
                        System.Net.Mail.AlternateView avCal = System.Net.Mail.AlternateView.CreateAlternateViewFromString(body, contype);
                        mail.AlternateViews.Add(avCal);
                    }
                    //超时时间
                    smtp.Timeout = 10000;
                    smtp.Send(mail);
                    mail.Dispose();
                    smtp.Dispose();
                }
                catch (Exception exp)
                {
                    throw exp;
                }
            }
    *需要注意的是不能将拼接成的字符串做为附件发过去,要以正文方式发送









    展开全文
  • C# outlook bar 代码 DLL

    2010-03-23 11:31:39
    自定义winform组件,直接编译DLL,可拖拽组件项,上下翻层,类似tree
  • C# outlook 操作代码

    千次阅读 2009-01-23 11:08:00
    Outlook对象模型结构如图1.31所示,最顶层的对象是Application,通过Application对象可以使用其他所有的Outlook对象,另外Application 是唯一可以用CreateOleObject函数创建的Outlook对象。下一个要说的是NameSpace ...

     Outlook对象模型结构如图1.31所示,最顶层的对象是Application,通过Application 对象可以使用其他所有的Outlook对象,另外Application 是唯一可以用CreateOleObject 函数创建的Outlook对象。下一个要说的是NameSpace 对象,它提供了对数据源的存取,在Outlook 98中MAPI消息存储是唯一的数据源。



      MAPIFolders集合对应一组MAPI文件夹,也就是一组MAPIFolder对象。每个MAPIFolder对象还包含一个Folders集 合,每个集合中还包含一个管理Item对象的Items集合。图1.32是一个Delphi程序,它显示了MAPIFolders集合以及个人文件夹中的 Folders集合和其中联系人目录的Items的内容。程序代码如下:



    图1.32

      procedure TForm1.OpenBtnClick(Sender: TObject);

      var

       OutlookApp, Mapi,

       Contacts, Personal : Variant;

       I: Integer;

      begin

       { 获取Outlook Application 对象 }

       OutlookApp := CreateOleObject('Outlook.Application');

       { 获取 MAPI NameSpace对象 }

       Mapi := OutlookApp.GetNameSpace('MAPI');

       { 遍历MAPI 目录集合并添加目录名到列表框中}

       for I := 1 to Mapi.Folders.Count do

       MapiList.Items.Add(Mapi.Folders(I).Name);

       { 获取个人文件夹的目录集合}

       Personal := Mapi.Folders('个人文件夹');

       { 遍历个人文件夹的目录,并添加目录名到列表框中去 }

       for I := 1 to Personal.Folders.Count do

       PersonalList.Items.Add(Personal.Folders(I).Name);

       { 获取联系人目录}

       Contacts := Personal.Folders('联系人');

       { 获取联系人目录中的联系人人名列表 }

       for I := 1 to Contacts.Items.Count do

       ContactsList.Items.Add(Contacts.Items(I).FullName);

       { 关闭 Outlook. }

       OutlookApp := Unassigned;

      end;

      这里我们像VB那样使用后期绑定来调用Outlook。CreateOleObject 使用Outlook.Application (Outlook的类名)作为参数调用加载Outlook服务器并返回一个对Application对象的引用。通过Application对象可以获得 对其他Outlook对象的引用。调用Application对象的GetNameSpace方法会返回NameSpace对象(注意调用参数为 MAPI)。通过NameSpace 对象,代码遍历了MAPIFolders 集合然后添加了每个目录的名字到MapiList列表框。

      正如在图1.32中看到的,MAPIFolders集合中包含有一个个人文件夹,接下来代码就获得了对个人文件夹的引用Personal := Mapi.Folders('个人文件夹');然后是再用一个循环获得个人文件夹中的全部目录名,最后是获得联系人目录,并由Items 集合获得全部联系人目录中的人名(通过FullName属性获得)。

      很明显要想掌握控制Outlook的方法,我们必须清楚Outlook的对象继承关系以及每个对象的属性、方法和事件。Outlook提供了一个帮助文件VBAOUTL.HLP,其中包括了相关信息。

      下面的代码演示了如何搜索联系人目录,并把内容复制到一个数据库中:

      procedure TLoadTableForm.LoadBtnClick(Sender: TObject);

      var

       OutlookApp, Mapi,

       ContactItems, CurrentContact: Variant;

      begin

       OutlookApp := CreateOleObject('Outlook.Application');

       Mapi := OutlookApp.GetNameSpace('MAPI');

       { 获取联系人目录的Items集合 }

       ContactItems := Mapi.Folders('个人文件夹').Folders('联系人').Items;

       { 加载到数据库中 }

       with ContactTable do

       begin

        EmptyTable;

        Open;

        DisableControls;

        CurrentContact := ContactItems.Find('[CompanyName] = ' +

        QuotedStr('Borland International'));

        while not VarIsEmpty(CurrentContact) do

        begin

         Insert;

         FieldByName('EntryId').AsString :=

         CurrentContact.EntryId;

         FieldByName('LastName').AsString :=

         CurrentContact.LastName;

         FieldByName('FirstName').AsString :=

         CurrentContact.FirstName;

         FieldByName('CompanyName').AsString :=

         CurrentContact.CompanyName;

         FieldByName('BusAddrStreet').AsString :=

         CurrentContact.BusinessAddressStreet;

         FieldByName('BusAddrPOBox').AsString :=

         CurrentContact.BusinessAddressPostOfficeBox;

         FieldByName('BusAddrCity').AsString :=

         CurrentContact.BusinessAddressCity;

         FieldByName('BusAddrState').AsString :=

         CurrentContact.BusinessAddressState;

         FieldByName('BusAddrPostalCode').AsString :=

         CurrentContact.BusinessAddressPostalCode;

         FieldByName('BusinessPhone').AsString :=

         CurrentContact.BusinessTelephoneNumber;

         Post;

         CurrentContact := ContactItems.FindNext;

        end; // while

        EnableControls;

       end; // with

       { 关闭Outlook }

       OutlookApp := Unassigned;

      end;

      上面代码运行的基本步骤同前面的一样,不同之处在于先获取联系人目录的Items集合,然后调用Find 方法根据属性的组合来定位集合中特殊的项目,比如:

      CurrentContact := ContactItems.Find(' [CompanyName] = ' +

              QuotedStr('Borland International'));

      就是查找CompanyName 属性为Borland International的联系人。如果没有找到匹配的联系人,CurrentContact就为空值。while循环利用FindNext来遍历并匹配联系人,并把联系人的全部属性插入到数据库中。

      创建新的联系人目录和记录也非常简单,下面的代码可以复制全部的Borland公司雇员联系信息到一个新的目录:

      procedure TCreateFolderFrom.CreateBtnClick(Sender: TObject);

      const

       olFolderContacts = 10;

       olContactItem = 2;

      var

       OutlookApp, Mapi,

       NewContact, BorlandContacts,

       ContactItems, CurrentContact:  Variant;

       I, ToRemove:     Integer;

      begin

       OutlookApp := CreateOleObject('Outlook.Application');

       Mapi := OutlookApp.GetNameSpace('MAPI');

       ContactItems := Mapi.Folders('个人文件夹').Folders('联系人').Items;

       { 删除测试文件夹 }

       ToRemove := 0;

       for I := 1 to Mapi.Folders('Personal Folders').Folders.Count do

       if Mapi.Folders('个人文件夹').Folders(I).Name ='Borland 联系人' then

       begin

        ToRemove := I;

        Break;

       end; // if

       if ToRemove <> 0 then

        Mapi.Folders('Personal Folders').Folders.Remove(ToRemove);

        { 创建新的文件夹 }

        Mapi.Folders('个人文件夹').Folders.Add('Borland 联系人', olFolderContacts);

        BorlandContacts := Mapi.Folders('Personal Folders').Folders('Borland Contacts');

        { 添加联系人到新的目录 }

        CurrentContact := ContactItems.Find('[CompanyName] = ' +

          QuotedStr('Borland International'));

       while not VarIsEmpty(CurrentContact) do

       begin

        { 添加新的项目 }

        NewContact := BorlandContacts.Items.Add;

        { 设定属性 }

        NewContact.FullName := 'John Doe';

        NewContact.LastName := CurrentContact.LastName;

        NewContact.FirstName := CurrentContact.FirstName;

        NewContact.CompanyName := CurrentContact.CompanyName;

        NewContact.BusinessAddressStreet :=

        CurrentContact.BusinessAddressStreet;

        NewContact.BusinessAddressPostOfficeBox :=

        CurrentContact.BusinessAddressPostOfficeBox;

        NewContact.BusinessAddressCity :=

        CurrentContact.BusinessAddressCity;

        NewContact.BusinessAddressState :=

        CurrentContact.BusinessAddressState;

        NewContact.BusinessAddressPostalCode :=

        CurrentContact.BusinessAddressPostalCode;

        NewContact.BusinessTelephoneNumber :=

        CurrentContact.BusinessTelephoneNumber;

        { 保存记录 }

        NewContact.Save;

        { 查找联系人目录中下一个记录}

        CurrentContact := ContactItems.FindNext;

       end; // while

       OutlookApp := Unassigned;

      end;

      上面的代码流程就是先在Folders 集合中查找Borland 联系人目录,如果找到了就调用Folders 的Remove方法删除之。然后调用Folders 对象的Add 方法创建一个新的Borland 联系人文件夹。Add方法需要两个参数:第一个是要创建的目录名;第二个是文件夹类型(可以是olFolderCalendar、 olFolderContacts、olFolderInbox、olFolderJournal、olFolderNotes或 olFolderTasks类型)。

      接下来调用联系人目录的Items对象的Find方法来定位Borland雇员的信息记录。然后调用新建的Borland联系人目录的Items对象的Add方法来添加在联系人目录中找到的记录。最后调用新添记录的Save方法来保存添加的信息。

    其他Outlook对象

      个人文件夹的Folders 集合还包括下列文件夹:已删除邮件;收件箱;发件箱;已发送邮件;日历;日记;便笺;任务;草稿。

      我们可以使用类似的方法来操作任意对象的Items 集合,它们的区别只是集合项目的属性不同,下面的代码演示了如何把约会中的全部起始时间定为大于99/04/27,并且把全天约会的信息复制到数据库的方 法。注意这里使用比前面要复杂的查找表达式,查找表达式支持>,<,>=,<=,=和<>操作符以及and,or和 not逻辑操作符。

      procedure TLoadTableForm.LoadBtnClick(Sender: TObject);

      var

       OutlookApp, Mapi,

       ApptItems, CurrentAppt: Variant;

      begin

       OutlookApp := CreateOleObject('Outlook.Application');

       Mapi := OutlookApp.GetNameSpace('MAPI');

       pptItems := Mapi.Folders('Personal Folders').Folders('Calendar').Items;

       with ApptTable do

       begin

        EmptyTable;

        Open;

        DisableControls;

        CurrentAppt := ApptItems.Find('[Start] > ' +

          "4/27/99" and [AllDayEvent] = True');

        while not VarIsEmpty(CurrentAppt) do

        begin

         Insert;

         FieldByName('Start').AsDateTime := CurrentAppt.Start;

         FieldByName('Subject').AsString := CurrentAppt.Subject;

         FieldByName('End').AsDateTime := CurrentAppt.End;

         FieldByName('Busy').AsBoolean := CurrentAppt.BusyStatus;

         Post;

         CurrentAppt := ApptItems.FindNext;

        end; // while

        EnableControls;

       end; // with

       OutlookApp := Unassigned;

      end;

    邮件查看器

      毫无疑问,Outlook最大的用处还是在于它的邮件处理功能,通过自动化可以方便地使用Outlook强大的功能,下面就来编写一个邮件查看器。首 先新建一个项目,然后在窗体上放置一个TOutLine和 TButton。接着声明一个TItem类用来保存对邮件的引用,类定义如下:

      TItem = class(TObject)

       Letter: OleVariant;

       name: string;

      end;

      在窗体类声明的public部分添加下列变量:

      public

       { Public declarations }

       OlApp, NameSpace, root: OleVariant;

       List: Tlist;

       Item: TItem;

       icount: integer;

      end;

      然后在窗体的Oncreate事件中初始化TList用来维护邮件列表:

      procedure TForm1.FormCreate(Sender: TObject);

      begin

       List := TList.Create;

       Item := TItem.Create;

       icount := 0;

      end;

      然后编写Button的onClick事件,来建立文件夹树视图:

      procedure TForm1.Button1Click(Sender: TObject);

       procedure scan(ol: TOutline; root: OleVariant; s: string);

      var

       i, j, k: integer;

       bcount, rcount: integer;

       branch, MAPIFolder: olevariant;

       line: string;

      begin

       line := '';

       rcount := root.count;

       for i := 1 to rcount do

       begin

        line := s + root.item[i].name;

        ol.Lines.Add(line);

        List.Add(TItem.Create);

        Item := List.items[List.count - 1];

        Item.name := 'Folder';

        branch := root.item[i].folders;

        bcount := branch.count;

        MAPIFolder := Namespace.GetFolderFromId(root.item[i].EntryID,

         root.item[i].StoreID);

        if MAPIFolder.Items.count > 0 then

        for j := 1 to MAPIFolder.Items.count do

        begin

         ol.Lines.Add(s + ' ' + MAPIFolder.Items[j].subject);

         List.Add(TItem.Create);

         Item := List.items[List.count - 1];

         Item.name := 'File';

         Item.Letter := MAPIFolder.Items[j];

        end;

        if bcount > 0 then

        begin

         scan(ol, branch, s + ' ');

        end;

       end;

      end;

      begin

       oline_outlook.Lines.Clear;

       OlApp := CreateOleObject('Outlook.Application');

       Namespace := OlApp.GetNameSpace('MAPI');

       root := Namespace.folders;

       scan(oline_outlook, root, '');

      end;

      首先获得文件夹集合,然后在for循环中扫描每个子文件夹,添加信息,如果还有下级子目录,就递归调用:

       if bcount > 0 then

       begin

        scan(ol, branch, s + ' ');

       end;

      当双击时,需要显示邮件内容,编写OutLine的doubleClick事件,用Showmessage显示邮件内容:

      procedure TForm1.oLine_OutLookDblClick(Sender: TObject);

      begin

       Item := List.items[oline_outlook.SelectedItem - 1];

       //body对应邮件内容

       if Item.name = 'File' then ShowMessage(Item.Letter.Body);

      end;

      最后不能忘了在退出程序时释放资源,编写窗体的OnCloseQuery事件处理函数:

      procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

      var

       i: integer;

      begin

       for i := List.Count - 1 downto 0 do

       begin

        Item := List.Items[i];



    图1.33

        Item.Free;

       end;

       List.Free;

      end;

      最后的程序运行结果如图1.33所示。

    发送邮件

      下面代码演示了如何发送带附件的邮件:

      const

       olByValue = 1;

       olByReference = 4;

       olEmbeddedItem = 5;

       olOLE = 6;

       olMailItem = 0;

       olAppointmentItem = 1;

       olContactItem = 2;

       olTaskItem = 3;

       olJournalItem = 4;

       olNoteItem = 5;

       olPostItem = 6;

       olFolderDeletedItems = 3;

       olFolderOutbox = 4;

       olFolderSentMail = 5;

       olFolderInbox = 6;

       olFolderCalendar = 9;

       olFolderContacts = 10;

       olFolderJournal = 11;

       olFolderNotes = 12;

       olFolderTasks = 13;

      function SendMailWithAttachments(Email, Subject : string; Body : Widestring ; Filename : string): boolean;

      var

       outlook : variant;

       item : variant;

      begin

       try

        outlook := CreateOLEObject('outlook.application');

        try

         item := outlook.CreateItem(olMailItem);

         item.Subject := Subject;

         item.Body  := Body;

         item.Attachments.Add(FileName,1,1,FileName);

         item.To := email;

         item.Send;

         finally

        // 确保Outlook不保持打开状态

        outlook.quit;

       end;

       except

        result := false;

        exit;

       end;

       result := true;

      end;

      函数用法:

      SendMailWithAttachments('Info@outlook.com', 'SendMail function', 'Test !', 'd:/test.doc');

      注意上面我们使用CreateItem来创建一个mail项目,olMailItem等常数是从office带的帮助中复制过来的。

    备份邮件中的附件

      下面的函数根据发送者名字或mail地址,备份相应的附件到指定的目录下,并可根据输入参数MailDelete删除相应邮件:

      function ManageAttachments(SendersName, AttachmentPath : string; MailDelete : boolean):boolean;

      var

       oApp : variant;

       oNs : variant;

       oFolder : variant;

       oMsg : variant;

       AtC : variant;

       AttFilename : variant;

       filename : string;

       CheckSender : string;

       Counter : integer;

       MailCounter : integer;

      begin

       try

        oApp := CreateOLEObject('outlook.application');

        try

         oNs := oApp.GetNamespace('MAPI');

         //收件箱

         ofolder := oNS.GetDefaultFolder(olFolderInbox);

         MailCounter := 1;

         // 如果有邮件在收件箱中

         if ofolder.items.count > 0 then

         begin

          repeat

          //获得第一封信

          oMsg := ofolder.items(MailCounter);

          //检查发信人姓名或地址

          if CheckSender = SendersName then

          begin

           // 检查附件数

           atc := oMsg.Attachments.count;

           if atc > 0 then

           begin

            // 保存全部附件

            for Counter := 1 to atc do

            begin

             AttFilename := oMsg.Attachments.item(Counter).filename;

             filename:= ncludeTrailingBackslash(AttachmentPath) +AttFilename;

             oMsg.Attachments.Item(Counter).SaveAsFile(filename);

            end;

           end;

           if MailDelete then

           begin

            oMsg.delete;

            dec(MailCounter);

           end;

          end;

          // 获取下一封信

          inc(MailCounter);

          until MailCounter > ofolder.items.count;

         end;

         finally

         oApp.quit;

        end;

        except

        result := false;

        exit;

       end;

       result := true;

      end;

      用法:

      ManageAttachments('info@outlook.com','F:/test',false);

    结论

      总之清楚地了解Outlook的对象体系后,我们就可以通过自动化轻松地控制Outlook,实现提取各项信息,添加新的用户,发送邮件信息等各项强大的功能。

    展开全文
  • c# Outlook 收发邮件

    2008-08-28 18:06:00
    Outlook对象模型结构如图1.31所示,最顶层的对象是Application,通过Application 对象可以使用其他所有的Outlook对象,另外Application 是唯一可以用CreateOleObject 函数创建的Outlook对象。下一个要说的是...
  • 如题,哪位大侠给个代码,谢了!
  • C#调用Outlook发送邮件

    2021-03-16 01:03:18
    摘要:C#源码,网络相关,发邮件,Outlook C#调用Outlook发送邮件,其内有邮件格式输入判断,邮件格式输入不正确禁止发送邮件,邮件格式判断模块你可用在其它的C#程序中。
  • outlook c# winform

    2009-08-28 20:05:31
    outlook c# winform C#操作OUTLOOK
  • C#实现outlook日历功能

    热门讨论 2009-08-27 12:18:35
    C#实现outlook日历功能C#实现outlook日历功能 源码。
  • C#操作Outlook

    千次阅读 2013-01-14 12:11:47
    //引用Microsoft.Office.Interop.Outlook.dll using Outlook = Microsoft.Office.Interop.Outlook; using Microsoft.Office.Interop.Outlook; //创建Application Outlook.Application myOutlookApp = new ...
  • c#仿outLook折叠菜单

    2011-09-06 14:19:50
    c#仿outLook折叠菜单 菜单数据从XML文件中读取 高度自适应浏览器
  • C#获得outlook信息

    2008-06-16 13:11:07
    C#如何获得本机outlook的收件箱,发件箱等信息
  • C#中调出Outlook的邮件客户端,像新建一个邮件样,但它可以按程序员的意愿把to,cc,bcc等等信息自动填入。
  • vsto outlook C#

    2013-09-01 14:12:02
    vsto outlook C#
  • C#实现outlook自动签名

    2019-09-30 04:30:09
    Outlook下实现自动签名的方式 ...在此介绍一种C#下实现的方式,目前确定的outlook版本为2007以上,2003的未测试 通过vs2012新建office->2010->outlook2010外接程序 的解决方案 步骤如下: ...
  • 使用 C# 进行 Outlook 2003 编程 原文:使用 C# 进行 Outlook 2003 编程摘要: 本文介绍了 Microsoft Outlook 2003 对象模型介,并探讨了如何使用 C# 编程语言生成 Outlook 识别的应用程序和 Outlook ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 659
精华内容 263
关键字:

c#outlook

c# 订阅