author:Ian

邮件#
中文附件#
发送邮件时携带附件 中文名称附件
def send_email_week_report(htm, recipients, copys, file_name, file_path):
port = 465
# str_today = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
str_today = datetime.now().strftime("%Y-%m-%d")
mail_host = "mail.{demo}.com"
mail_user = "{user name}"
mail_pass = "{passwd}"
sender = '{name}@{demo}.com'
mail_from = "{name} <{name}@{demo}.com>"
msg_Bcc = '{name}@{demo}.com'
subject = f"{title}-{str_today}" # 标题
msg = MIMEMultipart()
msg.attach(MIMEText(htm, 'html', 'utf-8')) # 这里可以传html内容 也可以传普通文字
# 创建附件
with open(file_path, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
'attachment',
filename=("utf-8", "", file_name),
)
msg.attach(part)
for root, _, files in os.walk(os.path.join(BASE_DIR, '{path}/images')):
for f in files:
if f in htm:
with open(os.path.join(root, f), 'rb') as fp:
image = MIMEImage(fp.read())
image.add_header('Content-ID', f'<{f}>')
msg.attach(image)
msg['From'] = mail_from # 发件人
msg['To'] = ";".join(recipients) # 收件人多个逗号分隔
msg["Cc"] = ";".join(copys)
msg["Bcc"] = msg_Bcc
subject = subject
msg['Subject'] = Header(subject)
try:
smtpObj = smtplib.SMTP_SSL(mail_host)
if is_partner_node == 1:
smtpObj = smtplib.SMTP(mail_host)
smtpObj.connect(mail_host, port)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, recipients + copys + [sender], msg.as_string())
return True
except smtplib.SMTPException as e:
return False有限制的附件#
这种内容插入附件会有文件名称长度限制(19好像或者16)