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模块学习 filecmp 文件比较
Aug 27 Python
浅析使用Python操作文件
Jul 31 Python
python web基础之加载静态文件实例
Mar 20 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
python读取几个G的csv文件方法
Jan 07 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
django settings.py 配置文件及介绍
Jul 15 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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 mssql 数据库分页SQL语句
2008/12/16 PHP
基于php下载文件的详解
2013/06/02 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
python多线程实现TCP服务端
2019/09/03 Python
如何提高python 中for循环的效率
2020/04/15 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android