率这篇文章

我不记得有多少次我遇到过这样的需求:以编程方式从Exchange服务器邮箱读取电子邮件,并根据新消息的出现采取一些操作。读取电子邮件的组件可以读取邮件内容,解析其内容并将数据传输到其他下游系统。在这个博客中,我将看看我们可以做到这一点的一种方法。

目标

在我的场景中,需要开发一个从交换邮箱中检索邮件的程序,根据具体标准,根据通讯组列表标识符向多个用户发送电子邮件。以下是步骤,我打算:

  1. 使用有效的呼叫机制根据给定的条件轮询新电子邮件
  2. 阅读任何新的电子邮件信息
  3. 将收到的电子邮件转换为要发送到列表的SMTP友好邮件。

解决方案

我在.NET中开发了我的解决方案,使用c#作为首选语言,作为轮询端点挂接到ExchangeWeb服务(EWS)管理的API中,并使用简单的SMTP端点发送邮件。让我们更详细地看看解决方案。

先决条件/准备

  1. 打开Visual Studio并创建新的控制台应用程序
  2. 从NuGet包管理器安装Exchange Web Services (EWS)托管API
  3. 添加System.Configuration的引用(以支持应用程序配置)。

创建到给定邮箱的连接

创建到Exchange邮箱的连接时,我们需要知道源Exchange环境的版本。要连接的代码将根据目标环境而有所不同。在写作的时候,EWS托管API支持以下Exchange服务器版本:

  1. Exchange 2007 SP1
  2. Exchange 2010(公司SP1和SP2)
  3. 交换2013(公司。SP1)

如果要使用最新版本(Exchange 2013 SP1)与Office 365中的Exchange Online连接,请使用最新版本。下面是连接并获取附加到Office 365邮箱的服务实例的代码。

请记住,要启用SSL通信,请使用自动发现重定向urlvalidationcallback函数。

下面的示例显示如何连接到本地Exchange2007环境。

使用创建的服务实例阅读电子邮件

一旦连接启动并运行,这就相对简单了。流程总结如下:

  1. 指定要从中读取消息的邮箱文件夹(即收件箱
  2. 指定源邮箱电子邮件标识符
  3. 指定任何搜索筛选器
  4. 指定聚合条件(或/和)
  5. 指定要检索的最大邮件数
  6. 使用服务实例检索消息标识符。

…还有一些示例代码…

现在我们有了消息标识符,但是缺少消息体和其他基本属性。需要对服务器进行第二次调用,以检索每个消息的扩展属性。下面是这个过程的代码:

准备发送出站邮件

在发送之前,我使用了一个临时的自定义对象来转换来自EWS调用的电子邮件。下面是用于创建类和映射逻辑的代码。

下面的代码将临时邮件对象转换为有效的SMTP邮件,验证电子邮件标识符,邮件需要广播到,筛选出无效的邮件ID(如果找到),并以多个允许的批发送邮件。

最后但并非最不重要。。发送邮件。

(代码语言=“csharp”)

mail.sendmail();

[代码]

快乐邮寄!!!!

类别:
应用程序开发和集成交换办公室365
标签:

18
留下答复

留下答复

订阅
最新 最古老的 多数投票
通知
弗朗索瓦开始
客人

嗨。我正在查看您的帖子,我有一个问题:Exchange Web Services (EWS)托管API是您将安装在您的客户机上以代理到Exchange的编程连接的东西吗?或者这是您需要在Exchange服务器上安装的附加组件?

杰森乔治
客人
杰森乔治

嗨,Vibhu,谢谢这篇好文章。
我只想知道下面两种配置的值是多少?
(“用户”)ConfigurationManager.AppSettings .ToString ()
configurationmanager.appsettings[“邮箱”].toString()
这将是相同的用户电子邮件id吗?
我只是想创建一个应用程序,读取所有电子邮件到一个特定的电子邮件id登录后,与电子邮件id和密码。我尝试了这个示例代码,得到的结果是“无法找到自动发现服务”。

任何帮助都将不胜感激!
谢谢
Jaison

伊斯梅尔可汗
客人
伊斯梅尔可汗

你好,目前您正在使用EWS应用程序API发送电子邮件。如果我们正在将应用程序从Exchange 2007迁移到Exchange 2013/Office365。从这些日志可以导出多少应用程序通过EWS连接来发送电子邮件。如我们所知(smtp,IMAP,流行音乐)

卡里尔
客人
卡里尔

你好,感谢您的详细文章。
在我的收件箱里有成千上万的电子邮件(80000封电子邮件),我想读他们先进先出即。从旧的开始,到最近的结束。锄头怎么办?提前感谢你。

克里斯纳帕拉布
客人
克里斯纳帕拉布

使用Autodiscover设置URL端点。
意味着什么?

克里斯纳帕拉布
客人
克里斯纳帕拉布

先生,请分享您的密码

茱莉亚
客人
茱莉亚

我有一个进程在服务帐户下运行,与邮箱没有关联。
在切换到exchange2013之后,该流程开始失败,出现以下错误:“当以没有邮箱的帐户发出请求时,您必须为任何区分的文件夹id指定邮箱主SMTP地址。”我使用委托,它适用于所有启用邮箱的帐户。知道会发生什么事吗?
谢谢你的帮助
谢谢你!
朱丽亚

艾丽丝霍斯里
客人
艾丽丝霍斯里

嗨,Vibhu先生,
感谢您提供此文档,我需要知道三件事:
1-在我的情况下,每次在SQL表中收到电子邮件时,我都需要保存数据。那么如何让这段代码始终在后台运行呢?所以每当收到电子邮件,它将被直接保存。
2-如果有一天我们决定停止保存数据,我们怎么才能做到呢?
3-我们必须在哪里实现这段代码?可以通过创建restful服务来实现吗?

提前感谢

Vishal所在
客人
Vishal所在

我在这页上看不到任何代码,除了mail.SendMail ();

卢西安弗朗希
行政

Github Gist代码段是嵌入的。它可能是你浏览器上的安全/隐私设置,2)DNS问题或3)阻止您看到该内容的网络路由问题。

跟着我们!

克劳德解决方案博客-关注我们!