Windows Azure Cloud Service (27) 在Windows Azure发送邮件(上)

简介:

 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


本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/06/24/2560448.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Java Unix 应用服务中间件
使用java service wrapper把windows flume做成服务
使用java service wrapper把windows flume做成服务
|
6月前
|
关系型数据库 MySQL Windows
windows安装mysql报错Remove of the Service Denied!
windows安装mysql报错Remove of the Service Denied!
|
9月前
|
C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(上)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
|
9月前
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
数据采集 安全 Windows
解决关于Windows Defender Antivirus Service自启造成运行python程序时,Windows的cpu和内存占用过高问题
启用“关闭Windwos defender”服务解决阿里云Windows服务器的卡顿问题,并列举了网上一些错误的解决方法。
9928 2
解决关于Windows Defender Antivirus Service自启造成运行python程序时,Windows的cpu和内存占用过高问题
|
6月前
|
Windows
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
106 0
|
人工智能 安全 数据处理
阿里云的WINDOWS service RS 12的使用体验
我,胡颖,来自湖南文理学院国际学院信息管理与信息系统21102班。信息管理与信息系统是一门普通高等学校本科专业,属管理科学与工程类专业。该专业对于学生的要求是接受系统和设计方法以及信息管理方法的基本训练,具备综合运用所学知识分析和解决问题的基本能力。阿里云是全球领先的云计算及人工智能科技平台,致力于以在线公共服务的方式,提供安全、可靠的计算和数据处理能力,让计算和人工智能成为普惠科技。基于培养自己的计算机专业的要求,我决定尝试一下体验阿里云的功能。
|
程序员 C# Windows
Windows Service 小品
Windows Service 小品
114 0
Windows Service 小品
|
SQL 存储 运维
Windows Azure云服务IaaS与PaaS层性能分析
近一直想总结Azure IaaS和PaaS的区别与比较,写个博文详细说明一下。建议读者在阅读之前,先熟悉微软PaaS和IaaS平台的基本概念,再参考本文。
380 0
Windows Azure云服务IaaS与PaaS层性能分析
|
Windows
为加快SAP Commerce Cloud在windows服务器上的启动速度,而禁用的一些服务
为加快SAP Commerce Cloud在windows服务器上的启动速度,而禁用的一些服务
102 0
为加快SAP Commerce Cloud在windows服务器上的启动速度,而禁用的一些服务