python发送html邮件

转至:https://www.cnblogs.com/gongxr/p/7355326.html

# 发送html内容的邮件
import smtplib, time, os
from email.mime.text import MIMEText
from email.header import Header


def send_mail_html(file):
    '''发送html内容邮件'''
    # 发送邮箱
    sender = 'zhangkai@192.168.20.190'
    # 接收邮箱
    receiver = 'gongxingrui@192.168.20.190'
    # 发送邮件主题
    t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    subject = '自动化测试结果_' + t
    # 发送邮箱服务器
    smtpserver = '192.168.20.190'
    # 发送邮箱用户/密码
    username = 'zhangkai'
    password = '123456'

    # 读取html文件内容
    f = open(file, 'rb')
    mail_body = f.read()
    f.close()

    # 组装邮件内容和标题,中文需参数‘utf-8’,单字节字符不需要
    msg = MIMEText(mail_body, _subtype='html', _charset='utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = sender
    msg['To'] = receiver
    # 登录并发送邮件
    try:
        smtp = smtplib.SMTP()
        smtp.connect(smtpserver)
        smtp.login(username, password)
        smtp.sendmail(sender, receiver, msg.as_string())
    except:
        print("邮件发送失败!")
    else:
        print("邮件发送成功!")
    finally:
        smtp.quit()


def find_new_file(dir):
    '''查找目录下最新的文件'''
    file_lists = os.listdir(dir)
    file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\\" + fn)
                    if not os.path.isdir(dir + "\\" + fn)
                    else 0)
    # print('最新的文件为: ' + file_lists[-1])
    file = os.path.join(dir, file_lists[-1])
    print('完整文件路径:', file)
    return file


dir = 'D:\\test_data\\auto_test_result'  # 指定文件目录
file = find_new_file(dir)  # 查找最新的html文件
send_mail_html(file)  # 发送html内容邮件

 

<think>好的,我现在需要回答用户的问题:如何用Python发送HTML格式的电子邮件,并提供示例代码。用户提到了参考引用,我需要查看这些引用内容,看看是否有帮助。 首先,引用[1]提到可以使用Python内置库发送带有HTML内容的邮件,并提到需要开启QQ邮箱的SMTP服务。引用[2]给出了设置邮件参数的示例代码,比如发件人、收件人、主题和正文。引用[3]是关于批量发送邮件的,可能相关的部分是如何处理邮件内容。 用户的需求明确,是要发送HTML格式的邮件,所以重点在于如何将HTML内容嵌入到邮件中,而不是纯文本。Python的smtplib和email库应该可以完成这个任务。需要用到MIMEMultipart来组合邮件,MIMEText来创建HTML部分。 步骤应该是:导入必要的库,设置邮件参数(服务器、端口、账号、密码),创建MIMEMultipart对象,添加主题、发件人、收件人,然后创建HTML内容的MIMEText部分,并将其附加到邮件中。最后使用SMTP_SSL连接服务器并发送。 需要注意的是,HTML内容需要使用正确的MIME类型,即'html'。同时,安全连接可能需要使用SSL,比如QQ邮箱的SMTP端口是465。此外,密码部分可能需要使用授权码而不是邮箱密码,特别是如果用户开启了SMTP服务的话,比如在QQ邮箱中。 示例代码需要包含这些步骤,并且要替换占位符如邮箱地址和密码。另外,可能需要处理异常,但用户可能不需要太复杂的错误处理,保持示例简单明了更好。 还需要提醒用户开启SMTP服务,并获取授权码,这部分在引用[1]中提到过,应该在注意事项里说明。 现在,整合这些内容,写出步骤和代码,确保代码语法正确,特别是MIMEMultipart和MIMEText的使用。同时,检查是否需要添加其他部分,比如纯文本备用内容,但用户只要HTML,可能不需要。不过,有些邮件客户端可能不支持HTML,所以最佳实践是同时提供纯文本和HTML版本,但用户的问题可能只需要HTML,所以保持简单。 确定代码是否正确:导入smtplib和email.mime中的相关模块,创建MIMEMultipart实例,添加头部,附加HTML部分,然后发送。端口使用465,SMTP_SSL正确。密码使用授权码,这一点需要注明。 最后生成相关问题,可能涉及发送附件、批量发送、使用其他邮箱服务等,参考已有的引用内容,比如引用[3]提到批量发送,可以生成相关问题。</think>### 分步解答:使用Python发送HTML格式的电子邮件 #### 一、准备工作 1. **开启SMTP服务** 以QQ邮箱为例,需在邮箱设置中开启SMTP服务并获取**授权码**(代替密码使用)[^1]。 2. **安装必要库** Python内置库`smtplib`和`email`无需额外安装。 --- #### 二、代码实现步骤 1. **导入库** ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText ``` 2. **配置邮箱参数** ```python smtp_server = "smtp.qq.com" # QQ邮箱服务器 smtp_port = 465 # SSL加密端口 sender_email = "your_email@qq.com" # 发件人邮箱 password = "your_authorization_code" # SMTP授权码(非邮箱密码) receiver_email = "recipient@example.com" # 收件人邮箱 ``` 3. **构建HTML邮件内容** ```python # 创建MIMEMultipart对象 message = MIMEMultipart() message["From"] = sender_email message["To"] = receiver_email message["Subject"] = "Python HTML邮件示例" # 定义HTML内容 html_content = """ <html> <body> <h1 style="color: #2ecc71;">这是一封HTML邮件</h1> <p>来自Python邮件发送示例,支持以下格式:</p> <ul> <li>粗体: <strong>重点内容</strong></li> <li>链接: <a href="https://example.com">示例网站</a></li> </ul> </body> </html> """ # 将HTML内容附加到邮件 message.attach(MIMEText(html_content, "html")) ``` 4. **发送邮件** ```python try: with smtplib.SMTP_SSL(smtp_server, smtp_port) as server: server.login(sender_email, password) server.sendmail(sender_email, receiver_email, message.as_string()) print("邮件发送成功") except Exception as e: print(f"发送失败: {e}") ``` --- #### 三、完整示例代码 ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText # 配置参数 smtp_server = "smtp.qq.com" smtp_port = 465 sender_email = "your_email@qq.com" password = "your_authorization_code" receiver_email = "recipient@example.com" # 构建邮件 message = MIMEMultipart() message["From"] = sender_email message["To"] = receiver_email message["Subject"] = "Python HTML邮件示例" html_content = """ <html> <body> <h1 style="color: #2ecc71;">HTML邮件测试</h1> <p>此邮件通过Python的<code>smtplib</code>发送,包含:</p> <ul> <li>自定义样式标题</li> <li>超链接: <a href="https://example.com">点击访问</a></li> </ul> </body> </html> """ message.attach(MIMEText(html_content, "html")) # 发送邮件 try: with smtplib.SMTP_SSL(smtp_server, smtp_port) as server: server.login(sender_email, password) server.sendmail(sender_email, receiver_email, message.as_string()) print("邮件已成功发送") except smtplib.SMTPException as e: print(f"SMTP协议错误: {e}") except Exception as e: print(f"其他错误: {e}") ``` --- #### 四、注意事项 1. 使用QQ邮箱时,`password`应为**SMTP授权码**(在邮箱设置中生成)[^1] 2. 若需同时包含纯文本和HTML版本,可创建两个`MIMEText`对象并通过`MIMEMultipart`组合 3. 邮件内容需符合HTML规范,避免复杂CSS样式兼容性问题 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值