首页 > 代码库 > 使用c#给outlook添加任务、发送邮件

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

原文: 使用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. }

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