赞
踩
·SMTP.connect([host[,port])方法,连接远程smtp主机方法,hos为远程主机地址,port为远程主机smtp端口,默认25,也可以直接使用host:port形式来表示, 例如: SMTP.connect("smtp.163.com", "25" )。 ·SMTP.login(user,password)方法,远程smtp主机的校验方法,参数为用户名与密码, 如 SMTP.login("python_2014@163.com", "sdjkg358")。 ·SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rept_options])方法,实现邮件的发送功能,参数依次为是发件人、收件人、邮件内容, 例如: SMTP.sendmail("python_2014@163.com","demo@domail.com",body) 其中body内容定义如下: """From: python_2014@163.com To: demo@domail.com Subject: test mail test mail body""" ·SMTP.starttls([keyfile[, certfile])方法,启用TLS(安全传输)模式代,所有SMTP指令都将加密传输,例如使用gmail的smp服务时需要启动此项才能正正常发送邮件 例如: SMTP.starttls()。 DSMTP.quit()方法,断开smtp服务器的连接。 ----个性化邮件方法 ·email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[,_params]]]]) 作用是生成包含多个部分的邮件体的MIME对象,参数_subtype指定要添加到 "Content-type:multipart/subtype"报头的可选的三种子类型,分别为1mixed、related、alternative默认值为mixed。 定义mixed实现构建一个带附件的邮件体; 定义related实现构建内嵌资源的邮件体; 定义alternative则实现现构建纯文本与超文本共存的邮件体。 """ ·email.mime.audio.MIMEAudio (_audiodata[, _subtype[, _encoder[, **_partams]]),创建 包含音频数据的邮件体,audiodata包含原始二进制音频数据的字节字符串。 ·email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **params]]),创建 包含图片数据的邮件体,_imagedata是包含原始图片数据的字节字符串。 ·email.mime.text.MIMEText (_text[,_subtype[,_charset]),创建包含义文本数据的邮件体, text是包含消息负载的字符串,subtype指定文本类型,支持plain(默认值)或html 类型的字符串。 """
#!/usr/bin/env python #-*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header sender = '**********@163.com' #邮件发起者 receivers = ['#######@163.com'] #收件人 # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEText('Python 邮件发送测试...','plain','utf-8') message['From'] = Header("Devops",'utf-8') #发送者 message['To'] = Header("学习测试",'utf-8') #接收者 subject = "Python SMTP 邮件测试!!!" message['Subject'] = Header(subject,'utf-8') try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender,receivers,message.as_string()) print("邮件发送成功!!!") except smtplib.SMTPException: print("Error:无法发送邮件")
#!/usr/bin/env python #-*- coding: UTF-8 -*- "如果我们本机没有 sendmail 访问,也可以使用其他邮件服务商的 SMTP 访问(QQ、网易、Google等)。" import smtplib from email.mime.text import MIMEText from email.header import Header #第三方smtp服务 mail_host = "smtp.163.com" #设置邮件服务器地址 mail_user = "**********@163.com" mail_pass = "***************" #此处为pop密码 sender = "**********@163.com" #发件人 receviers = ['#######@163.com'] #接收人 message = MIMEText('Python 邮件发送测试...','plain','utf-8') message['From'] = Header("Devops") #发送者 message['To'] = Header("学习测试") #接收者 subject = 'Python SMTP 邮件测试!!!' #邮件主题 message['Subject'] = Header(subject,'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host,25) smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender,receviers,message.as_string()) print("邮件发送成功!") except smtplib.SMTPException: print("邮件发送失败!!")
import smtplib from email.mime.text import MIMEText from email.header import Header #第三方smtp服务 mail_host = "smtp.163.com" #设置邮件服务器地址 mail_user = "**********@163.com" mail_pass = "***************" #此处为pop密码 sender = "**********@163.com" #发件人 receviers = ['#########@163.com'] #接收人 mail_msg = """ <p>Python 邮件发送测试...</p> <p><a href="http://www.baidu.com">这是一个链接</a></p> """ #会将网站封装为一个可点击跳转的连接 message = MIMEText(mail_msg,'html','utf-8') message['From'] = Header("leader--薛晓强",'utf-8') #发送者 message['To'] = Header("html测试") #接收者 subject = 'Python SMTP 邮件测试!!!' #邮件主题 message['Subject'] = Header(subject,'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender,receviers,message.as_string()) print("邮件发送成功!") except smtplib.SMTPException: print("无法发送邮件!!")
pycurl(http://pycurl.sourceforge.net)是一个用C语言写的libcurl Python实现,功能非常强大. 支持的操作协议有FTP、HTTP、HTTPS、TELNET等,可以理解成Linux下curl命令功能的Python封装,简单易用。 通过调用pycurl提共的方法,实现探测Web服务质量的情况: 比如响应的HTTP状态码、请求延时、HTTP头信息、下载速度等,利用这些信息可以定位服务响应慢的具体环节,下面详细进行说明月。 #模块安装(windows): 1.cmd--python 查看自己python的版本 2.https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl #下载对应版本的pycurl,此处我下载的是cp37.amd64 3.下载的whl文件,放到桌面 4.cmd-- C:\Users\LENOVO\Desktop>pip install pycurl-7.45.1-cp37-cp37m-win_amd64.whl Processing c:\users\lenovo\desktop\pycurl-7.45.1-cp37-cp37m-win_amd64.whl Installing collected packages: pycurl Successfully installed pycurl-7.45.1 #出现succesfully即为成功(需要自己pycharm的虚拟环境python解释器环境和) #修改本地python系统环境需要修改环境变量,确保cmd打开的为你自己python的解释器版本 #模块安装(linux): "1.安装源码curl" 1.wget http://curl.haxx.se/download/curl-7.36.0.tar.gz #要求curl-config包支持 2.tar -zxvf curl-7.36.0.tar.gz 3.cd curl-7.36.0 4../configure 5.make && make install 6.export LD_LIBRARY_PATH=/usr/local/lib "2.安装pycurl" 1.wget https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz --no-check-certificate 2.tar -zxvf pycurl-7.19.3.1.tar.gz 3.cd pycurl-7.19.3.1 4.python3 setup.py install --curl-config=/usr/local/bin/curl-config #5.yum install python3-devel --如果报错则需要输入此命令
close()方法:对应libcurl包中的curl_easy_cleanup方法,无参数,实现关闭、回收Curl对象。 perform()方法:对应libcurl包中的curl_easy_perform方法,无参数,实现Curl对象请求的提交。 setopt(option,value)方法:对应libcurl包中的curl_easy_setopt方法,参数option是通过libcurl的常量来指定的,参数value的值会依赖option,可以是一个字符串、整型长整型、文件对象、列表或函数等。 "下面列举常用的常量列表:" import pycurl url = "www.kuaidaili.com" print(pycurl.version) c = pycurl.Curl() #创建一个curl对象 c.setopt(pycurl.CONNECTTIMEOUT,5) #连接的等待时间,设置为0则不等待 c.setopt(pycurl.TIMEOUT,5) #请求超时时间 c.setopt(pycurl.NOPROGRESS,0) ##是否屏蔽下载进度条,非0则屏蔽 c.setopt(pycurl.MAXREDIRS,5) #指定HTTP重定向的最大数 c.setopt(pycurl.FORBID_REUSE,1) #完成交互后强制断开连接,不重用 c.setopt(pycurl.FRESH_CONNECT,1) ##强制获取新的连接,即替代缓存中的连接 c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) ##设置保存DNS信息的时间,默认为120秒 c.setopt(pycurl.URL,"http://www.baidu.com") #指定请求的url c.setopt(pycurl.USERAGENT,"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36") ##配置请求HTTP头的User-Agent c.setopt(pycurl.WRITEFUNCTION,getbody) #将返回的内容定向到回调函数getbody c.setopt(pycurl.WRITEHEADER,fileobj) ##将返回的HTTPHEADER定向到fileobj文件对象 c.setopt(pycurl.WRITEDATA,fileobj) #将返回的HTML内容定向到fileobj文件对象 getinfo(option)方法,对应libcurl包中的curl_easy_getinfo方法,参数option是通过libcurl的常量来指定的。 下面列举常用的常量列表: c = pycurl.Curl() #创建一个curl对象 c.getinfo (pycurl.HTTP_CODE) #返回的HTTP状态码 c.getinfo (pycurl.TOTAL_TIME) #传输结束所消耗的总时间 c.getinfo (pycurl.NAMELOOKUP_TIME) #DNS解析所消耗的时间 c.getinfo(pycurl.CONNECT_TIME) #建立连接所消耗的时间 c.getinfo (pycurl.PRETRANSFER_TIME) #从建立连接到准备传输所消耗的时间 c.getinfo (pycurl.STARTTRANSFER_TIME) #从建立连接到传输开始消耗的时间 c.getinfo(pycurl.REDIRECT_TIME) #重定向所消耗的时间 c.getinfo (pycurl.SIZE_UPLOAD) #上传数据包大小 c.getinfo (pycurl.SIZE_DOWNLOAD) #下载数据包大小 c.getinfo(pycurl.SPEED_DOWNLOAD) #平均下载速度 c.getinfo (pycurl.SPEED_UPLOAD) #平均上传速度 c.getinfo(pycurl.HEADER SIZE) #HTTP头部大小 "我们利用libcurl包提供的这些常量值来达到探测Web服务质量的目的"
#!/bin/env python #-*- coding: UTF-8 -*- import os,sys import time import pycurl URL = "http://www.baidu.com" c = pycurl.Curl() c.setopt(pycurl.URL,URL) #请求的url常量 c.setopt(pycurl.CONNECTTIMEOUT,5) #定义请求连接的等待时间 c.setopt(pycurl.TIMEOUT,5) #请求超时时间 c.setopt(pycurl.FORBID_REUSE,1) #完成交互后强制断开连接,不重用 c.setopt(pycurl.MAXREDIRS,1) #HTTP重定向的最大次数 c.setopt(pycurl.DNS_CACHE_TIMEOUT,30) #DNS的ttl时间为30s #创建一个文件对象,以"wb"方式打开,存储返回的http头部喝页面内容 indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb") #以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 #当前文件路径下新建content.txt文件以二进制方式打开 c.setopt(pycurl.WRITEHEADER,indexfile) #将返回http header重定向到indexfile文件对象中 c.setopt(pycurl.WRITEDATA,indexfile) #将返回的HTMl定向到indexfile中 try: c.perform() #提交请求 except Exception as e: print("connection error:"+str(e)) indexfile.close() #关闭文件 c.close() #关闭请求 exit(0) NAMELOOUP_TIME = c.getinfo(pycurl.NAMELOOKUP_TIME) #获取DNS解析时间 CONNECT_TIME = c.getinfo(pycurl.CONNECT_TIME) #获取建立连接时间 PRETRANSFER_TIME = c.getinfo(pycurl.PRETRANSFER_TIME) #从建立连接到准备传输所消耗的时间 STARTTRANSFER_TIME = c.getinfo(pycurl.STARTTRANSFER_TIME) #从建立连接到传输开始消耗的时间 TOTAL_TIME = c.getinfo(pycurl.TOTAL_TIME) #总传输的时间 HTTP_CODE = c.getinfo(pycurl.HTTP_CODE) #http状态码 SIZE_DOWNLOAD = c.getinfo(pycurl.SIZE_DOWNLOAD) #下载数据包的大小 HEADER_SIZE = c.getinfo(pycurl.HEADER_SIZE) #头部大小 SPEED_DOWNLOAD = c.getinfo(pycurl.SPEED_DOWNLOAD) #评价下载大小 print("HTTP状态码:%s" %(HTTP_CODE)) print("DNS解析时间:%.2f ms" %(NAMELOOUP_TIME * 1000)) print("建立连接时间:%.2f ms" %(CONNECT_TIME * 1000)) print("准备传输时间:%.2f ms" %(PRETRANSFER_TIME * 1000)) #因为1000ms为1秒而机器返回的为ms所以*1000 print("传输开始时间:%.2f ms" %(STARTTRANSFER_TIME * 1000)) print("传输结束时间:%.2f ms" %(TOTAL_TIME * 1000)) print("下载数据包大小:%d bytes/s" %(SIZE_DOWNLOAD)) print("HTTP头部大小:%d byte" %(HEADER_SIZE)) print("平均下载速度:%d bytes/s" %(SPEED_DOWNLOAD)) indexfile.close() #关闭文件否则导致文件内容有误 c.close() #关闭请求 """ result: HTTP状态码:200 DNS解析时间:28.15 ms 建立连接时间:61.45 ms 准备传输时间:61.76 ms 传输开始时间:107.48 ms 传输结束时间:288.78 ms 下载数据包大小:380544 bytes/s HTTP头部大小:1183 byte 平均下载速度:1317782 bytes/s """
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。