前言

MailEnable提供端到端的解决方案,用于提供安全的电子邮件和协作服务。引用自官方网站的说法:最近的一项独立调查报告称MailEnable是世界上最受欢迎的Windows邮件服务器平台。 对于MailEnable的开发者API,我在官方网站上只找到了AJAX API的说明文档,所以本文将要尝试编写Python脚本,实现对MailEnable邮件的访问,记录开发细节,开源代码。

简介

本文将要介绍以下内容:

◼环境搭建

◼开发细节

◼开源代码MailEnableManage.py

环境搭建

1.安装

安装前需要安装IIS服务和.Net 3.5,否则无法正常配置Web访问。

MailEnable下载地址:http://www.mailenable.com/download.asp

2.配置

启动MailEnableAdmin.msc,在MailEnable Management->Messaging Manager->Post Offices下配置邮件服务器信息。

如下图

默认登录页面:

http://mewebmail.localhost/mewebmail/Mondo/lang/sys/login.aspx

3.开启Web管理页面

参考资料:

http://www.mailenable.com/kb/content/article.asp?ID=ME020132

启动MailEnableAdmin.msc,选择MailEnable Management->Servers->localhost->Services and Connectors->WebAdmin,右键单击并从弹出菜单中选择Properties,选择Configure…按钮,进行安装。

如下图

启动MailEnableAdmin.msc,在MailEnable Management->Messaging Manager->Post Offices下选择已配置的Post Office,右键单击并从弹出菜单中选择Properties,切换到Web Admin标签,启用web administration。

如下图

选择指定用户,将属性修改为管理员。

默认管理页面:

http://mewebmail.localhost/meadmin/Mondo/lang/sys/login.aspx

注:

如果忘记了用户的明文口令,可以查看默认安装路径C:\Program Files (x86)\Mail Enable\Config下的Auth.tab文件,其中保存有每个邮箱用户的明文口令。

开发细节

1.版本判断

经过多个版本的测试,总结出来的版本判断方法如下:

访问登录页面:http:///mewebmail/Mondo/lang/sys/login.aspx

查看网页源码,如下图


其中< link rel=“stylesheet” type=“text/css” href="/MEWebMail/Mondo/skins/Arctic/me.css?v=9.84" >中的v=9.84对应MailEnable的版本。

在脚本实现上,我采用了如下方法:

◼找到?v=的位置

◼向后截取固定长度的字符串

◼以"作为分隔符,取出版本号

补充:通过MailEnableAdmin.msc获得版本号

启动MailEnableAdmin.msc,选择MailEnable Management->Servers->localhost->System->Diagnose

如下图

注:版本号列表

http://www.mailenable.com/Premium-ReleaseNotes.txt

http://www.mailenable.com/Standard-ReleaseNotes.txt

2.用户登录

访问URL:/mewebmail/Mondo/Servlet/request.aspx

需要的部分关键参数:

◼txtUsername

◼txtPassword

◼loginParam

返回结果为json格式,如果登录成功,bReportLoginFailure的值为False。

对应的Python代码如下:

3.查看邮箱文件夹

访问URL:/MEWebMail/Mondo/Servlet/asyncrequest.aspx

需要的部分关键参数:

◼Folder,可以指定为inbox/sent/drafts/deleted/junk

◼ME_VALIDATIONTOKEN,需要访问/mewebmail/Mondo/Servlet/request.aspx?Cmd=GET-MBX-OPTIONS&Scope=2,从返回结果中获得。

返回结果为xml格式,包含该文件夹下所有邮件的数量和每个邮件的简要内容,ID作为每封邮件的唯一标志,在读取邮件时需要作为参数。

为了提高效率,可以使用xml.dom解析xml。

使用xml.dom解析xml的参考资料:

https://docs.python.org/3.8/library/xml.dom.minidom.html#xml.dom.minidom.parse

使用xml.dom解析xml,提取出TOTAL_ITEMS的Python代码如下:

4.查看邮件

访问URL:/MEWebMail/Mondo/Servlet/request.aspx

需要的部分关键参数:

◼Folder,可以指定为inbox/sent/drafts/deleted/junk

◼ME_VALIDATIONTOKEN,需要访问/mewebmail/Mondo/Servlet/request.aspx?Cmd=GET-MBX-OPTIONS&Scope=2,从返回结果中获得

◼ID,需要发送查看邮箱文件夹的请求,在返回结果中获得

返回结果为xml格式,包含邮件的详细内容,如果存在附件,那么ATTACHMENTS的EXISTS属性值为1,如果不存在附件,那么ATTACHMENTS的EXISTS属性值为0

MESSAGEID作为附件的标志,如果包含多个附件,多个附件共享同一个MESSAGEID,FILENAME为附件的名称,MESSAGEID+FILENAME作为附件的唯一标志,在下载附件时需要作为参数

为了提高效率,可以使用xml.dom解析xml

xml数据示例如下图

解析xml提取邮件信息的Python代码如下:

5.下载附件

访问URL:/MEWebMail/Mondo/lang/sys/Forms/MAI/GetAttachment.aspx

需要的部分关键参数:

◼Folder,可以指定为inbox/sent/drafts/deleted/junk

◼MessageID,需要发送查看邮件的请求,在返回结果中获得。

◼Filename,需要发送查看邮件的请求,在返回结果中获得。

在保存附件上,需要区分文本格式和二进制格式。

开源代码

完整代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/MailEnableManage.py

代码支持以下功能:

◼GetVersion,版本判断。

◼Check,登录验证。

◼ListFolder,查看文件夹,命令行显示邮件数量,完整内容保存至文件。

◼ViewMail,查看邮件,命令行显示邮件信息,完整内容保存至文件。

◼DownloadAttachment,下载附件。

小结

本文介绍了编写Python脚本访问MailEnable邮件的开发细节,开源代码MailEnableManage.py,实现了版本判断、登录验证、查看文件夹、查看邮件和下载邮件的功能.

相关资料详细

【技术原创】MailEnable开发指南相关推荐

  1. (转)PKI技术及应用开发指南

    PKI技术及应用开发指南 级别: 初级 李明柱 博士 (mzli@263.net)北京邮电大学信息安全中心 2002 年 6 月 01 日 公钥基础设施(Public Key Infrastructu ...

  2. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现插件...

    插件契约介绍 我们知道,要基于平台(容器)加插件的这种模式进行开发,我们必须定义一组契约,用于约束模块插件开发,也就是说,模块插件需要遵守一定的标准进行开发,才能正常被容器调用,这就是IModule所 ...

  3. 移动IM开发指南1:如何进行技术选型

    <移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年iOS IMSDK开发的经验,深度分析实际开发中的各种常见问题 ...

  4. 即时通讯 IM 开发指南 1:如何进行技术选型

    <移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年 iOS IM SDK 开发的经验,深度分析实际开发中的各种常 ...

  5. 综合交易平台API技术开发指南

    综合交易平台API技术开发指南 第一章CTP 产品特性  1. 如何获取综合交易平台(Comprehensive Transaction Platform 以下简称 CTP)证券(期 货)交易及行情 ...

  6. Android插件化开发指南——Hook技术(一)【长文】

    文章目录 1. 前言 2. 将外部dex加载到宿主app的dexElements中 3. 插件中四大组件的调用思路 4. Hook 2.1 对startActivity进行Hook 2.1.1 AMS ...

  7. Android插件化开发指南——插件化技术简介

    文章目录 1. 为什么需要插件化技术 2. 插件化技术的历史 3. 插件化实现思路 3.1 InfoQ:您在 GMTC 中的议题叫做<Android 插件化:从入门到放弃>,请问这个标题代 ...

  8. Android插件化开发指南——Hook技术(二)

    文章目录 1. 前言 2. 分析 3. 加载外部资源文件代码 4. References 1. 前言 在上篇Android插件化开发指南--Hook技术(一)[长文]中提到最终的效果其实在插件中的Ma ...

  9. android开发导航sdk,Android导航SDK开发指南(26页)-原创力文档

    Android 导航SDK 开发指南 一.概述 Android 导航SDK 目前为V1.1 版本,以.jar 形式提供,请广大开发者使用SDK 前务必 在官网申请key,以便全部功能顺利使用. And ...

最新文章

  1. 超越时代的天才——图灵
  2. 微生物生态学中的挑战:建立对于群落功能与动态的预测性认识
  3. php 三元运算符 为空,PHP中三元运算符和Null合并运算符的简单比较
  4. 没用调用flush导致的数据保存丢失
  5. MKL学习——线性代数概念相关
  6. php修改linux文件权限设置,linux怎么给文件设置权限
  7. Windows域控设置 AD域策略屏蔽端口 禁用端口【全域策略生效】
  8. 17. 装箱、拆箱的最小化
  9. C语言必背18个经典程序(含免费源码大全)
  10. BUCK电路中,输入电压增加后,电感电流曲线变化的推导 // 《精通开关电源设计》P44 图2-3
  11. Excel小技巧-获取列数
  12. Objective-C runtime机制(5)——iOS 内存管理
  13. 火狐浏览器超好用的网页翻译插件
  14. combotree单选子节点
  15. Android项目开发实战常用知识点
  16. 工单系统ferry 01--docker部署ferry
  17. 微博上市让新浪又站上“浪尖”
  18. 软件设计师(五)——软件工程基础知识
  19. 运动规划——B样条曲线
  20. 课程升级后-课件软件下载地址

热门文章

  1. Py之turicreate:turicreate的简介、安装、使用方法之详细攻略
  2. CV之PoseEstimation:Pose Estimation人体姿态估计(AI识人,OpenPose+DeepCut+RMPE+Mask RCNN)的简介、案例应用之详细攻略
  3. Py之smtplib:smtplib(aiosmtplib)的简介、安装、使用方法之详细攻略
  4. Go:go语言的认识理解、安装应用、语法使用之详细攻略
  5. Ubuntu中的vi模式中的按上下左右键变成ABCD解决方法
  6. 将js进行到底:node学习10
  7. GitHub如何删除一个repository(仓库)
  8. 文件字符流 编码判断
  9. 蓝桥杯 第三届C/C++预赛真题(7) 放棋子(水题)
  10. ACM 进阶计划~~转