欢迎访问宙启技术站
智能推送

使用PythonSMTPHandler()发送自定义邮件内容的方法

发布时间:2023-12-26 02:40:38

使用Python的logging模块中的SMTPHandler类可以方便地发送自定义内容的邮件。SMTPHandler类是一个日志处理程序,可将日志记录通过SMTP发送到特定的邮箱地址。

以下是发送自定义内容邮件的方法和一个简单的使用例子:

1. 导入所需的模块:

import logging
import logging.handlers
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

2. 设置SMTPHandler类,并定义邮件主题、发件人、收件人、SMTP服务器等参数:

mailhost = 'smtp.example.com'  # 邮件服务器
from_addr = 'sender@example.com'  # 发件人邮箱
to_addrs = ['recipient1@example.com', 'recipient2@example.com']  # 收件人邮箱列表
subject = 'Custom Email Subject'  # 邮件主题

smtp_handler = logging.handlers.SMTPHandler(
    mailhost=mailhost,
    fromaddr=from_addr,
    toaddrs=to_addrs,
    subject=subject
)

3. 自定义邮件内容:

def format_email(record):
    # 自定义邮件内容格式
    msg = MIMEMultipart()
    msg['From'] = from_addr
    msg['To'] = ','.join(to_addrs)
    msg['Subject'] = subject

    # 构造邮件正文
    body = MIMEText(record.getMessage())
    msg.attach(body)

    # 添加附件
    if record.exc_info:
        # 添加异常信息
        exc_msg = logging.Formatter().formatException(record.exc_info)
        exc = MIMEText(exc_msg)
        msg.attach(exc)

    return msg.as_string()

smtp_handler.format = format_email

4. 配置日志记录器并添加SMTPHandler类:

logger = logging.getLogger()
logger.addHandler(smtp_handler)

# 设置日志记录级别
logger.setLevel(logging.ERROR)

5. 在代码中进行日志记录操作:

try:
    # 记录日志
    logger.error('Custom error message')
    # 需要记录的其他日志记录...
except Exception as e:
    logger.exception(e)

以上代码设置了一个SMTPHandler实例,将错误日志发送到指定邮箱,同时自定义了邮件内容的格式。可以根据实际需求进一步修改邮件格式和内容。

使用例子:

import logging
import logging.handlers
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 邮件参数
mailhost = 'smtp.example.com'
from_addr = 'sender@example.com'
to_addrs = ['recipient1@example.com', 'recipient2@example.com']
subject = 'Custom Email Subject'

# 设置SMTPHandler类
smtp_handler = logging.handlers.SMTPHandler(
    mailhost=mailhost,
    fromaddr=from_addr,
    toaddrs=to_addrs,
    subject=subject
)

# 自定义邮件内容格式
def format_email(record):
    msg = MIMEMultipart()
    msg['From'] = from_addr
    msg['To'] = ','.join(to_addrs)
    msg['Subject'] = subject

    body = MIMEText(record.getMessage())
    msg.attach(body)

    if record.exc_info:
        exc_msg = logging.Formatter().formatException(record.exc_info)
        exc = MIMEText(exc_msg)
        msg.attach(exc)

    return msg.as_string()

smtp_handler.format = format_email

# 配置日志记录器
logger = logging.getLogger()
logger.addHandler(smtp_handler)
logger.setLevel(logging.ERROR)

# 记录日志
try:
    logger.error('Custom error message')
except Exception as e:
    logger.exception(e)

以上例子设置了一个SMTPHandler实例,当错误发生时通过邮件发送错误日志到指定邮箱。邮件内容包含错误消息和异常信息(如果有)。可以根据实际需求修改邮件内容格式和发送目标等参数。