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)