关于imap协议的fetch指令参数总结

Imap使用fetch指令接收邮件服务器上的邮件,fetch指令的参数很多,特将其总结如下:

参数:序列集,邮件数据项名称或者宏

响应:非标签化响应:FETCH

结果:OK-fetch完成

NO-fetch错误:不能获取该数据

BAD-未知命令,或者无效参数

FETCH命令获取邮箱中的一个邮件的相关数据。被获取的数据项可以是一个原语,或者一个组合列表。

在正式语法中基于msg-att-static规则确认的大部分数据项,是静态的,并且不能因为任意特定邮件而改变。在正式语法中msg-att-static规则确认的其它数据项,可以改变,或者作为一个STORE命令的一个结果,或者因为外部事件。

例如,如果一个客户端接收到它已经知道的、一个邮件的一个信封,它可以安全地忽略新传送的信封。

有三种宏,它们指明数据项的普遍使用集,并能代替数据项使用。一个宏必须被自身所用,并且不能与其它宏或者数据项连接。

ALL

等效于:(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)

FAST

等效于:(FLAGS INTERNALDATE RFC822.SIZE)

FULL

等效于:(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)

现在已经定义的、可以被获取的数据项有:

BODY

BODYSTRUCTURE的不可扩展形式。

BODY[

]<>

特定主体块的文本。块声明是一个零的集合,或者根据时间分隔开的更多块声明。一个块声明或者是一个块号,或者是以下的一个:HEADER,HEADER.FIELDS,HEADER.FIELDS.NOT,MIME,及TEXT。一个空的块声明指向整个邮件,包括头部。

每个邮件有至少一个块号。Non-[MIME-IMB]邮件,及不带内嵌邮件的non-multipart[MIME-IMB]邮件,只有一个块1。

邮件簇被分配连续的块号,如果它们出现在邮件中。如果一个特定块的类型是邮件或者邮件簇,则这个块后面必须跟着它在块簇中的块号的时间。

一个类型为MEEAGE/RFC822类型的块也有块号,指向MESSAGE块域的块集。

HEADER,HEADER.FIELDS,HEADER.FIELDS.NOT,及TEXT块声明可能是单个块声明,也可能是以一个或者多个 数字型的块声明为前缀――其前提是该数字型的块声明指向一个MESSAGE/RFC822类型的块。MIME块声明必须以一个或者多个数字型的块声明为前 缀。

HEADER,HEADER.FIELDS,及HEADER.FIELDS.NOT块声明指向邮件的[RFC-2822]头部,或者一个内嵌 [MIME-IMT] MESSAGE/RFC822邮件。HEADER.FIELDS和HEADER.FIELDS.NOT其后跟着field- name([RFC-2822]中有定义)名称的一个列表,并返回头部的一个子集。HEADER.FIELDS返回的子集只包括那些带有与列表中的名称之 一相符的一个field-name的头部域;类似地,HEADER.FIELDS.NOT返回的子集只包含带有一个不匹配域名称的头部域。域匹配是不区分 大小写的,除非用别的方法强制。子集化并不把[RFC-2822]定义的、头部和主体之间的空行排除在外;空行包含在所有头部获得中,除非一个邮件没有主 体也没有空行。

MIME块声明指向该块的[MIME-IMB]头部。

TEXT块声明指向邮件的文本主体,不包括[RFC-2822]头部。

这是一个带有它的一些块声明的复杂邮件的一个例子:

HEADER ([RFC-2822] header of the message)

TEXT ([RFC-2822] text body of the message) MULTIPART/MIXID

1 TEXT/PLAIN

2 APPLICATION/OCTET-STREAM

3 MESSAGE/RFC2822

3.HEADER ([RFC-2822] header of the message)

3.TEXT ([RFC-2822] text body of the message) MULTIPART/MIXED

3.1 TEXT/PLAIN

3.2 APPLICATION/OCTET-STREAM

4 MULTIPART/MIXED

4.1 IMAGE/GIF

4.1.MIME ([MIME-IMB] header for the IMAGE/GIF)

4.2 MESSAGE/RFC822

4.2.HEADER ([RFC-2822] header of the message)

4.2.TEXT ([RFC-2822] text body of the message) MULTIPART/MIXID

4.2.1 TEXT/PLAIN

4.2.2 MULTIPART/ALTERNATIVE

4.2.2.1 TEXT/PLAIN

4.2.2.2 TEXT/RICHTEXT

获取指定文本的一个子串是可能的。这是通过添加一个开的角符(“〈”),请求的第一个字节位置,一个时间,请求的字节的最大数,及一个闭的角符(“〉”)到块声明,来实现的。如果起始字节超出了文本的末尾,则返回一个空的字符串。

试图读取超出文本末尾内容的任何局部获取都会被适当截断。从第0字节开始的一个局部获取都返回局部获取,即使这种截断发生。

注意:这意味着一个1500字节的邮件的BODY[]<0.2048>将返回带有一个大小1500的原义的BODY[]<0>,而不是BODY[]。

注意:一个HEADER.FIELDS或者HEADER.FIELDS.NOT块声明的一个子串获取,在子集化头部之后计算。

/Seen标记是隐含标记;如果这导致标记改变,它们应当作为FETCH响应的一部分被包含进来。

BODY.PEEK[

]<>

BODY[

]的一个替代形式,它不会暗暗设置/Seen标记。

BODYSTRUCTURE

邮件的[MIME-IMB]主体结构。它的计算是由服务器把[MIME-IMB]头部域解释为[RFC-2822]头部和[MIME-IMB]头部。

ENVELOPE

邮件的信封结构。它的计算是由服务器把[RFC-2822]头部解释为组件块,默认为所需要的多个域。

FLASG

为该邮件设置的标记。

INTERNALDATE

邮件的实际日期。

RFC822

功能上等效于BODY[],不同的是,其结果的非标签化FETCH数据(返回RFC822)的语法。

RFC822.HEADER

功能上等效于BODY.PEEK[HEADER],不同的是,其结果的非标签化FETCH数据(返回RFC822.HEADER)的语法。

RFC822.SIZE

邮件的[RFC-2822]大小。

RFC822.TEXT

功能上等效于BODY[TEXT],不同的是,其结果的非标签化FETCH数据(返回RFC822.TEXT)的语法。

UID

邮件的唯一标识符。

例子:

C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])

S: * 2 FETCH ….

S: * 3 FETCH ….

S: * 4 FETCH ….

S: A654 OK FETCH completed

目前市场上的邮件安全产品大都是一套封闭邮件系统,部署上存在使用户放弃原来的账户使用新账户的问题,这就导致在部署时存在一定困难。在邮件透明加密产品中,天御云安的隐秘邮很新颖,使用安全邮件网关对邮件透明加密,用户完全感知不到邮件网关的存在,但是邮件在服务器上却穿上了盔甲,任你黑客攻破服务器,看到的邮件却是一堆乱码。

隐密邮网址:https://mail.tyyunan.com/

关键词:imap 邮件安全 透明加密

### 使用Python编写12306抢票脚本的方法 实现12306抢票功能涉及多个方面,包括但不限于获取车次信息、处理登录验证以及最终提交订单。下面将详细介绍如何利用Python完成这些操作。 #### 获取车次信息并存储至CSV文件 为了从12306网站抓取所需数据,可以采用`requests`库发起HTTP请求,并借助于`BeautifulSoup`或`lxml`解析HTML文档来提取有用的信息。对于具体某天出发的列车班次详情,则需构建URL参数传递给服务器查询接口。得到的数据会被整理成结构化的形式存入CSV文件内以便后续分析使用[^1]。 ```python import requests from bs4 import BeautifulSoup import csv def fetch_ticket_info(departure, arrival, date): url = "https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice" params = { 'train_no': '', 'from_station': departure, 'to_station': arrival, 'depart_date': date } response = requests.get(url=url,params=params) soup = BeautifulSoup(response.text,'html.parser') tickets_data = parse_html(soup) with open('tickets.csv', mode='w') as file: writer = csv.writer(file) for ticket in tickets_data: writer.writerow(ticket.values()) fetch_ticket_info("北京","上海","2023-10-18") ``` 请注意上述代码仅为示意性质,在实际应用中可能需要调整API路径及参数名称以匹配最新版12306 API规格说明;另外由于铁路部门不断更新其安全机制,因此直接访问官方页面的方式可能会遇到反爬措施而失败。 #### 自动化发送与接收电子邮件 当用户确认好想要预订的具体行程之后,可以通过SMTP协议向指定电子邮箱地址发送带有附件(即之前生成好的CSV文件)的通知信件。而在接收到回复后再次读取消息体内的指令从而得知乘客选定的是哪一班车次准备下一步动作。这里推荐使用`smtplib`和`imaplib`两个标准模块来进行邮件收发工作。 ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.encoders import encode_base64 from imapclient import IMAPClient # 发送带附件的邮件... msg = MIMEMultipart() attachment = MIMEBase('application','octet-stream') with open('tickets.csv','rb')as f: attachment.set_payload(f.read()) encode_base64(attachment) attachment.add_header('Content-Disposition',"attachment; filename=tickets.csv") msg.attach(attachment) server = smtplib.SMTP('smtp.example.com') server.login(user,password) server.sendmail(sender,receivers,msg.as_string()) # 接受邮件并解析内容... HOST = 'imap.example.com' USERNAME = '' PASSWORD = '' server = IMAPClient(HOST, use_uid=True) server.login(USERNAME,PASSWORD) select_info = server.select_folder('INBOX') messages = server.search(['FROM', sender]) for msgid,data in server.fetch(messages,['ENVELOPE']).items(): envelope = data[b'ENVELOPE'] print(envelope.subject.decode()) # 打印主题 server.logout() ``` 同样需要注意替换掉示例中的主机名(`smtp.example.com`)以及其他敏感字段如用户名密码等真实值前缀。 #### 处理图形验证码 针对12306购票过程中的人机识别环节——图形验证码问题,当前较为流行的解决方案有两种: 一种方式是集成第三方OCR服务提供商所提供的SDK工具包,比如腾讯云AI开放平台就提供了专门用于破解此类图片型挑战题目的API接口,只需上传待解密图像即可返回对应的文字描述结果供程序进一步调用下单函数时作为输入项之一传入。 另一种则是基于机器学习模型训练自定义分类器自行搭建一套完整的预测体系,不过这通常要求开发者具备一定算法理论基础并且掌握深度神经网络框架TensorFlow/Keras等相关技能才能较好地胜任这项任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值