发送邮件是个很简单的需求,但是在实际的使用中依然碰到了很多坑,因此创建了zmail这个项目,让你使用python发送邮件的过程尽可能简单。
GitHub:https://github.com/ZYunH/zmail
其他轮子的缺点:
服务端拒信:首要问题。很多其他的轮子需要自己构造MIME和邮件头(通常优化了过程),但经常遭遇拒信,具体原因是其没有正确的定义邮件头,诸如From和To的头信息在使用SMTP时每家服务商检查都会有细微的差别,以及一些平台的差异(win10 localhost乱码导致发件拒信),甚至在你发往不同的地址检查也会有差别(国内发国外需要额外验证一些信息预防垃圾邮件)。
构造太麻烦:特别是添加附件的时候,有些还需要额外去自定义类型,体验很差。
发送太麻烦:你需要找到你服务商的smtp地址,端口号,有些服务商不是默认的端口(@http://163.com),有些只能SSL验证(@http://qq.com),有些需要TLS(@gmailcom),一个不小心就发送失败。
解析邮件复杂:Bytes坑多,还有boundary,各种格式乱码错误
引入过多的外部包:一些轮子引入了好几个包,可能会造成包与原来的程序版本冲突(常见于requests之类的包),并且发生错误无法得到及时的文档支持。在我尝试发送失败后,使用django的email模块成功发送了邮件,但是django的目的显然不是这个,使用一个如此大的框架来实现那么小的需求显然不合理(并且构造过程依然复杂)。
Zmail的优势:
自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)
将一个字典映射为email,构造信件就像构造字典一样简单
自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)
只依赖于python3,嵌入其他项目时无需烦恼
你可以使用zmail来:
作为监控脚本的发送&接收邮件模块,及时传递信息
嵌入到已有的项目中实现邮件功能
自定义邮件发送过程,诸如准点发送、定时发送、自动监控等
安装
pip install zmail
也可以使用pip代替pip3
注意:zmail仅支持python3,不支持python2,使用前所有邮箱都要开启SMTP功能,@http://163.com和@http://gmail.com 的邮箱需要额外设定SMTP密码,网上很多信息,具体自行百度google,这里先行省略。
发送普通文本邮件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import zmail
# 你的邮件内容
mail_content = {
'subject':'Success!',# 随便填写
'content':'This message from zmail!',# 随便填写
}
# 使用你的邮件账户名和密码登录服务器
server = zmail.server('[email protected]', 'zhangzenan520')
# 发送邮件
server.send_mail('[email protected]', mail_content)
- 发送带附件的邮件
mail_content = {
'subject': 'Success!',# 随便填写
'content': 'This message from zmail!',# 随便填写
'attachments': 'C:/Users/mac/Desktop/novel.csv',# 最好使用绝对路径,若你电脑没有这个文件会造成错误
}
- 批量发送邮件
# 发送邮件
server.send_mail(['[email protected]', '[email protected]'], mail_content)
- 添加额外的头信息,直接加入到mail_content即可
取回你的邮件
- 取得最新的邮件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import zmail
server = zmail.server('[email protected]', 'zhangzenan520')
mail = server.get_latest()
print(mail)
- 依据id取回邮件
mail = server.get_mail(2)
- 依据 (subject,after,before,sender)取回一个列表的邮件
mail = server.get_mails(subject='GitHub', after='2018-1-1', sender='github')
示例中, 如果 'GitHub' 在邮件的主题中,这封邮件将会被匹配, 例如' [GitHub] Your password has changed'
sender亦是如此
- 得到所有邮件的头文件信息.一个由字典组成的列表,每个字典包含了所有能够提取的头文件.
mail_info = server.get_info()
- 得到邮箱的信息
mailbox_info = server.stat()
结果为包含两个整型的元组: (邮件的数量, 邮箱的大小).
解析你的邮件
在zmail中,接收到的邮件被映射为一个字典,你可以通过访问python字典的形式来访问你的邮件,字典中的所有key在下方邮件结构中有列出,例如
subject = mail['subject']
展示你的邮件,使用 zmail.show()
import zmail
server = zmail.server('[email protected], 'yourpassword')
mail = server.get_latest()
zmail.show(mail)
输出 :
-------------------------
date 2018-3-9 07:00:02 +0800
from "OSChina.NET" <[email protected]>
to "[email protected]" <[email protected]>
subject 开源中国一周精彩回顾 ?? Spring Boot 2.0 重磅发布
content-type multipart/mixed; boundary="----=_Part_1661574_1917162864.1520550002179"
boundary b'----=_Part_1661574_1917162864.1520550002179'
content None
contents [[b'Content-Type: text/html; charset=GB2312', b'Content-Transfer-Encoding: quoted-printable', b'', b'<h2 style=3D"color: #008000; margin: 10px 0;">=BF=AA=D4=B4=D6=D0=B9=FA ( <a=', b' href=3D"http://www.oschina.net/?from=3D20180304">www.oschina.net</a> ) =D2=', b'=BB=D6=DC=BE=AB=B2=CA=BB=D8=B9=CB</h2>', b'<h2 style=3D"color: #008000; margin: 10px 0;"></h2>', b'<hr />', b'<ul style=3D"list-style-type: none; padding: 0; margin: 10px 0 0 0;">', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-04</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://my.oschina.net/taogang/blog/1627590?from=3D20180304">=C3=BF=', b'=C8=D5=D2=BB=B2=A9 | =C8=E7=BA=CE=BC=F2=B5=A5=C0=FB=D3=C3 Tensorflow =C7=F3=', b'=BD=E2=BC=B8=BA=CE=CE=CA=CC=E2</a></span> <span style=3D"color: #666; font-=', b'size: 9pt;">Tensorflow=CA=C7google=BF=AA=D4=B4=B5=C4=D2=BB=BF=EE=C9=EE=B6=', b'=C8=D1=A7=CF=B0=B5=C4=B9=A4=BE=DF=A3=AC=C6=E4=CA=B5=CE=D2=C3=C7=BF=C9=D2=D4=', b'=C0=FB=D3=C3Tensoflow=CC=E1=B9=A9=C1=CB=C7=BF=B4=F3=B5=C4=CA=FD=D1=A7=BC=C6=', b'=CB=E3=C4=DC=C1=A6=C0=B4=C7=F3=BD=E2=C0=E0=CB=C6=B5=C4=CA=FD=D1=A7=CE=CA=CC=', b'=E2=A1=A3</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-04</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/p/angular-instantsearch?from=3D20180304">Angu=', b'lar InstantSearch —— Angular =D7=A8=D3=C3=B0=E6=CB=D1=CB=F7=D7=', b'=E9=BC=FE</a></span> <span style=3D"color: #666; font-size: 9pt;">Angular I=', b'nstantSearch =CA=C7 Algolia =B7=A2=B2=BC=B5=C4 Angular&=', b'nbsp;=D7=A8=D3=C3=B0=E6=B5=C4=C7=B0=B6=CB=CB=D1=CB=F7=D7=E9=BC=FE=A3=AC=C4=', b'=DA=BA=AC20=B8=F6=BF=AA=CF=E4=BC=B4=D3=C3=B5=C4=D7=E9=BC=FE=A1=A3</span> </=', b'li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-04</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93868/mariadb-set-innovation-lab?from=3D=', b'20180304">MariaDB =B3=C9=C1=A2=B4=B4=D0=C2=CA=B5=D1=E9=CA=D2=A3=AC=D1=D0=BE=', b'=BF=BB=FA=C6=F7=D1=A7=CF=B0=BA=CD=B7=D6=B2=BC=CA=BD=BC=C6=CB=E3</a></span> =', b'<span style=3D"color: #666; font-size: 9pt;">=BF=AA=D4=B4=CA=FD=BE=DD=BF=E2=', b' MariaDB =BD=FC=C8=D5=D0=FB=B2=BC=D5=FD=D4=DA=B3=C9=C1=A2=D2=BB=B8=F6=', b'=D6=BC=D4=DA=BD=E2=BE=F6=CA=FD=BE=DD=BF=E2=C1=EC=D3=F2=D7=EE=BD=F4=C6=C8=CE=', b'=CA=CC=E2=B5=C4=D1=D0=BE=BF=B2=BF=C3=C5——=B4=B4=D0=C2=CA=B5=D1=', b'=E9=CA=D2=A3=AC=CA=B5=D1=E9=CA=D2=BD=AB=D6=D8=B5=E3=B9=D8=D7=A2=C8=FD=B8=F6=', b'=B9=D8=BC=FC=C1=EC=D3=F2=A3=BA=BB=FA=C6=F7=D1=A7=CF=B0=A1=A2=B7=D6=B2=BC=CA=', b'=BD=BC=C6=CB=E3=D2=D4=BC=B0=D0=C2=D0=BE=C6=AC=B5=C4=CA=B9=D3=C3=BA=CD=BF=AA=', b'=B7=A2=A3=AC=D2=D4=BC=B0=B3=D6=BE=C3=D0=D4=B4=E6=B4=A2=BA=CD=C4=DA=B4=E6=D6=', b'=D0=B4=A6=C0=ED=A1=A3 =BE=DD=CF=A4=A3=AC=D4=DA=BB=FA=C6=F7=D1=A7=CF=B0=B7=', b'=BD=C3=E6=A3=AC=CA=B5=D1=E9=CA=D2=BD=AB=B8=BA=D4=F0=D1=D0=BE=BF=C8=E7=BA=CE=', b'=CA=B9=D3=C3=D3=D0=BC=E0=B6=BD=BA=CD=CE=DE=BC=E0=B6=BD=BC=BC=CA=F5=C0=B4=B4=', b'=D9=BD=F8=B8=FC=BA=C3=B5=C4=D7=D4=B6=AF=BB=AF=A3=AC=B0=FC=C0=A8=D4=DA=D4=C6=', b'=D6=D0=D4=CB=D0=D0=CA=FD...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-04</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93867/android-p-dp1-mid-month-release?fr=', b'om=3D20180304">=CA=D7=B8=F6 Android P =BF=AA=B7=A2=D5=DF=D4=A4=C0=C0=B0=E6=', b'=D3=D0=CD=FB=D4=DA 3 =D4=C2=D6=D0=D1=AE=B7=A2=B2=BC</a></span> <span style=', b'=3D"color: #666; font-size: 9pt;">=BE=A1=B9=DC=BE=E0=C0=EB5 =D4=C2 8 =C8=D5=', b'=B5=C4 Google I / O =B4=F3=BB=E1=BB=B9=D3=D0=D0=A9=C8=D5=D7=D3=A3=', b'=AC=B5=AB=B0=B4=BD=FC=C1=BD=C4=EA=B5=C4=B2=D9=D7=F7=C4=A3=CA=BD=A3=AC=CB=D1=', b'=CB=F7=BE=DE=CD=B7=D3=D0=CD=FB=D4=DA=B4=F3=BB=E1=D6=AE=C7=B0=B7=A2=B2=BC=D0=', b'=C2=B0=E6 Android =CF=B5=CD=B3=B5=C4=BF=AA=B7=A2=D5=DF=D4=A4=C0=', b'=C0=B0=E6=A1=A3 =BE=DD=B1=AC=C1=CF=B4=F3=C9=F1 Evan Blass =CD=B8=C2=B6=', b'=A3=AC=BD=F1=C4=EA Android P =B5=C4=CA=D7=B8=F6=BF=AA=B7=A2=D5=DF=D4=A4=C0=', b'=C0=B0=E6=BD=AB=D4=DA 3 =D4=C2=D6=D0=D1=AE=B7=A2=B2=BC=A1=A3=C8=A5=C4=EA=B5=', b'=C4 3 =D4=C2 21 =C8=D5=A3=ACGoogle =B7=A2=B2=BC=C1=CB=CA=D7=B8=F6 Android O=', b' =B5=C4=BF=AA=B7=A2=D5=DF=D4=A4=C0=C0=B0=E6=A1=A3 =B4=CB=C7=B0=A3=AC=', b'=CB=E6=D7=C5=D4=BD=C0=B4=D4=BD...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-03</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/p/gcanvas?from=3D20180304">GCanvas —&md=', b'ash; =CC=D4=B1=A6=BF=AA=D4=B4=B5=C4=D2=C6=B6=AF=B6=CB=BF=E7=C6=BD=CC=A8=E4=', b'=D6=C8=BE=D2=FD=C7=E6</a></span> <span style=3D"color: #666; font-size: 9pt=', b';">GCanvas =CA=C7=D3=C9=CC=D4=B1=A6=BF=AA=B7=A2=B5=C4=D5=EB=B6=D4=D2=C6=B6=', b'=AF=C9=E8=B1=B8=B5=C4=BF=E7=C6=BD=CC=A8=E4=D6=C8=BE=D2=FD=C7=E6=A1=A3 =CB=', b'=FC=CA=B9=D3=C3 C ++ =B1=E0=D0=B4=A3=AC=BB=F9=D3=DA OpenGL ES=A3=AC=BF=C9=', b'=CE=AA Javascript =D4=CB=D0=D0=CA=B1=CC=E1=B9=A9=B8=DF=D0=D4=C4=DC=B5=C4 2D=', b' / WebGL =E4=D6=C8=BE=A1=A3</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-03</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93846/2018-software-development-predicti=', b'on?from=3D20180304">10 =CC=F5=B9=D8=D3=DA 2018 =C4=EA=C8=ED=BC=FE=BF=AA=B7=', b'=A2=B5=C4=D4=A4=B2=E2=A3=AC=B2=BB=BD=F6=BD=F6=CA=C7=C7=F8=BF=E9=C1=B4&helli=', b'p;…</a></span> <span style=3D"color: #666; font-size: 9pt;">=C7=F8=', b'=BF=E9=C1=B4=A1=A2NLP=A1=A2AI=C7=FD=B6=AF=B5=C4=B9=A4=BE=DF=A1=A2=BB=FA=C6=', b'=F7=D1=A7=CF=B0=A1=A2=CE=DE=B7=FE=CE=F1=C6=F7=BC=C6=CB=E3=BA=CDdevops=B4=B4=', b'=D0=C2=BD=AB=D4=DA2018=C4=EA=B8=C4=B1=E4=BF=AA=B7=A2=D5=DF=B5=C4=C9=FA=BB=', b'=EE=A1=A3 =BF=AA=B7=A2=C8=CB=D4=B1=D3=A6=B8=C3=B6=D42018=C4=EA=B5=C4=BB=FA=', b'=D3=F6=B8=D0=B5=BD=D0=CB=B7=DC=A3=AC=B2=FA=C6=B7=BA=CD=B9=A4=BE=DF=CE=A7=C8=', b'=C6=D7=C5=D6=EE=C8=E7=C7=F8=BF=E9=C1=B4=A1=A2=C1=C4=CC=EC=BB=FA=C6=F7=C8=CB=', b'=A1=A2=CE=DE=B7=FE=CE=F1=C6=F7=B9=A6=C4=DC=BA=CD=BB=FA=C6=F7=D1=A7=CF=B0=B5=', b'=C8=BC=BC=CA=F5=D4=DA=CF=D6=CA=B5=CA=C0=BD=E7=B5=C4=CF=EE=C4=BF=D6=D0=B1=E4=', b'=B5=C3=D7=E3=B9=BB=B3=C9=CA=EC=A1=A3=D3=EB=B4=CB=CD=AC=CA=B1=A3=AC=D0=ED=B6=', b'=E0=BF=AA=B7=A2=C8=CB=D4=B1=BB=E1=B5=A3=D0=C4=A3=AC=D4=DA=B2=BB=D3=B0=CF=EC=', b'=B0=B2=C8=AB=D0=D4=BA=CD=D0=D4=C4=DC=B5=C4=C7=B0=CC=E1=CF=C2=A3=AC=CB=FB=C3=', b'=C7=BD=AB=CE=DE=B7=A8=B8=FC...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-03</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93837/orientdb-v-3-0-0-rc2-released?from=', b'=3D20180304">=B6=E0=C4=A3=D0=CD NoSQL =CA=FD=BE=DD=BF=E2 OrientDB =B7=A2=B2=', b'=BC 3.0 =B5=DA=B6=FE=B8=F6=BA=F2=D1=A1=B0=E6</a></span> <span style=3D"colo=', b'r: #666; font-size: 9pt;">OrientDB 3.0 =B5=C4=B5=DA=B6=FE=B8=F6=BA=F2=D1=A1=', b'=B0=E6=B1=BE=D2=D1=B7=A2=B2=BC=A3=AC=D0=C2=B0=E6=CC=E1=C9=FD=C1=CB=D0=D4=C4=', b'=DC=BA=CD=CB=D9=B6=C8=A3=AC=B2=A2=B4=F8=C0=B4=B8=FC=BA=C3=B5=C4=B0=B2=C8=AB=', b'=D0=D4=A3=AC=D6=C2=C1=A6=D3=DA=CE=AA=B6=E0=C4=A3=D0=CD=CA=FD=BE=DD=BF=E2=BD=', b'=A8=C1=A2=D0=C2=B1=EA=D7=BC=A1=A3 =D3=D0=B9=D8=B9=A6=C4=DC=B5=C4=CD=EA=D5=', b'=FB=C1=D0=B1=ED=A3=AC=C7=EB=B2=CE=D4=C4 OrientDB 3.0 =B7=A2=D0=D0=CB=B5=C3=', b'=F7=A1=A3=B6=F8=D4=DA OrientDB =CA=B5=D1=E9=CA=D2=D2=B3=C3=E6=D6=D0=A3=', b'=AC=B8=C5=CA=F6=C1=CB=D7=EE=D0=C2=B0=E6=B1=BE=B5=C4=D2=BB=D0=A9=D6=F7=D2=AA=', b'=B9=A6=C4=DC=A1=A3=D2=AA=C1=CB=BD=E2=D3=D0=B9=D8=CB=D9=B6=C8=CC=E1=C9=FD=B5=', b'=C4=B8=FC=B6=E0=D0=C5=CF=A2=A3=AC=C7=EB=B2=CE=D4=C4 OrientDB v3.0 =D7=BC=B1=', b'=B8=CA=B9=D3=C3=B5=C4=CF=C2=D2=BB=B4=FA Multi-Mo...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93826/gradle-4-6?from=3D20180304">Gradle=', b' 4.6 =D5=FD=CA=BD=B0=E6=B7=A2=B2=BC=A3=AC=D6=A7=B3=D6 JUnit5</a></span> <sp=', b'an style=3D"color: #666; font-size: 9pt;">Gradle 4.6 =B7=A2=B2=BC=C1=CB=A1=', b'=A3Gradle =CA=C7=D2=BB=B8=F6=BB=F9=D3=DA Apache Ant =BA=CD Apache Maven =B8=', b'=C5=C4=EE=B5=C4=CF=EE=C4=BF=D7=D4=B6=AF=BB=AF=B9=B9=BD=A8=B9=A4=BE=DF=A3=AC=', b'=D6=A7=B3=D6=D2=C0=C0=B5=B9=DC=C0=ED=BA=CD=B6=E0=CF=EE=C4=BF=A3=AC=C0=E0=CB=', b'=C6 Maven=A3=AC=B5=AB=B1=C8=D6=AE=BC=F2=B5=A5=C7=E1=B1=E3=A1=A3=CB=FC=CA=B9=', b'=D3=C3=D2=BB=D6=D6=BB=F9=D3=DA Groovy =B5=C4=CC=D8=B6=A8=C1=EC=D3=F2=D3=EF=', b'=D1=D4=C0=B4=C9=F9=C3=F7=CF=EE=C4=BF=C9=E8=D6=C3=A3=AC=B6=F8=B2=BB=CA=C7=B4=', b'=AB=CD=B3=B5=C4 XML =B8=FC=B6=E0=C4=DA=C8=DD=C7=EB=B2=E9=BF=B4=B7=A2=D0=D0=', b'=CB=B5=C3=F7=A1=A3 =C9=FD=BC=B6=B7=BD=CA=BD=A3=BA ./gradlew wrapper --gradl=', b'e-version=3D4.6 =CF=C2=D4=D8=B6=C0=C1=A2=B0=B2=D7=B0=B0=FC...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93806/alexa-top-1-million-analysis-febru=', b'ary-2018?from=3D20180304">Chrome =C1=A6=CD=C6 HTTPS=A3=AC=B5=AB HPKP =B2=C9=', b'=D3=C3=C2=CA=C8=B4=D6=B1=CF=DF=C9=CF=C9=FD</a></span> <span style=3D"color:=', b' #666; font-size: 9pt;">=CD=F8=D2=B3=B0=B2=C8=AB=D1=D0=BE=BF=D4=B1 Scott He=', b'lme =BD=FC=C8=D5=B7=A2=B1=ED=C1=CB=D1=D0=BE=BF=A3=AC=B7=D6=CE=F6=C1=CB Alex=', b'a =C7=B0 1 =B0=D9=CD=F2=B5=C4=CD=F8=D5=BE=A1=A3=D1=D0=BE=BF=CF=D4=CA=BE=A3=', b'=AC=D3=EB2017=C4=EA8=D4=C2=CF=E0=B1=C8=A3=AC=CA=B9=D3=C3 HTTPS =BC=BC=CA=F5=', b'=B5=C4=CD=F8=D5=BE=D5=BC=B1=C8=C9=CF=C9=FD 7 =B8=F6=B0=D9=B7=D6=B5=E3=A3=AC=', b'=D5=FB=CC=E5=D5=BC=B1=C8=B4=D3 30.78=A3=A5 =C9=CF=C9=FD=B5=BD 38.42=A3=A5=', b'=A3=AC=B5=AB Chrome =D3=EB Firefox =D0=FB=B2=BC=D2=AA=CD=A3=D6=B9=D6=A7=B3=', b'=D6=B5=C4 HTTP =B9=AB=B9=B2=C3=DC=D4=BF=B9=CC=B6=A8=A3=A8HTTP Public Key Pi=', b'nning, HPKP=A3=A9=A3=AC=C8=B4=D4=DA=D5=E2=CA=B1=BA=F2=B3=CA=CF=D6=C3=F7=CF=', b'=D4=B3=C9=B3=A4=B5=C4=C7=F7=CA=C6=A1=A3...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93799/apache-fluo-1-2-0?from=3D20180304"=', b'>Apache Fluo 1.2.0 =B7=A2=B2=BC=A3=AC=B4=F3=B9=E6=C4=A3=CA=FD=BE=DD=BC=AF=', b'=D4=F6=C1=BF=B4=A6=C0=ED=CF=B5=CD=B3</a></span> <span style=3D"color: #666;=', b' font-size: 9pt;">Apache Fluo 1.2.0 =D2=D1=B7=A2=B2=BC=A3=ACFluo =CA=', b'=C7 Google Percolator=A3=A8=CB=D1=CB=F7=CB=F7=D2=FD=A3=A9=B5=C4=BF=AA=', b'=D4=B4=CA=B5=CF=D6=A3=AC=D4=CA=D0=ED=D3=C3=BB=A7=B6=D4=B4=E6=B4=A2=D4=DA Ap=', b'ache Accumulo =D6=D0=B5=C4=B4=F3=D0=CD=CA=FD=BE=DD=BC=AF=BD=F8=D0=D0=D4=F6=', b'=C1=BF=B8=FC=D0=C2=A3=AC=B6=F8=CE=DE=D0=E8=D6=D8=D0=C2=B4=A6=C0=ED=CB=F9=D3=', b'=D0=B5=C4=CA=FD=BE=DD=A1=A3=D3=EB=C5=FA=B4=A6=C0=ED=BA=CD=C1=F7=B4=A6=C0=ED=', b'=BF=F2=BC=DC=B2=BB=CD=AC=B5=C4=CA=C7=A3=ACFluo =CC=E1=B9=A9=C1=CB=B8=FC=B5=', b'=CD=B5=C4=D1=D3=B3=D9=A3=AC=B2=A2=C7=D2=BF=C9=D2=D4=D4=DA=BC=AB=B4=F3=B5=C4=', b'=CA=FD=BE=DD=BC=AF=C9=CF=D4=CB=D0=D0=A1=A3 =D4=DA 1.2.0 =D6=AE=C7=B0=A3=ACF=', b'luo =D3=A6=D3=C3=D6=BB=C4=DC=D2=D4 YARN =BB=F2=D7=F7=CE=AA=B1=BE=B5=D8=BD=', b'=F8...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93797/kontena-1-5-0?from=3D20180304">Kon=', b'tena 1.5.0 =B7=A2=B2=BC=A3=AC=BF=AA=D4=B4=C8=DD=C6=F7=BA=CD=CE=A2=B7=FE=CE=', b'=F1=C6=BD=CC=A8</a></span> <span style=3D"color: #666; font-size: 9pt;">Kon=', b'tena =CA=C7=D2=BB=B8=F6=BF=AA=B7=A2=D3=D1=BA=C3=B5=C4=BF=AA=D4=B4=C6=BD=CC=', b'=A8=A3=AC=D3=C3=D3=DA=B1=E0=C5=C5=D4=DA Docker =C8=DD=C6=F7=C9=CF=D4=CB=D0=', b'=D0=B5=C4=D3=A6=D3=C3=A3=AC=CC=E1=B9=A9=D4=C6=BB=F9=B4=A1=C9=E8=CA=A9=C9=CF=', b'=C8=DD=C6=F7=BB=AF=D3=A6=D3=C3=B5=C4=B2=BF=CA=F0=A1=A2=B9=DC=C0=ED=A1=A2=B2=', b'=E2=C1=BF=BA=CD=BC=E0=BF=D8=B9=A4=BE=DF=A1=A3 Kontena 1.5.0 =D2=D1=B7=A2=B2=', b'=BC=A3=AC=B8=C3=B0=E6=B1=BE=B2=BB=D4=D9=D6=A7=B3=D6 Ruby 2.1 =A3=AC=', b'=B0=B2=D7=B0=B3=CC=D0=F2=C4=AC=C8=CF=C0=A6=B0=F3=B5=C4=CA=C7 Ruby 2.5.0 =A1=', b'=A3 =C6=E4=CB=FB=C1=C1=B5=E3=B0=FC=C0=A8=A3=BA =B0=B2=C8=AB=D0=D4=B8=C4=BD=', b'=F8 Options After Parameters Kontena Stack Registry V2 API =BA=CD=D0=C2...<=', b'/span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93794/wildfly12-final-released?from=3D20=', b'180304">WildFly 12 Final =B7=A2=B2=BC=A3=ACJava =D3=A6=D3=C3=B7=FE=CE=F1=C6=', b'=F7</a></span> <span style=3D"color: #666; font-size: 9pt;">WildFly 12 Fina=', b'l =D2=D1=B7=A2=B2=BC=A3=AC=BF=C9=B4=D3=D5=E2=C0=EF=CF=C2=D4=D8=A1=A3 WildFl=', b'y=A3=AC=D4=AD=C3=FB JBoss AS =BB=F2=D5=DF JBoss=A3=AC=CA=C7=D2=BB=CC=D7=D3=', b'=A6=D3=C3=B3=CC=D0=F2=B7=FE=CE=F1=C6=F7=A3=AC=CA=F4=D3=DA=BF=AA=D4=B4=B5=C4=', b'=C6=F3=D2=B5=BC=B6 Java =D6=D0=BC=E4=BC=FE=C8=ED=BC=FE=A3=AC=D3=', b'=C3=D3=DA=CA=B5=CF=D6=BB=F9=D3=DA SOA =BC=DC=B9=B9=B5=C4 Web =D3=A6=D3=C3=', b'=BA=CD=B7=FE=CE=F1=A1=A3WildFly =B0=FC=BA=AC=D2=BB=D7=E9=BF=C9=B6=C0=C1=A2=', b'=D4=CB=D0=D0=B5=C4=C8=ED=BC=FE=A1=A3 =B8=C3=B0=E6=B1=BE=D0=C2=D4=F6=C1=CB=', b'=B6=D4=D0=ED=B6=E0 EE8 =B5=C4=D0=C2=B1=EA=D7=BC=B5=C4=D6=A7=B3=D6=A1=', b'=A3=B5=AB=D0=E8=D7=A2=D2=E2=B5=C4=CA=C7=A3=AC=C4=AC=C8=CF=C7=E9=BF=F6=CF=C2=', b'=A3=ACWildFly 12 =C4=BF=C7=B0=CA=C7=D2=D4 EE...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93793/infinispan-9-2-0-final?from=3D2018=', b'0304">Infinispan 9.2.0.Final =B7=A2=B2=BC=A3=AC=B7=D6=B2=BC=CA=BD=BC=AF=C8=', b'=BA=BB=BA=B4=E6=CF=B5=CD=B3</a></span> <span style=3D"color: #666; font-siz=', b'e: 9pt;">Infinispan 9.2.0.Final =D2=D1=B7=A2=B2=BC=A3=AC=C3=FC=C3=FB=', b'=CE=AA "Gaina" =A1=A3 =B8=C3=B0=E6=B1=BE=B0=FC=BA=AC=B4=F3=C1=BF=B8=C4=BD=', b'=F8=BA=CD=D0=DE=B8=B4=A3=AC=C6=E4=D6=D0 Core =B8=C4=BD=F8=B2=BF=B7=D6=C8=E7=', b'=CF=C2=A3=BA Conflict resolution Automatic conflict resolution after a part=', b'ition merge is now supported for all partition handling strategies and is e=', b'nabled by default. Furthermore, it is now possible to deplo...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-02</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93792/arquillian-core-1-4-0-final?from=', b'=3D20180304">Arquillian Core 1.4.0.Final =B7=A2=B2=BC=A3=AC=C0=A9=D5=B9=B1=', b'=ED=B4=EF=CA=BD=D3=EF=D1=D4</a></span> <span style=3D"color: #666; font-siz=', b'e: 9pt;">Arquillian =CD=C5=B6=D3=D2=D1=B7=A2=B2=BC Arquillian Core =D7=', b'=E9=BC=FE=B5=C4 1.4.0.Final =B0=E6=B1=BE=A3=AC=B4=CB=B0=E6=B1=BE=CA=B5=', b'=CF=D6=C1=CB=D3=C3=D7=D4=BC=BA=B5=C4=B7=BD=B7=A8=C8=A5=BD=E2=CE=F6=D6=B5=A3=', b'=AC=B6=F8=B2=BB=D4=D9=BD=F6=BD=F6=CA=C7=CA=B9=D3=C3=CF=B5=CD=B3=CA=F4=D0=D4=', b'=BB=F2=BB=B7=BE=B3=B1=E4=C1=BF=A1=A3=BE=DF=CC=E5=B8=FC=D0=C2=C4=DA=C8=DD=C8=', b'=E7=CF=C2=A3=BA Enhancement ARQ-2177 - =D4=DA arquillian =C5=E4=D6=C3=', b'=D6=D0=C0=A9=D5=B9=B1=ED=B4=EF=CA=BD=D3=EF=D1=D4 Bug ARQ-2175 - =', b'=D0=DE=B8=B4=B2=BF=CA=F0 ExceptionHandler =D3=D0=CA=B1=BF=C9=D2=D4=BD=AB nu=', b'll =B4=AB=B5=DD=B8=F8=B1=E4=BB=BB=C6=F7=B5=C4=CE=CA=CC=E2 =C1=CB=BD=E2=B8=', b'=FC...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-01</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93784/apache-spark-2-3-0?from=3D20180304=', b'">Apache Spark 2.3.0 =D5=FD=CA=BD=B7=A2=B2=BC=A3=AC=B8=C4=BD=F8=BF=C9=D3=C3=', b'=D0=D4=BA=CD=CE=C8=B6=A8=D0=D4</a></span> <span style=3D"color: #666; font-=', b'size: 9pt;">Apache Spark 2.3.0 =D5=FD=CA=BD=B7=A2=B2=BC=A3=AC=D5=E2=D2=B2=', b'=CA=C7 2.x =CF=B5=C1=D0=D6=D0=B5=C4=B5=DA=CB=C4=B8=F6=B0=E6=B1=BE=A1=A3=B4=', b'=CB=B0=E6=B1=BE=D4=F6=BC=D3=C1=CB=B6=D4 Structured Streaming =D6=D0=B5=C4 C=', b'ontinuous Processing =D2=D4=BC=B0=C8=AB=D0=C2=B5=C4 Kubernetes Scheduler =', b'=BA=F3=B6=CB=B5=C4=D6=A7=B3=D6=A1=A3=C6=E4=CB=FB=D6=F7=D2=AA=B8=FC=D0=C2=B0=', b'=FC=C0=A8=D0=C2=B5=C4 DataSource =BA=CD Structured Streaming v2 API=A3=AC=', b'=D2=D4=BC=B0=D2=BB=D0=A9 PySpark =D0=D4=C4=DC=D4=F6=C7=BF=A1=A3 =B4=CB=CD=', b'=E2=A3=AC=B4=CB=B0=E6=B1=BE=BC=CC=D0=F8=D5=EB=B6=D4=CF=EE=C4=BF=B5=C4=BF=C9=', b'=D3=C3=D0=D4=A1=A2=CE=C8=B6=A8...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-01</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93781/spring-boot-2-0-goes-ga?from=3D201=', b'80304">Spring Boot 2.0.0 =D6=D5=D3=DA=D5=FD=CA=BD=B7=A2=B2=BC=A3=AC=D6=D8=', b'=B4=F3=D0=DE=B6=A9=B0=E6=B1=BE</a></span> <span style=3D"color: #666; font-=', b'size: 9pt;">=B1=B1=BE=A9=CA=B1=BC=E4 2018 =C4=EA 3 =D4=C2 1 =C8=D5=D4=E7=C9=', b'=CF=A3=AC=C8=E7=D4=BC=B7=A2=B2=BC=B5=C4 Spring Boot 2.0 =D4=DA=CD=AC=B2=BD=', b'=D6=C1 Maven =B2=D6=BF=E2=CA=B1=B3=F6=CF=D6=CE=CA=CC=E2=A3=AC=B5=BC=D6=C2=', b'=D4=DA GitHub =C9=CF=B7=A2=B2=BC=B5=C4 v2.0.0.RELEASE =B1=BB=B3=B7=BB=D8=A1=', b'=A3=C4=BF=C7=B0=CE=CA=CC=E2=D2=D1=D0=DE=B8=B4=A3=AC=B9=D9=B7=BD=D6=D8=D0=C2=', b'=B7=A2=B2=BC=C1=CB Spring Boot 2.0=A3=AC=B2=A2=CC=E1=B9=A9=C1=CB Maven =D6=', b'=D0=D1=EB=B2=D6=BF=E2=B5=D8=D6=B7=A1=A3 =CA=B9=D3=C3 Spring Boot 2.0.0 GA M=', b'aven org.springframework.boot...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-03-01</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93758/tensorflow-1-6-0?from=3D20180304">=', b'TensorFlow 1.6.0 =D5=FD=CA=BD=B7=A2=B2=BC=A3=AC=B4=F8=C0=B4=B6=E0=CF=EE=D3=', b'=C5=BB=AF=BA=CD=B8=C4=BD=F8</a></span> <span style=3D"color: #666; font-siz=', b'e: 9pt;">TensorFlow 1.6.0 =D2=D1=D5=FD=CA=BD=B7=A2=B2=BC=A3=AC=B4=F8=', b'=C0=B4=D2=D4=CF=C2=CD=BB=C6=C6=D0=D4=B8=C4=B1=E4=A3=BA =CF=D6=D4=DA=D4=A4=', b'=B9=B9=BD=A8=B5=C4=B6=FE=BD=F8=D6=C6=CE=C4=BC=FE=CA=C7=D5=EB=B6=D4 CUDA 9.0=', b' =BA=CD cuDNN 7 =B9=B9=BD=A8=B5=C4=A1=A3 =D4=A4=B1=E0=D2=EB=B5=C4=B6=FE=BD=', b'=F8=D6=C6=CE=C4=BC=FE=BD=AB=CA=B9=D3=C3 AVX =D6=B8=C1=EE=A1=A3=D5=E2=BF=C9=', b'=C4=DC=BB=E1=C6=C6=BB=B5=BD=CF=BE=C9=B5=C4 CPU =C9=CF=B5=C4 TF =A1=A3 =D6=', b'=F7=D2=AA=CC=D8=D0=D4=BA=CD=B8=C4=BD=F8 =D5=EB=B6=D4=B7=C7=B2=E5=B2=DB=B1=', b'=E4=C1=BF=B5=C4=D0=C2=B5=C4=C4=DA=B2=BF=D3=C5=BB=AF API =A1=A3 tf.estimator=', b'.{FinalExporter,LatestExporter} =CF=D6=D4=DA=BF=C9=B5=BC=B3=F6=B1=BB=', b'=B0=FE=C0=EB=B5=C4 Save...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-02-28</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93726/junit-5-1-0?from=3D20180304">JUnit=', b' 5.1.0 =B7=A2=B2=BC=A3=AC=B8=C4=BD=F8=B6=D4 Java 9 =C4=A3=BF=E9=BB=AF=BA=CD=', b' Kotlin =B5=C4=D6=A7=B3=D6</a></span> <span style=3D"color: #666; font-size=', b': 9pt;">JUnit 5.1.0 =D2=D1=B7=A2=B2=BC=A3=AC=D6=F7=D2=AA=B8=FC=D0=C2=C4=DA=', b'=C8=DD=B0=FC=C0=A8=A3=BA Java 9 =C4=A3=BF=E9=BB=AF Discovering =B2=E2=CA=D4=', b' =B8=C4=BD=F8 Kotlin =D6=A7=B3=D6 =CD=A8=B9=FD @RegisterExtension =C0=', b'=A9=D5=B9=B1=E0=B3=CC=B7=BD=CA=BD=C5=E4=D6=C3 =B1=EA=BC=C7=B1=ED=B4=EF=CA=', b'=BD=D3=EF=D1=D4=A3=AC=D2=D4=B9=FD=C2=CB=D2=AA=D6=B4=D0=D0=B5=C4=B2=E2=CA=D4=', b' =B8=C4=BD=F8=B2=CE=CA=FD=BB=AF=B2=E2=CA=D4=B1=E0=D0=B4 =B8=C4=BD=F8 E=', b'xtensionContext API =D6=A7=B3=D6=D4=DA IDE =D6=D0=D6=D8=D0=C2=D4=CB=D0=', b'=D0=B5=A5=B8=F6=B6=AF=CC=AC=B2=E2=CA=D4=A1=A2=B2=CE=CA=FD=BB=AF=B2=E2=CA=D4=', b'=BA=CD=B2=E2=CA=D4=C4=A3=B0=E5=B5=F7=D3=C3 =CD=EA=D5=FB=B8=FC=D0=C2=C4=DA=', b'=C8=DD=C7=EB=B2=E9=D4=C4=A3=BA http...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-02-27</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93696/jaxenter-survey-preliminary-result=', b's?from=3D20180304">2018 =B1=E0=B3=CC=D3=EF=D1=D4=B9=D8=D7=A2=B6=C8=B5=F7=B2=', b'=E9=A3=BAJava 9 =B9=D8=D7=A2=B6=C8=C9=CF=C9=FD</a></span> <span style=3D"co=', b'lor: #666; font-size: 9pt;">JAXenter =B6=D4=C1=F7=D0=D0=B6=C8=B1=C8=BD=CF=', b'=B8=DF=B5=C4=BC=B8=C3=C5=B1=E0=B3=CC=D3=EF=D1=D4=BD=F8=D0=D0=C1=CB=B5=F7=B2=', b'=E9=A3=AC=C1=CB=BD=E2=D3=C3=BB=A7=B6=D4=CB=FC=C3=C7=B5=C4=CF=B2=B0=AE=B6=C8=', b'=D3=EB=B9=D8=D7=A2=B3=CC=B6=C8=A1=A3 Java =CA=FD=BE=DD=CF=D4=CA=BE=A3=AC42=', b'=A3=A5 =B5=C4=CA=DC=B7=C3=D5=DF=B6=D4=BE=C9=B0=E6=B1=BE=B5=C4=D3=EF=D1=D4=', b'=B8=FC=B8=D0=D0=CB=C8=A4=A1=A3=C8=C3=C8=CB=D2=E2=CF=EB=B2=BB=B5=BD=B5=C4=CA=', b'=C7=A3=AC62=A3=A5 =B5=C4=C8=CB=CF=A3=CD=FB=D4=DA 2018 =C4=EA=B8=FC=B6=E0=B5=', b'=D8=B9=D8=D7=A2 Java 9=A3=AC=B2=A2=C7=D2=D6=BB=D3=D0=CE=E5=B7=D6=D6=AE=D2=', b'=BB=B5=C4=CA=DC=B7=C3=D5=DF=C8=CF=CE=AA Java 9 =C3=BB=D3=D0=D2=E2=D2=E5=A1=', b'=A3 =D2=B2=D3=D0=C8=FD=B7=D6=D6=AE=D2=BB=B5=C4=B2=CE=D3=EB=D5=DF=B1=ED=CA=', b'=BE=B6=D4=BC=B4=BD=AB=B5=BD=C0=B4=B5=C4=B0=E6=B1=BE=A3=A8Java 10 =BA=CD ...=', b'</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-02-26</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93664/mongodb-4-will-support-multi-docum=', b'ent-transaction?from=3D20180304">MongoDB 4.0 =BD=AB=D3=D0=CD=FB=D6=A7=B3=D6=', b'=BF=E7=CE=C4=B5=B5=CA=C2=CE=F1</a></span> <span style=3D"color: #666; font-=', b'size: 9pt;">=D4=A4=BC=C62018=C4=EA=CF=C4=CC=EC=C9=CF=CA=D0=B5=C4 MongoDB 4.=', b'0=A3=AC=D4=A4=BC=C6=BD=AB=D6=A7=B3=D6=BF=E7=CE=C4=B5=B5=CA=C2=CE=F1=A3=A8Mu=', b'lti-Document Transactions=A3=A9=A3=AC=D2=D4=B1=A3=D6=A4=D7=CA=C1=CF=CD=EA=', b'=D5=FB=D0=D4=A3=A8Data Integrity=A3=A9=A1=A3=BF=E7=CE=C4=B5=B5=CA=C2=CE=F1=', b'=CA=C7 ACID =B5=C4=BB=F9=CA=AF=A1=A3MongoDB =D7=D4 3.0 =B0=E6=C6=F0=A3=AC=', b'=BF=AA=CA=BC=D6=A7=B3=D6=BF=E7=CE=C4=B5=B5=CA=C2=CE=F1=A1=A3=D4=DA 3.0 =B0=', b'=E6=D6=D0=A3=ACMongoDB =BE=DF=B1=B8=C1=CB=B6=E0=B0=E6=B1=BE=B2=A2=B7=A2=BF=', b'=D8=D6=C6=A3=A8MVCC=A3=A9=BC=BC=CA=F5=A3=AC=B8=C3=BC=BC=CA=F5=CA=C7=D2=BB=', b'=D6=D6=BF=EC=D5=D5=B8=F4=C0=EB=BC=BC=CA=F5=A3=AC=CD=A8=B3=A3=CA=C7=D3=C9 Po=', b'stgreSQL =BA=CD Or...</span> </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-02-26</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93657/webpack-4-0-0?from=3D20180304">Web=', b'pack 4.0.0 =D5=FD=CA=BD=B7=A2=B2=BC=A3=AC=C4=A3=BF=E9=BC=D3=D4=D8=B4=F2=B0=', b'=FC=B9=A4=BE=DF</a></span> <span style=3D"color: #666; font-size: 9pt;">Web=', b'pack 4.0.0 =D5=FD=CA=BD=B0=E6=D2=D1=B7=A2=B2=BC=A3=ACWebpack =CA=C7=D2=', b'=BB=B8=F6=CF=D6=B4=FA JavaScript =D3=A6=D3=C3=B3=CC=D0=F2=B5=C4=C4=A3=BF=E9=', b'=B4=F2=B0=FC=C6=F7 (module bundler) =A1=A3=B5=B1 Webpack =B4=A6=C0=ED=D3=A6=', b'=D3=C3=B3=CC=D0=F2=CA=B1=A3=AC=CB=FC=BB=E1=B5=DD=B9=E9=B5=D8=B9=B9=BD=A8=D2=', b'=BB=B8=F6=D2=C0=C0=B5=B9=D8=CF=B5=CD=BC=A3=AC=C6=E4=D6=D0=B0=FC=BA=AC=D3=A6=', b'=D3=C3=B3=CC=D0=F2=D0=E8=D2=AA=B5=C4=C3=BF=B8=F6=C4=A3=BF=E9=A3=AC=C8=BB=BA=', b'=F3=BD=AB=CB=F9=D3=D0=D5=E2=D0=A9=C4=A3=BF=E9=B4=F2=B0=FC=B3=C9=C9=D9=C1=BF=', b'=B5=C4 bundle - =CD=A8=B3=A3=D6=BB=D3=D0=D2=BB=B8=F6=A3=AC=D3=C9=', b'=E4=AF=C0=C0=C6=F7=BC=D3=D4=D8=A1=A3 =D5=E2=CA=C7=D2=BB=B8=F6=B4=F3=B5=C4=', b'=B8=FC=D0=C2=B0=E6=B1=BE=A3=AC=C1=C1=B5=E3=B0=FC=C0=A8=A3=BA Envi...</span>=', b' </li>', b'<li style=3D"margin: 20px 0;"> <span style=3D"font-size: 10.5pt; color: #00=', b'8000; font-weight: bold; font-family: Courier New;">2018-02-25</span> <span=', b' style=3D"font-weight: bold; margin: 2px 10px 5px 0; display: block;"><a hr=', b'ef=3D"https://www.oschina.net/news/93637/ruby-2-6-0-preview1-released?from=', b'=3D20180304">Ruby 2.6.0 =CA=D7=B8=F6=D4=A4=C0=C0=B0=E6=B1=BE=B7=A2=B2=BC=A3=', b'=AC=D2=FD=C8=EB=D6=D8=D2=AA=D0=C2=CC=D8=D0=D4 JIT</a></span> <span style=3D=', b'"color: #666; font-size: 9pt;">Ruby 2.6.0-preview1 =D2=D1=B7=A2=B2=BC=A3=AC=', b'=D5=E2=CA=C7 Ruby 2.6.0 =B5=C4=B5=DA=D2=BB=B8=F6=D4=A4=C0=C0=B0=E6=B1=BE=A3=', b'=AC=B8=C3=B0=E6=B1=BE=B0=FC=BA=AC=C1=CB=D2=BB=B8=F6=D6=D8=D2=AA=B5=C4=D0=C2=', b'=CC=D8=D0=D4=A3=ACJIT=A1=A3 JIT Ruby 2.6 =BF=AA=CA=BC=D2=FD=C8=EB JIT (Just=', b'-in-time) =B1=E0=D2=EB=C6=F7=B5=C4=B3=F5=CA=BC=CA=B5=CF=D6=A1=A3JIT =B1=E0=', b'=D2=EB=C6=F7=D6=BC=D4=DA=CC=E1=B8=DF=C8=CE=BA=CE Ruby =B3=CC=D0=F2=D6=B4=D0=', b'=D0=B5=C4=D0=D4=C4=DC=A1=A3=D3=EB=C6=E4=CB=FB=D3=EF=D1=D4=B5=C4=C6=D5=CD=A8=', b' JIT =B1=E0=D2=EB=C6=F7=B2=BB=CD=AC=A3=ACRuby =B5=C4 JIT =B1=E0=D2=EB=C6=F7=', b'=D2=D4=D2=BB=D6=D6=B6=C0=CC=D8=B5=C4=B7=BD=CA=BD=BD=F8=D0=D0 JIT =B1=E0=D2=', b'=EB=A3=AC=CB=FC=CF=C8=BD=AB Ruby =B1=E0...</span> </li>', b'</ul>', b'<div style=3D"margin: 20px 0 0 0;">', b'<p><a href=3D"http://my.oschina.net/kone/blog/119137" target=3D"_blank"><im=', b'g title=3D"OSC=CE=A2=D0=C5=B6=FE=CE=AC=C2=EB" src=3D"https://static.oschina=', b'.net/uploads/space/2013/0304/160442_8Fw6_179699.png" alt=3D"" /></a></p>', b'<p>=C9=A8=D2=BB=C9=A8=A3=AC=B9=D8=D7=A2 OSChina =CE=A2=D0=C5=B9=AB=B9=B2=BA=', b'=C5=A3=AC=B8=FC=B7=BD=B1=E3=BB=F1=D6=AA=C3=BF=C8=D5=BE=AB=B2=CA=CD=C6=BC=F6=', b'</p>', b'</div>', b'<div style=3D"border-top: 2px solid #40AA53; padding: 10px 0;"><a href=3D"h=', b'ttp://www.oschina.net/action/user/unsubscribe_weekly_report?email=3Dzhang86=', b'[email protected]&verify_code=3D4b245b662440adf70cda369d4d015fd45d2aa48b&=', b'amp;from=3D20180304">=CD=CB=B6=A9=BF=AA=D4=B4=D6=D0=B9=FA=C3=BF=D6=DC=BE=AB=', b'=B4=E2=A3=BF</a></div>']]
attachments None
id 124
邮件的结构
content-type: 邮件内容的类型
subject: 邮件主题
to:收件人
from:寄件人
date: 年-月-日 时间 时区
boundary: 如果邮件为multiple - - - parts,你可以得到其分界线
content: 邮件的文本内容(仅在text/plain时可以被解析)
contents: 邮件的body,里面包含着由分界线分割的每一个段落
attachments: None 或者 [['附件名称;编码方式','附件的二进制内容']...]
id: 在邮箱中的id
获得附件
import zmail
server = zmail.server('[email protected], 'yourpassword')
mail = server.get_latest()
zmail.get_attachment(mail)
你可以重命名你的附件,使用
zmail.get_attachment(mail,'example.zip')