python网络应用开发知识点浅析


Posted in Python onMay 28, 2019

发送电子邮件

在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。

就像我们可以用HTTP(超文本传输协议)来访问一个网站一样,发送邮件要使用SMTP(简单邮件传输协议),SMTP也是一个建立在TCP(传输控制协议)提供的可靠数据传输服务的基础上的应用级协议,它规定了邮件的发送者如何跟发送邮件的服务器进行通信的细节,而Python中的smtplib模块将这些操作简化成了几个简单的函数。

下面的代码演示了如何在Python发送邮件。

from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMEText


def main():
  # 请自行修改下面的邮件发送者和接收者
  sender = 'abcdefg@126.com'
  receivers = ['uvwxyz@qq.com', 'uvwxyz@126.com']
  message = MIMEText('用Python发送邮件的示例代码.', 'plain', 'utf-8')
  message['From'] = Header('王大锤', 'utf-8')
  message['To'] = Header('骆昊', 'utf-8')
  message['Subject'] = Header('示例代码实验邮件', 'utf-8')
  smtper = SMTP('smtp.126.com')
  # 请自行修改下面的登录口令
  smtper.login(sender, 'secretpass')
  smtper.sendmail(sender, receivers, message.as_string())
  print('邮件发送完成!')


if __name__ == '__main__':
  main()

如果要发送带有附件的邮件,那么可以按照下面的方式进行操作。

from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

import urllib


def main():
  # 创建一个带附件的邮件消息对象
  message = MIMEMultipart()
  
  # 创建文本内容
  text_content = MIMEText('附件中有本月数据请查收', 'plain', 'utf-8')
  message['Subject'] = Header('本月数据', 'utf-8')
  # 将文本内容添加到邮件消息对象中
  message.attach(text_content)

  # 读取文件并将文件作为附件添加到邮件消息对象中
  with open('/Users/Hao/Desktop/hello.txt', 'rb') as f:
    txt = MIMEText(f.read(), 'base64', 'utf-8')
    txt['Content-Type'] = 'text/plain'
    txt['Content-Disposition'] = 'attachment; filename=hello.txt'
    message.attach(txt)
  # 读取文件并将文件作为附件添加到邮件消息对象中
  with open('/Users/Hao/Desktop/汇总数据.xlsx', 'rb') as f:
    xls = MIMEText(f.read(), 'base64', 'utf-8')
    xls['Content-Type'] = 'application/vnd.ms-excel'
    xls['Content-Disposition'] = 'attachment; filename=month-data.xlsx'
    message.attach(xls)
  
  # 创建SMTP对象
  smtper = SMTP('smtp.126.com')
  # 开启安全连接
  # smtper.starttls()
  sender = 'abcdefg@126.com'
  receivers = ['uvwxyz@qq.com']
  # 登录到SMTP服务器
  # 请注意此处不是使用密码而是邮件客户端授权码进行登录
  # 对此有疑问的读者可以联系自己使用的邮件服务器客服
  smtper.login(sender, 'secretpass')
  # 发送邮件
  smtper.sendmail(sender, receivers, message.as_string())
  # 与邮件服务器断开连接
  smtper.quit()
  print('发送完成!')


if __name__ == '__main__':
  main()

发送短信

发送短信也是项目中常见的功能,网站的注册码、验证码、营销信息基本上都是通过短信来发送给用户的。在下面的代码中我们使用了互亿无线短信平台(该平台为注册用户提供了50条免费短信以及常用开发语言发送短信的demo,可以登录该网站并在用户自服务页面中对短信进行配置)提供的API接口实现了发送短信的服务,当然国内的短信平台很多,读者可以根据自己的需要进行选择(通常会考虑费用预算、短信达到率、使用的难易程度等指标),如果需要在商业项目中使用短信服务建议购买短信平台提供的套餐服务。

import urllib.parse
import http.client
import json


def main():
  host = "106.ihuyi.com"
  sms_send_uri = "/webservice/sms.php?method=Submit"
  # 下面的参数需要填入自己注册的账号和对应的密码
  params = urllib.parse.urlencode({'account': '你自己的账号', 'password' : '你自己的密码', 'content': '您的验证码是:147258。请不要把验证码泄露给其他人。', 'mobile': '接收者的手机号', 'format':'json' })
  print(params)
  headers = {'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'}
  conn = http.client.HTTPConnection(host, port=80, timeout=30)
  conn.request('POST', sms_send_uri, params, headers)
  response = conn.getresponse()
  response_str = response.read()
  jsonstr = response_str.decode('utf-8')
  print(json.loads(jsonstr))
  conn.close()


if __name__ == '__main__':
  main()
Python 相关文章推荐
Python简单实现控制电脑的方法
Jan 22 Python
关于Python的一些学习总结
May 25 Python
Python实现二维曲线拟合的方法
Dec 29 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
django框架单表操作之增删改实例分析
Dec 16 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
如何理解Python中包的引入
May 29 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
python实现文件分片上传的接口自动化
Nov 19 Python
python进程和线程用法知识点总结
May 28 #Python
selenium+python环境配置教程详解
May 28 #Python
Python从函数参数类型引出元组实例分析
May 28 #Python
python面试题Python2.x和Python3.x的区别
May 28 #Python
Python 3.8新特征之asyncio REPL
May 28 #Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 #Python
Python学习笔记之变量、自定义函数用法示例
May 28 #Python
You might like
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
建立文件交换功能的脚本(一)
2006/10/09 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
python实现爬虫下载漫画示例
2014/02/16 Python
Python动态加载模块的3种方法
2014/11/22 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
离职感谢信怎么写
2015/01/22 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书