使用c#给outlook添加任务、发送邮件

简介: 原文: 使用c#给outlook添加任务、发送邮件     c#在使用outlook提供的一些API时,需要将outlook相关的com引用到项目中。 具体方法就是用vs打开工程后,在工程上添加引用,在com选项卡上,选择Microsoft Outlook 12.0 Object Library,如果安装的不是outlook2007,则对应com的版本不一样。
原文: 使用c#给outlook添加任务、发送邮件

    c#在使用outlook提供的一些API时,需要将outlook相关的com引用到项目中。 具体方法就是用vs打开工程后,在工程上添加引用,在com选项卡上,选择Microsoft Outlook 12.0 Object Library,如果安装的不是outlook2007,则对应com的版本不一样。注意下面描述的方法是在命令行模式或者winform模式下的,不是web模式下的。 在web模式下使用的方法稍有不同,不在此处讨论。 

  •     给outlook添加任务,代码如下:
  1.         /// <summary>
  2.         /// 给outlook添加一个新的任务
  3.         /// </summary>
  4.         /// <param name="subject">新任务标题</param>
  5.         /// <param name="body">新任务正文</param>
  6.         /// <param name="dueDate">新任务到期时间</param>
  7.         /// <param name="importance">新任务优先级</param>
  8.         public static void AddNewTask(string subject, string body, DateTime dueDate, OlImportance importance)
  9.         {
  10.             try
  11.             {
  12.                 Application outLookApp = new Application();
  13.                 TaskItem newTask = (TaskItem)outLookApp.CreateItem(OlItemType.olTaskItem);
  14.                 newTask.Body = body;
  15.                 newTask.Subject = subject;
  16.                 newTask.Importance = importance;
  17.                 newTask.DueDate = dueDate;
  18.                 newTask.Save();
  19.             }
  20.             catch(System.Exception e)
  21.             {
  22.                 throw e;
  23.             }
  24.         }
  • 最简单的发送邮件
    下面是一个最简单的发送邮件的例子,在该例子中,只能给一个邮箱地址发邮件,而且还不能够添加附件。代码如下:

  1.         /// <summary>
  2.         /// 一个最简单的发送邮件的例子。同步方式。只支持发送到一个地址,而且没有附件。
  3.         /// </summary>
  4.         /// <param name="server">smtp服务器地址</param>
  5.         /// <param name="from">发送者邮箱</param>
  6.         /// <param name="to">接收者邮箱</param>
  7.         /// <param name="subject">主题</param>
  8.         /// <param name="body">正文</param>
  9.         /// <param name="isHtml">正文是否以html形式展现</param>
  10.         public static void SimpleSeedMail(string server, string from, string to, string subject, string body, bool isHtml)
  11.         {
  12.             try
  13.             {
  14.                 MailMessage message = new MailMessage(from, to, subject, body);
  15.                 message.IsBodyHtml = isHtml;
  16.                 SmtpClient client = new SmtpClient(server);
  17.                 client.Credentials = new NetworkCredential("发送者邮箱用户名(即@前面的东东)","发送者邮箱密码");
  18.                 client.Send(message);
  19.             }
  20.             catch (System.Exception e)
  21.             {
  22.                 throw e;
  23.             }
  24.         }
  • 向多人发邮件,并支持发送多个附件
    代码如下:
  1.         /// <summary>
  2.         /// 支持向多人发邮件,并支持多个附件的一个发送邮件的例子。
  3.         /// </summary>
  4.         /// <param name="server">smtp服务器地址</param>
  5.         /// <param name="from">发送者邮箱</param>
  6.         /// <param name="to">接收者邮箱,多个接收者以;隔开</param>
  7.         /// <param name="subject">邮件主题</param>
  8.         /// <param name="body">邮件正文</param>
  9.         /// <param name="mailAttach">附件</param>
  10.         /// <param name="isHtml">邮件正文是否需要以html的方式展现</param>
  11.         public static void MultiSendEmail(string server, string from, string to, string subject, string body, ArrayList mailAttach, bool isHtml)
  12.         {
  13.             MailMessage eMail = new MailMessage();
  14.             SmtpClient eClient = new SmtpClient(server);
  15.             eClient.Credentials = new NetworkCredential("发送者邮箱用户名(即@前面的东东)""发送者邮箱密码");
  16.             eMail.Subject = subject;
  17.             eMail.SubjectEncoding = Encoding.UTF8;
  18.             eMail.Body = body;
  19.             eMail.BodyEncoding = Encoding.UTF8;
  20.             eMail.From = new MailAddress(from);
  21.             string[] arrMailAddr;
  22.             try
  23.             {
  24.                 #region 添加多个收件人
  25.                 eMail.To.Clear();
  26.                 if (!string.IsNullOrEmpty(to))
  27.                 {
  28.                     arrMailAddr = to.Split(';');
  29.                     foreach (string strTo in arrMailAddr)
  30.                     {
  31.                         if (!string.IsNullOrEmpty(strTo))
  32.                         {
  33.                             eMail.To.Add(strTo);
  34.                         }
  35.                     }
  36.                 }
  37.                 #endregion
  38.                 #region 添加多个附件
  39.                 eMail.Attachments.Clear();
  40.                 if (mailAttach != null)
  41.                 {
  42.                     for (int i = 0; i < mailAttach.Count; i++)
  43.                     {
  44.                         if (!string.IsNullOrEmpty(mailAttach[i].ToString()))
  45.                         {
  46.                             eMail.Attachments.Add(new System.Net.Mail.Attachment(mailAttach[i].ToString()));
  47.                         }
  48.                     }
  49.                 }
  50.                 #endregion
  51.                 #region 发送邮件
  52.                 eClient.Send(eMail);
  53.                 #endregion
  54.             }
  55.             catch (System.Exception e)
  56.             {
  57.                 throw e;
  58.             }
  59.         }//end of method
  • 异步发送邮件的一个例子。以163的smtp服务器为例。
    代码如下:
  1. using System;
  2. using System.Net;
  3. using System.Net.Mail;
  4. using System.Net.Mime;
  5. using System.Threading;
  6. using System.ComponentModel;
  7. namespace Examples.SmptExamples.Async
  8. {
  9.     public class SimpleAsynchronousExample
  10.     {
  11.         static bool mailSent = false;
  12.         private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
  13.         {
  14.             // Get the unique identifier for this asynchronous operation.
  15.             String token = (string)e.UserState;
  16.             if (e.Cancelled)
  17.             {
  18.                 Console.WriteLine("[{0}] Send canceled.", token);
  19.             }
  20.             if (e.Error != null)
  21.             {
  22.                 Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
  23.             }
  24.             else
  25.             {
  26.                 Console.WriteLine("Message sent.");
  27.             }
  28.             mailSent = true;
  29.         }
  30.        
  31.         public static void Main(string[] args)
  32.         {
  33.             SmtpClient client = new SmtpClient("smtp.163.com");
  34.             client.Credentials = client.Credentials = new NetworkCredential("发送者邮箱用户名""发送者邮箱密码");
  35.             MailAddress from = new MailAddress("softwarezxj@163.com");
  36.             MailAddress to = new MailAddress("lastBeachhead@gmail.com");
  37.             MailMessage message = new MailMessage(from, to);
  38.             message.Body = "这是一封测试异步发送邮件的邮件 ";
  39.             message.BodyEncoding = System.Text.Encoding.UTF8;
  40.             message.Subject = "测试异步发邮件";
  41.             message.SubjectEncoding = System.Text.Encoding.UTF8;
  42.             
  43.             // 设置回调函数
  44.             client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
  45.             // SendAsync方法的第二个参数可以是任何对象,这里使用一个字符串标识本次发送
  46.             //传入的该对象可以在邮件发送结束触发的回调函数中访问到。
  47.             string userState = "test message1";
  48.             client.SendAsync(message, userState);
  49.             Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
  50.             string answer = Console.ReadLine();
  51.             
  52.             if (answer.StartsWith("c") && mailSent == false)
  53.             {
  54.                 client.SendAsyncCancel();
  55.             }
  56.             //清理工作
  57.             message.Dispose();
  58.             Console.WriteLine("Goodbye.");
  59.             Console.ReadLine();
  60.         }
  61.     }
  62. }

目录
相关文章
|
6月前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
248 3
|
SQL 开发框架 算法
C#多线程开发-任务并行库04
C#多线程开发-任务并行库04
166 0
C#多线程开发-任务并行库04
|
API C#
C#多线程(14):任务基础②
C#多线程(14):任务基础②
224 0
C#多线程(14):任务基础②
|
存储 安全 Java
C# 之 异步多线程任务相关以及概念使用介绍
C#异步多线程Task的介绍和使用,从相关关键字到使用示例,详细解析Task和TaskCompletionSource的使用方法。
545 0
C# 之 异步多线程任务相关以及概念使用介绍
|
存储 API C#
C#多线程(15):任务基础③
任务基础一共三篇,本篇是第三篇,之后开始学习异步编程、并发、异步I/O的知识。 本篇会继续讲述 Task 的一些 API 和常用的操作。
201 0
|
监控 安全 Java
C#多线程(13):任务基础①
C#多线程(13):任务基础①
174 0
|
C#
C#编程任务: 把工作交给别人并等待其执行完成
生活中有这样的场景:  我有一件事情需要别人帮忙去办, 但是别人也很忙呀, 所以我只能把任务记载他的任务清单上, 等他一个个扫下来扫到我的并且完成之后再来告诉我. 这其实是一个多线程的问题. 我是线程A, 他是线程B, 这里我是生产者, 他是消费者.
1058 0