分析邮件中的跳转信息以联系您。获取有关每个跃点的结构化信息-主机名、使用的协议、时间戳和延迟

emailtrail的Python项目详细描述


…原始:html

<;h2 align="center">;



…原始:html

<;/h2>;

…原始:html

<;p align="center">;

…原始:html

<;!--<;img alt="logo"title="logo" src="http://i.imgur.com/vshxjhs.png"width="450">;-->;

……原始::html

<;/p>;


…原始:html

<;p>;

获取有关每个跃点的结构化信息-主机名、使用的协议、时间戳和延迟。

…raw::html

<;p>;

**在您的项目中:*``pip install emailtrail``或者如果您使用
`pipenv<;http://pipenv.org/>;``uuuu与我一样``pipenv install emailtrail``

。原始:html

<;!--启动DOCTOC生成的目录请在此处保留注释以允许自动更新-->;

…原始:html

<;!--不编辑此节,而是重新运行docdococ来更新-->;





>>
-

>
-`usage<;用法>;` ` `
-`caveats<;`caveats>;` `
-`cont贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献贡献` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `>。原始:html

<;!--结束DOCTOC生成的目录请在此处保留注释以允许自动更新-->;


用法
----


我们可以分析电子邮件源或原始邮件头

。代码::python

email=""
发送到:money@capitalism.com
接收时间:10.129.52.209,smtp id b200csp1430876ywa;
2017年10月10日星期二01:17:02-0700(pdt)
x-received:10.31.153.20,smtp id b20mr6116862vke.110.1507623422746;
2017年10月10日星期二01:17:02-0700(PDT)
收到:来自mail-sor-f65.google.com(mail-sor-f65.google.com)。[209.85.220.65])
由mx.google.com提供,smtps id b31sor1345013uaa.124.2017.10.10.01.17.02
用于<;money@capitalism.com>;
(谷歌运输安全);
星期二,2017年10月10日01:17:02-0700(pdt)
收到spf:pass(google.com:domainof bags@test_email.ua.edu指定209.85.220.65为允许发件人)客户端IP=209.85.220.65;
x-received:by 10.176.85.196,smtp id w4mr6874179uaa.75.1507623422198;tue,10 oct 2017 01:17:02-0700(pdt)
mime版本:1.0
received:by 10.103.79.86,带http;tue,10 oCT 2017 01:17:01-0700(PDT)
发件人:Money Bags<;Bags@MoneyRules.com>;
日期:2017年10月10日星期二01:17:01-0700
主题:
收件人:Money@Capitalism.com;
内容类型:text/plain;charset="utf-8"
密件抄送:satan@wallstreet.com

它等待着
"

让我们分析它
^^^^^^^^^^^^^^^^^^^^^^^

代码::python

import emailtrail
emailtrail.analyze(电子邮件)

代码::python

{
"收件人":u'money@capitalism.com;',
"发件人":u'mr.money bags<;bags@moneyrules.com>;',
"密件抄送":u'satan@wallstreet.com,
"抄送":u'none',
"总延迟":1,
"跟踪":[
{
"延迟":0,
'from':',
'protocol':'http',
'receivedby':'10.103.79.86',
'timestamp':1507623421
},
{
'delay':1,
'from':'mail-sor-f65.google.com',
'protocol':'smtps',
'receivedby'":"mx.google.com",
‘时间戳’:1507623422
},
{
‘延迟’:0,
‘来自’:",
‘协议’:‘smtp’,
‘接收方’:‘10.129.52.209’,
‘时间戳’:1507623422
}
}
/>analyze函数返回一个python字典。轨迹显示按时间顺序排序的
电子邮件跳数。每个中间电子邮件服务器
邮件的"received"头,模块从中解析
以下信息:

-``协议`:例如http、smtp等。
-`` from`:发送计算机为自己指定的名称
-`` receivedby`:接收计算机的名称
-``时间戳`:unix epoch

为无法确定的字段设置空字符串值。-
``延迟`:通过取两个连续跳的差
来计算延迟(以秒为单位)。在上面的例子中,从``10.103.79.86``到``mx.google.com``

代码::来自mail-vk0-x233.google.com(mail-vk0-x233.google.com)的python

>;>header""。[2607:f8b0:400c:c05::233])\n由mx.google.com提供,esmtps id d124si110912930vka.142.2016.01.12.10.20.45\n for<;support@peacedojo.com>;\n(version=tls1_2 cipher=ecdhe-rsa-aes128-gcm-sha256 bits=128/128);\n 2015年12月16日星期三16:34:34-0600"

>;>;从emailtrail import analyse_hop,extract_protocol,extract_from_label,extract_received_by_label,extract_timestamp


>;>;extract_protocol(header)
"esmtps"

>;>;extract_from_label(header)
"mail-vk0-x233.google.com"

>t;extract_received_by_label(header)
"mx.google.com"

>;>extract_timestamp(header)
1450305274

>;>analyse_hop(header)
{{
"from":"mail-vk0-x233.google.com"
"receivedby":"mx.google.com"
"protoco"l":"esmtps",
"timestamp":1450305274
}


服务器不可能在前一个之前收到电子邮件,这意味着一个或两个服务器的时钟都关闭。我们假设此跃点的延迟为"0"。

contribution
----

和包版本。-分离回购协议并克隆它。-在项目根目录中:
``pipenv install--dev`。这将安装测试
和linting所需的软件包-跳转到virutal env:``pipenv shell`-运行
测试:``pytest`-如果要了解代码,请先阅读测试
案例。-进行更改->;通过测试->;推送到您的
分支->;创建拉取请求->;利润??

Miscellaneous
^^^^^^^^^^^^


在开发这个模块的过程中,我切换到了TDD。虽然第一次开始时速度很慢,但后来证明这是一种非常有效的方法。-迫使您思考如何构造代码。-耦合少,功能小,副作用小,接口定义好。-对快速重构代码的信心。(每个人都喜欢投资有回报的时候)

|特拉维斯分行图片:https://img.shields.io/travis/akshaykmr/emailtrail/master.svg?style=flat square
:目标:https://travis ci.org/akshaykmr/emailtrail
…|欢迎光临图片::https://img.shields.io/badge/prs-welcome-brightgreen.svg?style=flat square
:目标:http://makeapullrequest.com

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java流/下载文件,无需在Spring Boot中保留内存   kotlin/java是否有类似TryParse()的东西?   java Spring引导找不到用户类型的属性ID   java Spring 2到Spring 3的迁移:一个控制器用于多个视图   java包含多个程序包名为“安卓”的库。支持图样可提取'   java spring JPA是否支持自定义值框架?   java转义出基于文本字段的搜索栏   java AAPT:错误:未找到样式属性“安卓:attr/WindowsPlashCreenBackground”   java从文本文件中读取纬度和经度   java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询   尝试使用Dialogflow上的Webhook动态给出响应时,java获取Webhook响应错误(206)   如何在java中替换匹配的字符串?   java模拟数学的最大价值。随机的   java Spring RestTemplate GET请求未给出正确响应   春爪哇。lang.IllegalArgumentException   java系统。load()永远不会发生   java剪辑循环不工作   java如何从maven构建中删除staxapi   java ThreadPoolExecutor的排队行为是否可以自定义,以更喜欢创建新线程而不是排队?