原文:使用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. public static void Main(string[] args)
  31. {
  32. SmtpClient client = new SmtpClient("smtp.163.com");
  33. client.Credentials = client.Credentials = new NetworkCredential("发送者邮箱用户名", "发送者邮箱密码");
  34. MailAddress from = new MailAddress("softwarezxj@163.com");
  35. MailAddress to = new MailAddress("lastBeachhead@gmail.com");
  36. MailMessage message = new MailMessage(from, to);
  37. message.Body = "这是一封测试异步发送邮件的邮件 ";
  38. message.BodyEncoding = System.Text.Encoding.UTF8;
  39. message.Subject = "测试异步发邮件";
  40. message.SubjectEncoding = System.Text.Encoding.UTF8;
  41. // 设置回调函数
  42. client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
  43. // SendAsync方法的第二个参数可以是任何对象,这里使用一个字符串标识本次发送
  44. //传入的该对象可以在邮件发送结束触发的回调函数中访问到。
  45. string userState = "test message1";
  46. client.SendAsync(message, userState);
  47. Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
  48. string answer = Console.ReadLine();
  49. if (answer.StartsWith("c") && mailSent == false)
  50. {
  51. client.SendAsyncCancel();
  52. }
  53. //清理工作
  54. message.Dispose();
  55. Console.WriteLine("Goodbye.");
  56. Console.ReadLine();
  57. }
  58. }
  59. }

使用c#给outlook添加任务、发送邮件的更多相关文章

  1. 在c++中使用Outlook Object Model发送邮件

    一.Outlook Object Model简介 Outlook Object Model(OOM)是outlook为开发者提供的一个COM组件,我们可以在程序中使用它来发送邮件.管理邮箱等.相关介绍 ...

  2. outlook添加邮箱账户时,测试成功,下一步显示请求失败

    今天在给公司同事添加邮箱账户时,全部设置正常,测试也成功了,但是点击下一步时,出现了请求失败的提示.     1.  看到这个提示,我首先重启了一下outlook,发现进去添加还是不行  2.重启了电 ...

  3. python 操作excel格式化及outlook正文,发送邮件

    import requests import time import os import arrow import pandas as pd import pandas.io.formats.exce ...

  4. outlook撤回已发送邮件

    官方教程参考: https://support.office.com/zh-cn/article/%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%90%8E%E6%92 ...

  5. [Outlook] Outlook2013能收但无法发送邮件-0x800CCC13, 0x800CCC0B, 0x8004210B

    [20140704更新],在公司收邮件的时候,问题再次出现,错误码:0x800ccc13,按照以下方法测试成功: 1. 按照以前办法,反复重启,失败 2. 按照以下参考连接A中的步骤 a. Click ...

  6. Delphi 发送邮件 通过Office Outlook

    Delphi 发送邮件 通过Office Outlook 网上搜到的Delphi邮件发送系统,绝大多数是使用SMTP协议来发送. 但是事实上它们已经过时了,大多数邮件服务器已经屏蔽了Delphi In ...

  7. UiPath工具取得网页上面的数据,写入到csv,Outlook邮件发送

    问题描述: 想取得网页上面的股票价格,之后写入到csv文本里面之后添加附件发送邮件. 解决方法: 利用UIPath工具来取得数据,之后写入再发送. 具体步骤: 1.打开网页,之后找到所显示的股票行情的 ...

  8. [原创] - C#编程大幅提高OUTLOOK的邮件搜索能力!

    使用OUTLOOK, 你有没有遇到过上图的问题? 多达18419封邮件! 太多了, 每次想找一个邮件都非常耗时, 想办法解决这个问题成了一件非常紧迫的事情. 利用MS Search当然可以, 但是它太 ...

  9. - C#编程大幅提高OUTLOOK的邮件搜索能力!

    原文:[原创] - C#编程大幅提高OUTLOOK的邮件搜索能力! 使用OUTLOOK, 你有没有遇到过上图的问题? 多达18419封邮件! 太多了, 每次想找一个邮件都非常耗时, 想办法解决这个问题 ...

随机推荐

  1. 谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题

    使用ZooKeeper学生们应该看到一个参数.它是ZooKeeper超过一半的群集必须节点(Majority)可用的.外来人才在整个集群中可用.在大多数情况下,这种说法是正确的. 谈论这篇文章背后的原 ...

  2. SCM文章4教训:定时器共阴极LED动态显示屏

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva290ZWlfODhfbHVsdWNfNjY=/font/5a6L5L2T/fontsize/400/fil ...

  3. SQLServer 2012异常问题(二)--由安装介质引发性能问题

    原文:SQLServer 2012异常问题(二)--由安装介质引发性能问题 问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后 ...

  4. jquery中 $ 和 jQuery 及 $() 的差别

    用过jquery的人都知道,jquery有两种使用方法,一种是$,另一种是jQuery,那么这两种方式在使用上有什么差别呢? 答案是这两种使用方法没什么差别,仅仅是别名而已,用$要比jQuery简短一 ...

  5. 【剑指offer】最大和连续子阵列

    个開始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组測试数据包括两行. 第一行为一个整数n(0<=n<=100000),当n=0时,输入结束.接下去的一行包括n个整数 ...

  6. 简单的工具LogUtil、Toast

    简单的工具LogUtil.Toast     能够用了 import android.content.Context; import android.util.Log; import android. ...

  7. Sonar相关汇总

    http://www.sonarqube.org/downloads/ http://docs.sonarqube.org/display/SONAR/Documentation/ 公司前段时间推动项 ...

  8. IOS View传统的价值观之间

    1.采用NSUserDefaults通过值,这样的方法不限于传送少量数据的: 比方你要传一个float的值.在须要传的时候用 [[NSUserDefaults standardUserDefaults ...

  9. 数组排序、递归——(Java学习笔记二)

    升序:      选择排序:         选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置         先出现最小值,最后出现最大值. public stat ...

  10. ACM算法

      一.数论算法 1.求两数的最大公约数 2.求两数的最小公倍数 3.素数的求法 A.小范围内判断一个数是否为质数: B.判断longint范围内的数是否为素数(包含求50000以内的素数表): 二. ...