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

详解Pythonsend_mail()函数中的参数和用法

发布时间:2024-01-10 10:25:03

Python的send_mail()函数是一个发送邮件的方法,它可以用来发送邮件给指定的收件人。该函数有很多参数,下面我将详细解释每个参数的意义和用法,并提供一个使用例子。

1. sender: 发件人邮箱地址

这个参数用于指定邮件的发送者,必须是一个有效的邮箱地址。

2. password: 发件人邮箱授权码

这个参数用于指定发送者邮箱的授权码,用于通过SMTP服务器发送邮件。

3. receiver: 收件人邮箱地址

这个参数用于指定邮件的接收者,可以是一个单独的邮箱地址,也可以是一个邮箱地址列表。

4. subject: 邮件主题

这个参数用于指定邮件的主题,是一个字符串类型的变量。

5. body: 邮件正文

这个参数用于指定邮件的正文内容,也是一个字符串类型的变量。

6. attachment: 附件

这个参数用于指定邮件的附件,可以是一个文件路径,也可以是一个包含多个文件路径的列表。

7. cc: 抄送

这个参数用于指定邮件的抄送人,可以是一个单独的邮箱地址,也可以是一个邮箱地址列表。

8. bcc: 密送

这个参数用于指定邮件的密送人,可以是一个单独的邮箱地址,也可以是一个邮箱地址列表。

9. smtp_server: SMTP服务器地址

这个参数用于指定发送邮件时使用的SMTP服务器地址,默认为"smtp.gmail.com"。

10. smtp_port: SMTP服务器端口

这个参数用于指定SMTP服务器的端口,默认为465。

使用例子:

以下是一个使用send_mail()函数发送邮件的例子,假设发送邮件的邮箱是sender@gmail.com,授权码为password123,接收邮件的邮箱是receiver@example.com,邮件主题为"Hello World",邮件内容为"这是一封测试邮件",并且附加了一个名为"attachment.txt"的附件。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

def send_mail(sender, password, receiver, subject, body, attachment=None, cc=None, bcc=None, smtp_server="smtp.gmail.com", smtp_port=465):
    # 创建一个MIMEMultipart对象,用于构建邮件内容
    message = MIMEMultipart()
    # 设置邮件主题
    message['Subject'] = Header(subject, 'utf-8')
    # 设置发件人邮箱地址
    message['From'] = sender
    # 设置收件人邮箱地址
    message['To'] = receiver
    # 设置抄送人邮箱地址
    if cc:
        message['Cc'] = cc
    # 设置密送人邮箱地址
    if bcc:
        message['Bcc'] = bcc
    # 创建文本类型的邮件正文,并添加到MIMEMultipart对象中
    text = MIMEText(body, 'plain', 'utf-8')
    message.attach(text)
    # 添加附件
    if attachment:
        if isinstance(attachment, list):
            for file in attachment:
                with open(file, 'rb') as f:
                    # 读取附件内容
                    attachment_data = f.read()
                # 创建附件对象
                attachment_part = MIMEText(attachment_data, 'base64', 'utf-8')
                attachment_part['Content-Type'] = 'application/octet-stream'
                # 设置附件的文件名
                attachment_part.add_header('Content-Disposition', 'attachment',
                                           filename=('utf-8', '', file.split('/')[-1]))
                message.attach(attachment_part)
        else:
            with open(attachment, 'rb') as f:
                # 读取附件内容
                attachment_data = f.read()
            # 创建附件对象
            attachment_part = MIMEText(attachment_data, 'base64', 'utf-8')
            attachment_part['Content-Type'] = 'application/octet-stream'
            # 设置附件的文件名
            attachment_part.add_header('Content-Disposition', 'attachment',
                                       filename=('utf-8', '', attachment.split('/')[-1]))
            message.attach(attachment_part)

    try:
        # 创建SMTP对象,并连接SMTP服务器
        smtpObj = smtplib.SMTP_SSL(smtp_server, smtp_port)
        # 登录SMTP服务器
        smtpObj.login(sender, password)
        # 发送邮件
        smtpObj.sendmail(sender, [receiver] + (cc or '') + (bcc or ''), message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException as e:
        print("邮件发送失败:" + str(e))

使用上述例子中的send_mail()函数发送邮件,可以按照以下方式调用:

send_mail("sender@gmail.com", "password123", "receiver@example.com", "Hello World", "这是一封测试邮件")

这样就可以发送一封包含指定主题和内容的邮件给指定的接收人了。如果想要发送附件,可以在调用send_mail()函数时传入attachment参数,如下所示:

send_mail("sender@gmail.com", "password123", "receiver@example.com", "Hello World", "这是一封测试邮件", attachment="attachment.txt")

这样就可以发送一封包含附件的邮件了。