详解Pythonsend_mail()函数中的参数和用法
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")
这样就可以发送一封包含附件的邮件了。
