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定时器(Timer)用法简单实例
Jun 04 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
人机交互程序 python实现人机对话
Nov 14 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
Python字符串的全排列算法实例详解
Jan 07 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
Python 如何安装Selenium
May 06 Python
Django+Celery实现定时任务的示例
Jun 23 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
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
php实现中文转数字
2016/02/18 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python实现的udp协议Server和Client代码实例
2014/06/04 Python
python脚本实现查找webshell的方法
2014/07/31 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
python之文件读取一行一行的方法
2018/07/12 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
python 实现return返回多个值
2019/11/19 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
通俗讲解python 装饰器
2020/09/07 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
新学期家长寄语
2014/01/19 职场文书
优秀学生获奖感言
2014/02/15 职场文书
献爱心倡议书
2014/04/14 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
2015年企业新年寄语
2014/12/08 职场文书
Python序列化模块JSON与Pickle
2022/06/05 Python