电子说
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
Python发送邮件比较简单,掌握两个自带库 smtplib、email 即可,smtplib 负责发送邮件,email 负责构造邮件(邮件内容,主题,收件人,抄送人等)。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
MIMEText用于电子邮件正文
MIMEMultipart用于电子邮件结构
MIMEApplication用于在电子邮件中添加二进制数据(如文件附件)
MIMEImage用于图片
import smtplib from email.mime.image import MIMEImage from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication
1.发送邮件(可带附件)
下面是一个使用Python中的smtplib库发送电子邮件的示例代码。
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication # 设置发送邮件的信息 sender_email = 'xxx@qq.com' # 发件人邮箱账号 sender_password = 'xxx' # 发件人邮箱授权码 receiver_email = 'xxx@qq.com' # 收件人邮箱账号 subject = 'This is a test email by 数字ICer' # 邮件的主题 smtp_server = 'smtp.qq.com' #qq邮箱的SMTP服务器 smtp_port = 465 #qq邮箱的SMTP服务器端口465 def send_email(): ret=True try: #创建一个multipart的邮件对象 msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = receiver_email msg['Subject'] = subject #添加邮件正文 body = 'Hello, this is a test email.' msg.attach(MIMEText(body, 'plain')) # 添加附件 # filename = 'attachment.pdf' # with open(filename, 'rb') as f: # attachment = MIMEApplication(f.read(), _subtype='pdf') # attachment.add_header('Content-Disposition', 'attachment', filename=filename) # msg.attach(attachment) # # 发送邮件 with smtplib.SMTP_SSL(smtp_server, smtp_port) as smtp: smtp.login(sender_email, sender_password) smtp.sendmail(sender_email, receiver_email, msg.as_string()) print("邮件发送成功") except Exception as e: print("邮件发送失败:", e) send_email()
上面使用QQ邮箱帐户发送邮件,也可以使用其他邮箱,需要定义邮箱的SMTP服务器和端口。
对于QQ邮箱,SMTP服务器是smtp.qq.com,SMTP端口是465。
生成授权码
在 邮箱设置-->账户
设置POP3/IMAP/SMTP服务中
点击生成授权码,sender_password = 'xxx' 即为授权码,并不是你的qq邮箱密码;
授权码
定义发件人电子邮件地址、授权码和收件人电子邮件地址。
使用MIMEMultipart()创建一个多部分消息。使用msg['From']、msg['To']和msg['Subject']向消息添加发件人、收件人和主题。
使用MIMEText(body, 'plain')向消息添加邮件正文。
使用MIMEApplication()向消息添加附件。
其中 MIMEText 构造对象时,第一个参数是邮件正文;第二个参数是subType,可以设置两种格式 'plain' 和 'html';‘plain’ 表示发送纯文本消息。
发送邮件(可带附件)
2.发送HTML格式的邮件
下面是发送HTML格式电子邮件的示例代码。
import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication sender_email = 'xxx@qq.com' # 发件人邮箱账号 sender_password = 'xxx' # 发件人邮箱授权码 receiver_email = 'xxx@qq.com' # 收件人邮箱账号 subject = 'This is a test email by 数字ICer' # 邮件的主题 smtp_server = 'smtp.qq.com' #qq邮箱的SMTP服务器 smtp_port = 465 #qq邮箱的SMTP服务器端口465 mail_msg = """Python 邮件发送测试...
""" msg = MIMEText(mail_msg, 'html', 'utf-8') msg['From'] = Header("sender_email", 'utf-8') msg['To'] = Header("receiver_email", 'utf-8') msg['Subject'] = Header(subject, 'utf-8') try: with smtplib.SMTP_SSL(smtp_server, smtp_port) as smtp: smtp.login(sender_email, sender_password) smtp.sendmail(sender_email, receiver_email, msg.as_string()) print ("邮件发送成功") except smtplib.SMTPException: print ("Error: 无法发送邮件")
email.header是Python标准库中的一个模块,Header类是一个用于处理电子邮件头部的工具,它可以处理中文等非ASCII字符集,确保电子邮件头部可以正确显示和解析。
当在电子邮件头部中使用中文或其他非ASCII字符时,需要对这些字符进行编码,以确保电子邮件头部可以被正确地显示和解析。Header类可以将这些非ASCII字符编码为合适的格式。
发送HTML格式的邮件
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !