很早以前买了 Kindle,为了省钱在网络上找过不少电子书,它有一点好处就是可以自己导入书籍,更好的是可以通过电子邮件的方式发送到 Kindle 上,本文就来一步步实现一个书籍推送软件。
1、邮件的几种协议介绍
以下科普内容来自:。
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
本文采用 SMTP 协议。
2、邮件发送简单测试
Python 的标准库提供了对 SMTP 的支持,可以用来发送纯文本、HTML和带附件的邮件。要想发送邮件需要用到两个库:email(用来构造邮件)和smtplib(用来发送邮件)。
2.1 纯文本邮件
用以下两行代码构造一个纯文本格式的邮件正文:
MIMEText 的原型为:
class email.mime.(_text[, _subtype[, _charset]])
参数说明:
- _text :文本格式的邮件正文
- _subtype :MIME 的类型,默认值为 plain,即指定 MIME 的类型为 'text/plain'
- _charset:正文的编码,默认值为us-ascii,一般指定为 'utf-8'
创建 SMTP 对象语法如下:
参数说明:
- host:SMTP 服务器主机地址,比如126邮箱服务器地址为, QQ邮箱服务器地址为
- port:如果提供了 host 参数, 需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25
- local_hostname:如果 SMTP 在本机上,只需要指定服务器地址为 localhost 即可。
Python SMTP 对象使用 sendmail 方法发送邮件,语法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
参数说明:
- from_addr: 邮件发送者地址。
- to_addrs:字符串列表,邮件发送地址。
- **msg **:发送消息
下面就是一个完整的纯文本邮件的发送测试程序:
来看一下执行结果:
01_文本邮件测试
2.2 HTML邮件
发送HTML格式的邮件,只需要把 MIMEText 对象的 _subtype 设置为 html 即可。
发送结果:
02_HTML邮件测试
2.3 带附件的邮件
如果要发送带附件的邮件,我们需要构造一个 MIMEMultipart 对象,然后想该对象中添加其他的 MIME 对象。如下代码即可实现有文本内容和附件的邮件发送:
发送结果:
03_带附件的邮件测试
当然,可以构造多个 MIMEApplication 然后添加到 msg 当中,就能够实现发送多个附件的效果了。
3、推送书籍到Kindle
3.1 查看设备收件地址
购买的 Kindle 每个设备都会绑定一个邮箱作为收件地址,格式类似于:xxxx_xx@kindle.cn。可以在 Kindle 中 全部设置->我的账户 的最下面查看该设备的邮件地址:
04_Kindle设备地址查看
3.2 代码实现
为了方便使用,需要做一个带界面的程序,首选 PyQt 。
3.2.1 PyQt5安装
可以直接使用 pip 指令安装:pip install pyqt5 。
3.2.2 布局设计
下图中标注了总体的布局和每个部件的类型,没错,就是要做成这样的。
05_软件布局
布局部分代码:
来看一下最终的实际效果:
06_最终效果图
3.2.3 文件选择
本软件要实现的是可以一次性发送多个书籍文件,书籍格式为epub或者mobi。
def chooseBooks(self):
= QFileDialog.getOpenFileNames(self, "Open File","D:","books (*.mobi *.epub)") # 筛选文件后缀;可以多选
('您选中了{}本书:{}'.format(len([0]), str([0]))) # 获取选中文件的
以上两行代码就可以弹出一个文件对话框,我们就可以愉快的选择我们要推送的书籍了。
07_选择文件
最后将上一小节发送带附件邮件的代码加上,整个程序完成。
发送结果示例:
08_发送结果
Kindle端结果:
09_Kindle端结果
代码获取:私信作者发送"kindle"查看源码获取方式
1.文章《vb choose函数怎么用》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《vb choose函数怎么用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好