python 邮件发送

python 发送邮件并添加附件

1、添加excel附件,解决附件名称中包含中文,接收附件异常的情况

def SendEmail(subject, content,toaddrs,annex_excel,filename):
    fromaddr = "XXXX.com"
    smtpaddr = "smtp.XXXXX.com"
    password ="XXXXXXX" #设置为邮箱登录密码
    recipient = []
    cmail = []
    # content = '测试邮件发送'
    ''''' 
    @subject:邮件主题 
    @msg:邮件内容 
    @toaddrs:收信人的邮箱地址 
    @fromaddr:发信人的邮箱地址 
    @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com 
    @password:发信人的邮箱密码 
    '''
    mail_msg = MIMEMultipart()
    if not isinstance(subject, str):
        subject = str(subject, 'utf-8')
    mail_msg['Subject'] = subject
    mail_msg['From'] = fromaddr
    mail_msg['To'] = COMMASPACE.join(recipient)
    mail_msg['Cc'] = COMMASPACE.join(cmail)
    mail_msg.attach(MIMEText(content, 'plain', 'utf-8'))
    # 附件内容
    date = time.strftime('%Y%m%d', time.localtime(time.time()))
    part = MIMEApplication(open(annex_excel, 'rb').read())
    part.add_header('Content-Disposition', 'attachment', filename=Header(filename, 'utf-8').encode())
    mail_msg.attach(part)
    try:
        s = smtplib.SMTP_SSL(host='smtp.XXXXX.com')
        s.connect(host='smtp.XXX.com', port=XXXXX)# 连接smtp服务器
        # 链接服务器   host:服务器  port:端口号
        print('connect')
        s.login(fromaddr, password)  # 登录邮箱
        print('login success')
        print(recipient, cmail, toaddrs)
        s.sendmail(fromaddr, toaddrs, mail_msg.as_string())  # 发送邮件
        s.quit()
        print('send eamil successful')
    except(Exception):
        # print("Error: unable to send email", e)
        print(traceback.format_exc())
        print(Exception)

2、python发送邮件并在正文中添加正文内容

 2.1 正文中html

def mailWrite(filepath):
    #表格的标题和头
    header = '''<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        .tt{font-size:12px}
    </style>
    </head>'''
    th = '<body text="#000001" ><table class="tt" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000" width="520"' \
         ' align="left" ><tr bgcolor="#F79646" align="left" ><th>name</th><th>time</th><th>dt</th><th>counts</th>' \
         '<th>online_cnt</th><th>count_prec</tr>'
    #打开文件
    #filepath设置详细的文件地址
    book = xlrd.open_workbook(filepath)
    sheet = book.sheet_by_index(0)
    #获取行列的数目,并以此为范围遍历获取单元数据
    #nrows 行数,ncols 列数
    nrows = sheet.nrows - 1
    ncols = sheet.ncols
    body = ''
    cellData = 1
    for i in range(1,nrows+1):
        td = ''
        for j in range(ncols):
            cellData = sheet.cell_value(i,j)
            #读取单元格数据,赋给cellData变量供写入HTML表格中
            tip = '<td>' + cellData + '</td>'
            td = td + tip
            tr = '<tr>' + td + '</tr>'
            #tr = tr.encode('utf-8')
        body = body + tr
        tail = '</table></body></html>'
        mailcontent = header+th+body+tail
    #将excel文件的内容转换为html格式,后续在邮件中拼接
    return mailcontent

  正文中调用

def main():
        subject_success = "XXXXXX"
        date = time.strftime('%Y%m%d', time.localtime(time.time()))
        filename = 'XXXXXX'+'.xlsx'
        toaddrs_js = [XXXX@XXXX.com"]
        excel_filepath= 'XXXXXX'+'.xlsx'
        content_s=mailWrite(excel_filepath)
        cs = """
                <p>信息如下:</p>
                """
        content_sucess=cs+content_s
        SendEmail(subject_success, content_sucess, toaddrs_js, excel_filepath, filename)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值