简介

本文介绍如何通过smtp模块实现邮件的抄送和密送功能。

抄送功能实现

在发送邮件时,除了发送给相关的责任人,有时还需要知会某些人。这时就需要在邮件里指定抄送人员列表。相关实现如下:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import osFROMADDR = "myaddr@server.com"
PASSWORD = 'foo'TOADDR = ['toaddr1@server.com', 'toaddr2@server.com']
CCADDR = ['ccaddr1@server.com', 'ccaddr2@server.com']# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = 'Test'
msg['From'] = FROMADDR
msg['To'] = ', '.join(TOADDR)
msg['Cc'] = ', '.join(CCADDR)# Create the body of the message (an HTML version).
text = """Hi  this is the body
"""# Record the MIME types of both parts - text/plain and text/html.
body = MIMEText(text, 'plain')# Attach parts into message container.
msg.attach(body)# Send the message via local SMTP server.
s = smtplib.SMTP('server.com', 587)
s.sendmail(FROMADDR, TOADDR + CCADDR, msg.as_string())
s.quit()

这里需要注意的是,需要将所以发送和抄送人员以列表的形式,传送给sendmail(from_addr, to_addrs, msg, mail_options=[], rcpt_options=[])函数的to_addrs参数。否则CC功能失效。

实现BCC功能

用户如果需要实现密送(BCC)功能,和上面介绍的抄送功能类似。参考代码实现:
oaddr = 'buffy@sunnydale.k12.ca.us'
cc = ['alexander@sunydale.k12.ca.us','willow@sunnydale.k12.ca.us']
bcc = ['chairman@slayerscouncil.uk']
fromaddr = 'giles@sunnydale.k12.ca.us'
message_subject = "disturbance in sector 7"
message_text = "Three are dead in an attack in the sewers below sector 7."
message = "From: %s\r\n" % fromaddr+ "To: %s\r\n" % toaddr+ "CC: %s\r\n" % ",".join(cc)+ "Subject: %s\r\n" % message_subject+ "\r\n" + message_text
toaddrs = [toaddr] + cc + bcc
server = smtplib.SMTP('smtp.sunnydale.k12.ca.us')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, message)
server.quit()

总结

TO, CC, BCC仅在文本头存在区别,在SMTP级别来看,TO, CC, BCC都是接收者。因此sendmail( )函数的to_addrs必须是所有接收者的列表。

Python网络编程:E-mail服务(八) 实现抄送和密送功能相关推荐

  1. Python网络编程——客户端与服务端简单信息发送与接受

    python网络编程-服务端与客户端简单信息发送与接受 思考一下我们进行网络中信息通信都需要什么或者说需要具备什么条件才能进行网络通信? 首先我们需要知道给谁发送,也就是目标机是谁,然后我们需要知道对 ...

  2. Python网络编程--Echo服务

    Python网络编程--Echo服务 学习网络编程必须要练习的三个小项目就是Echo服务,Chat服务和Proxy服务.在接下来的几篇文章会详细介绍. 今天就来介绍Echo服务,Echo服务是最基本的 ...

  3. 读书笔记 - -《Python网络编程》重点

    文章目录 一.前言 二.客户/服务器网络编程简介 三.UDP 3.1 端口号 3.2 套接字 3.3 UDP分组 3.4 小结 四.TCP 4.1 TCP工作原理 4.2 绑定接口 4.3 死锁 4. ...

  4. python网络编程基础百度云_PYTHON网络编程基础 PDF 下载

    相关截图: 资料简介: <Python网络编程基础>全面介绍了使用Python语言进行网络编程的基础知识,主要内容包括网络基础知识.高级网络操作.Web Services.解析HTML和X ...

  5. 真良心干货保姆级手把手教你Python网络编程,学不会我去你家教你

    Python网络编程 基本概念(计算机网络基础) IP地址与端口 IP地址 端口 网络通信协议 网络通信协议 网络协议的分层 TCP/UDP 套接字编程 socket()函数介绍 UDP 编程 实现U ...

  6. python网络编程实战_Python 异步网络编程实战

    近年来 Python 的发展的非常迅速,"简单"."高效"是 Python 吸引人的一大特色.在国内 Python 开发需求越来越大,Python 具有丰富强大 ...

  7. python网络编程--socket简单实现

    python网络编程                                                                                           ...

  8. python网络编程案例_Python 网络编程_python网络编程基础_python高级编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  9. python 网络编程 问题记录

    191223 python 网络编程 套接字的初使用 在本机配置服务端和客户端后,运行没问题:将服务端代码弄到另一台电脑上后启动,用原来的电脑去连接它,就连不上了,不知啥原因,是ip自动获取和指定ip ...

最新文章

  1. STL与泛型编程(1)---模板
  2. JVM 垃圾回收算法及回收器详解
  3. c++ 拷贝构造函数_禁止拷贝构造,禁止bug
  4. Spark API 详解(转)
  5. 基于jsf的项目_JSF基于事件的沟通:过时的方法
  6. 服务器项目有哪些,怎么部署项目到服务器?服务器的特性有哪些?
  7. 我自己关于C语言,编译器,标准库,GUN glibc,CRT ,API之类的理解。
  8. PCB BOM也能如此好看?图形化交互式BOM工具Interactive Html Bom使用分享
  9. python set 和 ^ 的妙用
  10. oracle 批量插入 mysql 区别,Mysql与Oracle中批量插入和更新区别
  11. Winform 开发用户控件
  12. 计算机共享网络的账号密码怎么设置密码,win10局域网共享怎么设置账号密码
  13. 三维重建| iPad Pro2020 专业3D扫描应用程序 3D Scanner App(App Store可免费下载)
  14. 【学习笔记】算法101--数学(二)2.3篇
  15. 微信小程序 - 无法获取云端数据库中的数据的问题(修改云端数据库权限)
  16. 《CSAPP》(第3版)答案(第三章)(一)
  17. 实习笔记—— AOP开发II(AOP中Advice的类型)
  18. 佟年计算机大赛,《亲爱的,热爱的》热播,吴白见到佟年第一眼,这眼神亮了!...
  19. sap事务代码如何收藏_如何使用SAP菜单收藏夹
  20. 如何在WooCommerce中创建智能优惠券

热门文章

  1. printf 打印结构体成员函数出错原因分析
  2. 【排队助手】投屏模式-使用指南
  3. Python手撸机器学习系列(十五):简单神经网络
  4. 跟我StepByStep学FLEX教程------概述(原创)
  5. 第七章、Groovy面向对象
  6. andorid 问题集合
  7. TCP/IP协议第一章笔记
  8. 自建网站开通SSL协议
  9. 转载一篇RC电路分类
  10. 查看设备序列号和设备标识的方式(有三种方法)