通过Python电子邮件库发送电子邮件会抛出错误"expected or bytes-like object"是因为在发送邮件时,邮件内容需要以字节形式进行编码。如果直接传递字符串作为邮件内容,会导致该错误的抛出。
为了解决这个问题,可以使用Python的内置模块email和smtplib来发送电子邮件。下面是一个示例代码:
import smtplib
from email.mime.text import MIMEText
def send_email(sender, receiver, subject, message):
# 创建邮件内容
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = subject
try:
# 连接SMTP服务器
smtp_server = 'smtp.example.com' # 替换为实际的SMTP服务器地址
smtp_port = 587 # 替换为实际的SMTP服务器端口
smtp_username = 'your_username' # 替换为实际的SMTP用户名
smtp_password = 'your_password' # 替换为实际的SMTP密码
smtp_connection = smtplib.SMTP(smtp_server, smtp_port)
smtp_connection.starttls()
smtp_connection.login(smtp_username, smtp_password)
# 发送邮件
smtp_connection.sendmail(sender, receiver, msg.as_string())
smtp_connection.quit()
print("邮件发送成功!")
except Exception as e:
print("邮件发送失败:", str(e))
# 调用发送邮件函数
send_email('sender@example.com', 'receiver@example.com', '测试邮件', '这是一封测试邮件。')
在上述代码中,我们首先创建了一个MIMEText对象来表示邮件内容,指定了邮件的类型为plain(纯文本),编码为utf-8。然后,我们设置了发件人、收件人和主题。接下来,我们通过smtplib模块连接到SMTP服务器,并使用starttls()方法启用TLS加密。然后,我们使用login()方法登录SMTP服务器,并使用sendmail()方法发送邮件。最后,我们使用quit()方法关闭与SMTP服务器的连接。
推荐的腾讯云相关产品是腾讯云邮件推送(https://cloud.tencent.com/product/ses)和腾讯企业邮(https://cloud.tencent.com/product/exmail),它们提供了可靠的邮件发送和接收服务,适用于个人和企业用户。
领取专属 10元无门槛券
手把手带您无忧上云