美文网首页
使用Python发送邮件, 抄送多个收信人以及添加附件

使用Python发送邮件, 抄送多个收信人以及添加附件

作者: 小金刚葫芦妹 | 来源:发表于2017-07-29 07:02 被阅读0次

在豆瓣主题 "python发送带附件的gmail邮件" 看到的可以发送附件的Python代码.
自己根据需求增加了抄送和暗抄多个收信人的功能.
抄送部分整理自Python发送邮件时的抄送问题
另外在原有的发送 *.txt, *.jpg, *.MP3类型附件的基础上, 还增加了另一个添加附件的方法附件, 允许发送 pdf, word文档 和excel 等办公文档.

##完整代码使用gmail实现
##如果是其他邮箱发信,比如126, 只需修改服务器极其端口
    mail_server = 'smtp.126.com' 
    mail_server_port = 25 
#coding: utf-8
## define encironment
                ##1 邮箱登录信息
                ##2 发件人和收件人信息
                ##3 邮件主题及内容编辑
                ##4 定义收信人以及抄送和暗抄对象
                ##5 添加附件
                ##6 登录服务器
                ##7 发送邮件

    ##完整代码使用gmail实现
    ##如果是其他邮箱发信,比如126, 只需修改服务器极其端口以及用户名密码
    ##  mail_server = 'smtp.126.com' 
    ##  mail_server_port = 25 

## define encironment
import smtplib 
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.application import MIMEApplication
import os, mimetypes


## 添加附件: 可以发送包括英文txt, jpg , mp3, 注意不能发送pdf doc excel ppt
def add_attachment(filepath):
    ctype, encoding = mimetypes.guess_type(filepath)
    if ctype is None or encoding is not None: 
        ctype = "application/octet-stream"
    maintype, subtype = ctype.split("/", 1)

    if maintype == 'text':
        fp = open(filepath)
        attachment = MIMEText(fp.read(), _subtype=subtype)
        fp.close()
    elif maintype == 'image':
        fp = open(filepath, 'rb')
        attachment = MIMEImage(fp.read(), _subtype=subtype)
        fp.close()
    elif maintype == 'audio':
        fp = open(filepath, 'rb')
        attachment = MIMEAudio(fp.read(), _subtype=subtype)
        fp.close()
    else:
        fp = open(filepath, 'rb')
        attachment = MIMEBase(maintype, subtype)
        attachment.set_payload(fp.read())
        fp.close()
        encoders.encode_base64(attachment)

    baseName = os.path.basename(filepath)
    attachment.add_header('Content-Disposition', 'attachment', filepath=filepath,  filename=baseName)
    msg.attach(attachment)
    print(filepath, 'added')

## 邮箱登录信息
username = 'sender@gmail.com' ## 用户名 
password = 'password' ## 密码 

##发件人和收件人信息
sender = 'sender@gmail.com' ## 发件人邮箱, 多人逗号分开
receiver = 'receiver1@gmail.com,receiver2@gmail.com' ## 收件人邮箱, 多人逗号分开
cc='cc1@gmail.com,cc2@126.com'  # #抄送邮箱, 多人逗号分开
bcc='bcc1@126.com,bcc2@126.com' # 暗抄邮箱, 多人逗号分开

##邮件内容编辑
##邮件主题
subject = 'Python gmail test'
########### email内容, html有格式的文档 ##############
mail_content = '<html><h1>Python gmail测试</h1></html>' 

#############
        ## 所有收信人以及抄送和暗抄对象都一样,
        ##放在都一样 server.sendmail(sender, toaddrs, msg.as_string()) 第二个参数toaddrs里面

        ##具体区别收信人以及抄送和暗抄对象,
        ##都由server.sendmail(sender, toaddrs, msg.as_string()) 第三个参数里面msg里面的关键词决定
#############
msg = MIMEMultipart() 
msg.add_header('From',username) 
msg.add_header('To',receiver) 
msg.add_header('Cc',cc)
msg.add_header('BCc',bcc) 
msg.add_header('Subject',subject) 
msg.add_header('Date',subject)
msg.attach(MIMEText(mail_content, 'html')) 
##所有收信人信息
toaddrs = [receiver] + [cc] + [bcc]

##########################添加附件
        ## 有两种方法添加附件
        ##filepath ="D:\\test.jpg" ##绝对路径
        ##方法一
               #可发送英文txt, jpg , mp3, 不能发送pdf doc excel ppt
        ##方法二
               #可发送中英文txt, 中英文docx,jpg , pdf, excel 和ppt, 但是不能发送mp3
        ##这里把所有附件放到一个列表里面, jpg , mp3 文件方法一添加, 其他文件类型都用第二种方法添加
##########################

Files=['temp.txt','test.jpg', 'song.mp3','file.pdf']

for filepath in Files:
  ctype, encoding = mimetypes.guess_type(filepath)
  if ctype is None or encoding is not None: 
        ctype = "application/octet-stream"
  maintype, subtype = ctype.split("/", 1)
  if maintype in['image','audio']:
    add_attachment(filepath)
  else:
    baseName = os.path.basename(filepath) 
    att = MIMEApplication(open(filepath,'rb').read())
    att.add_header('Content-Disposition', 'attachment', filename=baseName)
    msg.attach(att)
    print(filepath, 'added')


#############发送
mail_server = 'smtp.gmail.com' 
mail_server_port = 587 
server = smtplib.SMTP(mail_server, mail_server_port) 
# server.set_debuglevel(1) # 调试模式 
server.ehlo() 
server.starttls() 
server.login(username, password) 
server.sendmail(sender, toaddrs, msg.as_string()) 
server.quit()

相关文章

  • 使用Python发送邮件, 抄送多个收信人以及添加附件

    在豆瓣主题 "python发送带附件的gmail邮件" 看到的可以发送附件的Python代码.自己根据需求增加了抄...

  • 使用Python发送邮箱

    发送普通文件以及添加附件 发送html内容格式的邮件

  • Python之发送邮件

    Python之发送邮件 使用SMTP模块发送邮件 发送HTML文件 发送带附件的文件 Django发送文件 各大邮...

  • SMTP 发送邮件

    SMTP 是发送邮件的协议,Python 内置对 SMTP 的支持,可以发送纯文本邮件、HTML 邮件以及带附件的...

  • Python发送邮件

    Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 Python对SMTP支持有...

  • 61. SMTP发送邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 P...

  • 邮件发送

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 S...

  • python 发送带各种附件的邮件示例

    简述下如何使用python发送各种附件的邮件,比如word、excel、pdf、txt,以及在正文插入图片等等 如...

  • python 发送带各种附件的邮件示例!

    简述下如何使用python发送各种附件的邮件,比如word、excel、pdf、txt,以及在正文插入图片等等 如...

  • Python 电子邮件(SMTP、POP3)

    官网地址 Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。Python对SMT...

网友评论

      本文标题:使用Python发送邮件, 抄送多个收信人以及添加附件

      本文链接:https://www.haomeiwen.com/subject/zajqlxtx.html