socket&邮件发送

一、socket介绍

  TCP可靠性的实现: (1)校验码 (2)接收方反馈 (3)信息包附带序号 UDP:(1)快 不需要花费时间建立和关闭连接 (2)快 偶尔丢失一两个消息包无所谓,但是TCP会严格检查 (3)快 UDP的限制是一个信息包不超过64KB的数据 TCP和UDP区别就是UDP不建立连接,只保证数据的完整性,数据传输快,但是不保证数据是否真的被收到,也不保证数据是够只接收一次,也不保证次序。 服务端是用来给一个或者多个客户端提供服务的,当客户端发起请求,开始等待服务端的返回结果,服务端接受完请求以后,根据自己的逻辑进行处理请求,并返回给客户端,客户端接收到返回结果以后,关闭和服务端的连接。 最常用个客户端和服务端有两种模式C/S(mysql)模式和B/S模式(网站)

 

Select Poll Epoll IO多路复用介绍

Select Poll Epoll IO多路复用介绍 select目前几乎在所有的平台上支持   select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一限制。   另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用select()会对所有socket进行一次线性扫描,所以这也浪费了一定的开销。 poll 它和select在本质上没有多大差别,但是poll没有最大文件描述符数量的限制。 一般也不用它,相当于过渡阶段

epoll 直到Linux2.6才出现了由内核直接支持的实现方法,那就是epoll。被公认为Linux2.6下性能最好的多路I/O就绪通知方法。windows不支持   没有最大文件描述符数量的限制。 比如100个连接,有两个活跃了,epoll会告诉用户这两个两个活跃了,直接取就ok了,而select是循环一遍。   (了解)epoll可以同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高一些,但是代码实现相当复杂。

案例一、
import socket

host = "www.baidu.com"
port = 443

ip = socket.gethostbyname(host)
print(ip)

address = (ip, port)

try:

s = socket.socket()

s.connect(address)
request = "GET / HTTP/1.1\r\nHost:www.baidu.com\r\n\r\n"
s.sendall(request.encode("utf-8"))
res = s.recv(80960)
if res:
print(res)
else:
print("visit {0} error".format(host))
except Exception as e:
raise e

案例二、
import http.server
import socketserver
port = 8000
host = '127.0.0.1'
address = (host, port)
# handle = SimpleHTTPRequest.SimpleHTTPRequestHandler
handle = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(address, handle) as httpd:
print("server start")
httpd.serve_forever()

二、邮件发送

  通过python发邮件步骤: 前提是:开通了第三方授权,可以使用smtp服务

1. 创建一个smtp对象

2. 连接smp服务器,默认端口都是25

3. 登录自己邮箱账号,

4. 调用发送消息函数,参数:发件人,收件人,消息内容

5. 关闭连接smtp = smtplib.SMTP()smtp.connect('smtp.163.com', '25')smtp.login('18910148469@163.com', 'lingjing2315')smtp.sendmail('18910148469@163.com', '974644081@qq.com', msg.as_string())smtp.quit()

案例一、

import yagmail


args={
"user": "15616166428@163.com",
"password": "xxxx",
"host": "smtp.163.com",
"port": "465"
}


emailList=["1330101907@qq.com","zyy@mealkey.cn","2174018087@qq.com", "974644081@qq.com"]
email = yagmail.SMTP(**args)
email.send(to='974644081@qq.com',subject="原因分析",contents='''DT:SPM 是出错信息的关键词,可以在这个网页中找到出错的原因http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html,原因:550 DT:SPM 邮件正文带有很多垃圾邮件特征或发送环境缺乏规范性。需调整邮件内容或优化发送环境;原因分析邮件中带有敏感关键词,例如促销,发票等。邮件中包含超级链接,或者超级链接太多。垃圾邮件特征比较明显,例如:只有一张图片,或只有一张图片。发送相同的邮件内容太多了。处理这种情况的方法是:换其他邮箱发送,或调整邮件内容。''',cc="974644081@qq.com")

案例二、
import email.mime.multipart
import email.mime.text
import smtplib



msg = email.mime.multipart.MIMEMultipart()
msg['from'] = '974644081@qq.com'
msg['to'] = '1414873973@qq.com'
msg['subject'] = 'ajing is very very cool'

context = '''
<h1>老师好</h1>
你好,
这是一封自动发送的邮件。
www.ustchacker.com hello
'''
text = email.mime.text.MIMEText(_text=context, _subtype="html")
msg.attach(text)

em = smtplib.SMTP_SSL()
em.connect("smtp.qq.com", 465)
em.login("974644081@qq.com", 'xxxxxxxxxxxxxx')
em.sendmail(from_addr='974644081@qq.com', to_addrs='1414873973@qq.com', msg=msg.as_string())
em.quit()

 

转载于:https://www.cnblogs.com/iwss/p/9145512.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值