网络应用
发送电子邮件
即使在通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。
像我们可以用 HTTP(超文本传输协议)来访问一个网站一样,发送邮件要使用 SMTP(简单邮件传输协议),SMTP 也是一个建立在 TCP(传输控制协议)提供的可靠数据传输服务的基础上的应用级协议,它规定了邮件的发送者如何跟发送邮件的服务器进行通信的细节,而 Python 中的 smtplib 模块将这些操作简化成了几个简单的函数。
使用Python发送邮件。
from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMETextdef main():# 请自行修改下面的邮件发送者和接收者sender = 'xiaom@163.com'receivers = ['xiaoz@163.com', 'xiaoz@qq.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.163.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 urllibdef main():# 创建一个带附件的邮件消息对象message = MIMEMultipart()# 创建文本内容text_content = MIMEText('附件中为会议记录', 'plain', 'utf-8')message['Subject'] = Header('会议记录', 'utf-8')# 将文本内容添加到邮件消息对象中message.attach(text_content)# 读取文件并将文件作为附件添加到邮件消息对象中with open('D:/test.txt', 'rb') as f:txt = MIMEText(f.read(), 'base64', 'utf-8')txt['Content-Type'] = 'text/plain'txt['Content-Disposition'] = 'attachment; filename=test.txt'message.attach(txt)# 读取文件并将文件作为附件添加到邮件消息对象中with open('D:/test.xlsx', 'rb') as f:xls = MIMEText(f.read(), 'base64', 'utf-8')xls['Content-Type'] = 'application/vnd.ms-excel'xls['Content-Disposition'] = 'attachment; filename=test.xlsx'message.attach(xls)# 创建SMTP对象smtper = SMTP('smtp.163.com')# 开启安全连接# smtper.starttls()sender = 'xiaom@163.com'receivers = ['xiaoz@163.com']# 登录到SMTP服务器# 请注意此处不是使用密码而是邮件客户端授权码进行登录smtper.login(sender, 'xxxxxx)# 发送邮件smtper.sendmail(sender, receivers, message.as_string())# 与邮件服务器断开连接smtper.quit()print('发送完成!')if __name__ == '__main__':main()
发送短信
发送短信也是项目中常见的功能,网站的注册码、验证码、营销信息基本上都是通过短信来发送给用户的。
我们可以使用短信平台提供的API接口实现发送短信的服务,当然国内的短信平台很多,这里选择互亿无线短信平台短信接口_短信验证码_验证码短信平台-互亿无线 (ihuyi.com)。
import urllib.parse
import http.client
import jsondef 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()