Python中发邮件(明文/SSL/TLS三种方式)

#!/usr/bin/python
#  coding:utf-8 
import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email.Header import Header
import sys

#设置默认字符集为UTF8 不然有些时候转码会出问题
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
 
#发送邮件的相关信息,根据你实际情况填写
smtpHost = 'smtp.126.com'
smtpPort = '25'
sslPort  = '587'
fromMail = 'zhangsan@126.com'
toMail   = 'funame@126.com'
username = 'zhangsan'
password = '123456'
  
#邮件标题和内容
subject  = u'[Notice]hello'
body     = u'hello,this is a mail from ' + fromMail

#初始化邮件
encoding = 'utf-8'
mail = MIMEText(body.encode(encoding),'plain',encoding)
mail['Subject'] = Header(subject,encoding)
mail['From'] = fromMail
mail['To'] = toMail
mail['Date'] = formatdate()

try:
    #连接smtp服务器,明文/SSL/TLS三种方式,根据你使用的SMTP支持情况选择一种
    #普通方式,通信过程不加密
    smtp = smtplib.SMTP(smtpHost,smtpPort)
    smtp.ehlo()
    smtp.login(username,password)

    #tls加密方式,通信过程加密,邮件数据安全,使用正常的smtp端口
    #smtp = smtplib.SMTP(smtpHost,smtpPort)
    #smtp.set_debuglevel(True)
    #smtp.ehlo()
    #smtp.starttls()
    #smtp.ehlo()
    #smtp.login(username,password)

    #纯粹的ssl加密方式,通信过程加密,邮件数据安全
    #smtp = smtplib.SMTP_SSL(smtpHost,sslPort)
    #smtp.ehlo()
    #smtp.login(username,password)

    #发送邮件
    smtp.sendmail(fromMail,toMail,mail.as_string())
    smtp.close()
    print 'OK'
except Exception as e:
    print e


转载于:http://www.litvip.com/572/

### 如何通过SSL/TLS实现数据传输加密 #### 加密机制概述 SSL/TLS 协议的核心功能在于保障网络通信的安全性,其主要目标包括保密性、完整性和身份验证。具体而言,SSL/TLS 的三个核心目的是由不同的密码学工具支持的:保密性(Confidentiality)依赖于加密技术;完整性(Integrity)依靠哈希函数来检测数据是否被篡改;而真实性(Authentication)则借助公钥基础设施(PKI)完成认证过程[^4]。 #### 数据传输加密的具体流程 当客户端与服务器之间建立连接时,SSL/TLS 会执行一系列操作以确保后续通信的安全: 1. **握手阶段** 客户端向服务器发起请求并交换必要的参数,例如支持的协议版本、加密套件等。在此期间,双方协商选定一种共同支持的加密算法,并通过证书验证彼此的身份。这一阶段还涉及生成共享的秘密密钥用于实际的数据加解密工作[^2]。 2. **记录层协议** 握手完成后进入应用数据传输环节,在此之前所有的消息都会经由记录层封装后再发送出去。每条记录都包含了明文内容加上附加的信息如MAC值用来校验数据未遭中途更改。随后整个报文会被分割成固定大小的小块逐一处理[^1]。 3. **加密与解密** 实际上传输的内容已经过预先商定好的对称加密方式进行了转换,即使第三方截获也无法轻易解读其中含义除非拥有对应的私钥来进行还原动作[^3]。 以下是简单的 Python 示例展示如何创建一个基本的支持 TLS 的服务器端程序片段: ```python import ssl import socket context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) context.load_cert_chain(certfile="server.crt", keyfile="server.key") with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as tcp_socket: with context.wrap_socket(tcp_socket, server_side=True) as tls_socket: tls_socket.bind(("localhost", 8080)) tls_socket.listen(5) while True: conn, addr = tls_socket.accept() print(f"Connected by {addr}") data = conn.recv(1024) if not data: break conn.sendall(b'Hello Client') ``` 上述脚本展示了设置带有自定义上下文对象的服务端逻辑框架,其中包括加载本地存储的数字证书以及私钥文件路径指定部分[^5]。 #### 总结 综上所述,采用 SSL/TLS 技术能够有效增强互联网环境下各类应用程序之间的交互安全性水平。它不仅提供了强大的防护手段防止敏感资料泄露风险同时也维护了交易过程中的可靠性标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值