《Windows Azure Platform 系列文章目录》

  许多Web应用都具有发送邮件通知的功能,不管是作为用户注册流程的一部分,还是通知用户一系列重要事件的发生。如果您是一个.NET的开发人员,你可能使用System.Web.Mail这个命名空间来完成该功能。然而,这些类需要访问一个SMTP电子邮件服务器发送消息,Windows Azure目前并不能提供这样的功能。我将会写量部分系列文章,介绍一些设计模式,使得部署到Windows Azure平台的应用可以使用电子邮件的功能。

  1.使用用户部署在内部局域网上的邮件转发服务器(Email Forward Service),这种模式将在本章中做详细介绍。利用局域网内部的邮件服务器,替代Windows Azure公有云上的应用程序发送电子邮件。这种方式通过创建一个使用分布式异步模式的自定义服务,使用Windows Azure Storage Queues和Blob来实现。

  2.使用电子邮件服务器的Web Service API。这种模式将在下一部分中介绍:使用由Microsoft Exchange Web Services API提供直接从Windows Azure发送电子邮件。这种模式可以应用到其他的通讯产品,提供了一个相似的Web服务接口。

  3.使用第三方的SMTP服务。这种模式将在第三部分介绍,利用像SendGrid或者AuthSMTP第三方电邮服务中继电子邮件。同时我们也会介绍如何从Windows Azure应用程序接收电子邮件,利用25端口监听SMTP流量。

使用用户部署在内部局域网上的邮件转发服务器

这种模式利用您现有的内部邮件服务器,替代Windows Azure公有云上的应用程序发送电子邮件。这种模式通过创建一个自定义的邮件转发服务器,使用Windows Azure Storage和Blob来实现。该模式分为两个主要部分:

  1.准备和发送电子邮件的工作:由Windows Azure Web Role和Worker Role来实现,生成邮件的工作。它序列化邮件对象,然后在Windows Azure Storage中创建一个电子邮件的工作项目。

  2.接收和发送电子邮件的工作:由一个邮件转发服务来实现。从Windows Azure Storage中获得电子邮件的工作项目,反序列化电子邮件对象,并把该对象发送到邮件服务器。

对于从Windows Azure到内部局域网的分布式邮件服务器,我们将定义一个"工作项目"的概念。工作项目是一个逻辑容器组成:

  1.一个Queue(队列)项目:这个队列项目保存了,存储在Blob中的邮件信息的引用(通过URL)。它也可以容纳多达8K的元数据。

  2.一个Blob项目:这个Blob项目包含了序列化后的邮件对象。因为Blob的存储上限高达1TB,电子邮件对象可以包含多个大数据量的附件。

下图展示了该模式的工作流:

当一个在Windows Aure中托管的应用程序需要发送电子邮件时,会发生如下情况:

  1.Worker / Web Role 生成一封电子邮件。这个邮件信息生成一个System.Net.Mail.MailMessage的实例。这个邮件对象可以包含任意数量的附件。

  2.电子邮件的对象被序列化,并存储到Blob中。Blob的URL被添加到Queue项目。Queue项目和Blob项目组合,成为了电子邮件的工作项目。您可以使用Queue和Blob项目的元数据存储额外的信息。

  3.在内部局域网里,电子邮件转发服务器不断的监视邮件队列。队列项目可以一次被检索32项。邮件转发服务器首先检索队列,然后提取Blob URL和检索序列化的电子邮件。

  4.一旦反序列化结束,邮件转发服务器使用局域网的邮件服务器信息,发送电子邮件。当发送电子邮件结束后,它会从Queue和Blob Storage中删除该工作项。

  5.局域网内的邮件服务器接收邮件。因为这是一个内部的应用程序,身份验证和授权应该非常直接。

  6.邮件服务器发送电子邮件到相应的用户。

为了更好的说明该模式,一个简单的邮件转发服务器和Windows Azure应用的工程文件可供下载。该代码示例包含以下项目:

  • 邮件转发服务:实现了局域网内的邮件转发服务。为了简单的演示,我们实现了一个Windows Form应用。然而在实际部署中,最好在Windows Service中实现该功能。为了测试这个示例服务,请编辑app.config文件,包含SMTP服务器的配置。
  • 实体:类库中包含了邮件信息序列化功能,和从Windows Azure Storage中添加、删除电子邮件的操作。邮件转发服务和Web / Worke Role都使用此项目。
  • 生成电子邮件的Web Role:实现了一个简单的Web Role,可以发送电子邮件。该Role提供了一个Web用户界面,可以让您输入想要发送的电子邮件的细节。
  • 生成电子邮件的Worker Role:实现一个简单的Worker Role,可以发送电子邮件。Worker Role每10秒钟生成和发送邮件信息,具体可以参考该Role下的app.config文件。

建构思考:

对于任何解决方案来说,了解架构是非常重要的。在自定义的邮件转发服务器中,我们需要考虑一些问题包含:

  • 成本:对于局域网内的服务来说,存储在Blobs、Queues和数据流中的数据会对整个解决方案增加额外的费用。总成本由每一个单独的解决方案中的邮件数量来决定,必须在实现该模式之前进行考虑。使用压缩是可取的,以减少序列化的电子邮件对象的大小。为了尽量减少带宽成本,使用Blobs和Queue的Windows Azure Storage账户必须和发送邮件的Worker Role/ Web Role 在同一个数据中心里。
  • 性能:性能主要有两点需要考虑:

    1.序列化那些包含巨大附件的邮件对象,可能会带来一些性能的影响。因为这些内容需要被序列化,保存到Storage里,然后被局域网内的邮件转发服务器检索和反序列化。

    2.考虑到这种模式异步的特性,电子邮件转发服务器定期检查Windows Azure Storag Queue。这产生了邮件发送到邮件服务器的边际演示(marginal delay)。这个必须仔细研究,并对不同的需求进行设置。

  • 管理:必须监测服务。我们建议增加记录和实施监控。
  • 可靠性:应该实施采取适当的重试机制(retry mechanisms),包括指数回退(exponential back-off),让电子邮件转发服务器提高可靠性。

参考资料:

http://msdn.microsoft.com/zh-tw/windowsazure/gg486877.aspx

http://blogs.msdn.com/b/windowsazure/archive/2010/10/08/adoption-program-insights-sending-emails-from-windows-azure-part-1-of-2.aspx

转载于:https://www.cnblogs.com/threestone/archive/2012/06/24/2560448.html

Windows Azure Cloud Service (27) 在Windows Azure发送邮件(上)相关推荐

  1. [New Portal]Windows Azure Cloud Service (33) 使用Visual Studio 2012 部署Cloud Service

    <Windows Azure Platform 系列文章目录> 笔者已经将工作用的笔记本电脑升级到Windows 8很长一段时间了,开发工具也从Visual Studio 2010升级到了 ...

  2. Windows Azure Cloud Service (23) 使用Full IIS模式部署多站点和虚拟目录

    <Windows Azure Platform 系列文章目录> 本章我们将介绍如何使用Windows Azure的Full IIS模式部署多站点和虚拟目录. 首先我们先新建一个Window ...

  3. Windows Azure Cloud Service (17) Role Endpoint

    <Windows Azure Platform 系列文章目录> 在Windows Azure平台中,用户最多可以对以个Role指定5个Endpoint.而一个Hosted Service最 ...

  4. Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台

    <Windows Azure Platform 系列文章目录> 本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台. 因为在迁移过程中,可能需要对现有的 ...

  5. Windows Azure Cloud Service (41) 修改云服务IIS托管管道模式为4.0经典模式

    <Windows Azure Platform 系列文章目录> 这是笔者在之前的项目中遇到的问题,做一下总结,给网友做参考. 在一般情况下,Visual Studio开发的Cloud Se ...

  6. 在Azure Cloud Service中部署Java Web App(1)

    Microsoft Azure是一个开放的,灵活的云平台,除了对自家的.Net平台有良好的支持外,对于各种开源的软件,语言,工具,框架都有着良好的支持,比如Java,Php,Python等等,你可以使 ...

  7. Windows Azure Cloud Service (1) 用户手册

    <Windows Azure Platform 系列文章目录> 下载地址 Cloud Service用户手册

  8. Windows Azure Cloud Service (19) 动态指定WCF的发布地址

    <Windows Azure Platform 系列文章目录> 在刚才的例子中,服务端和客户端都是通过配置文件明确指定了WCF的地址,而如果现在需要将此服务发布到别的Hosted Serv ...

  9. Windows Azure Cloud Service (8) Role及其生命周期模型

    <Windows Azure Platform 系列文章目录> 我们浏览Windows Azure项目.如下图所示 可以看到Windows Azure的项目包含传统的ASP.NET工程文件 ...

最新文章

  1. 天使投资乱象频出 熟人元素何时剔除
  2. 智能合约重构社会契约(10)超级账本之跨链Hyperledger Lab
  3. mongdb 建立了索引唯一性还能重复插入?_「数据库系列」Postgres性能调优——Index...
  4. 安防监控系统CIF、D1等格式的解释
  5. ZZULIOJ 1159: 最大的两个数(指针专题)
  6. coreboot学习0:二度相逢是初识
  7. elastic 常用操作
  8. PHP 父类静态方法中调用子类静态方法
  9. IT技术 VS IT管理!为什么国内大公司都看不起搞技术的?
  10. 华硕笔记本返厂维修流程_Intel EVO严苛认证!14款极品笔记本上市:秒光|英特尔|笔记本|华硕|宏碁|惠普|微星...
  11. ubuntu开机自启vnc虚拟显示器并使用向日葵远程连接
  12. Otsu详细算法解析
  13. 制作u盘winpe启动盘_u盘启动盘制作工具软件哪个好?
  14. bugku之密码ok解题思路
  15. 好多粉数据上报之360点睛平台ocpc API上报数据方法
  16. JavaScript中的onload详解
  17. 棋盘覆盖问题C++求解
  18. 加密解密技术基础及用OpenSSL创建私有CA
  19. 不会用修图工具没关系,Excel也能轻松更换照片底色
  20. SAP权限管理,我的理解

热门文章

  1. 记录某段程序的运行时间
  2. Emmet插件使用方法总结
  3. 利用OpenCV的VideoCapture类实现视频读操作
  4. OpenCV下的灰度直方图生成及显示的源码,带详细注释
  5. leetcode算法题--Flood Fill
  6. leetcode算法题--数组中两个数的最大异或值
  7. leetcode算法题--左旋转字符串
  8. leetcode算法题--和为s的连续正数序列
  9. Deformable ConvNets--Part4: Deformable Convolutional Networks
  10. Google 修补多项 Android 高危漏洞