Python SMTP协议实战:发送邮件及附件教程

5星 · 超过95%的资源 8 下载量 175 浏览量 更新于2024-09-01 1 收藏 77KB PDF 举报
本文详细介绍了如何在Python中利用SMTP协议实现发送邮件的功能。SMTP,即简单邮件传输协议,是电子邮件传输的标准,Python通过其内置的`smtplib`和`email`模块提供了对SMTP的支持。这两个模块分工明确,`email`模块用于构建邮件结构,而`smtplib`则负责实际的邮件发送。 首先,我们需要导入所需的模块: ```python import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr, formataddr ``` 要创建一个SMTP连接,我们可以选择普通的SMTP服务或使用SSL加密的SMTP服务,示例如下: ```python # 普通SMTP smtpObj = smtplib.SMTP(host='smtp.example.com', port=587) # 使用SSL加密 smtpObj = smtplib.SMTP_SSL(host='smtp.example.com', port=465) ``` 在发送邮件之前,我们需要设置发件人和收件人的地址,以及邮件的内容。例如,发送纯文本邮件: ```python from_addr = 'your_email@example.com' # 发件人邮箱 to_addrs = ['recipient1@example.com', 'recipient2@example.com'] # 收件人邮箱列表 # 构造邮件正文 msg = MIMEText('hello email', 'plain', 'utf-8') # 设置发件人头信息 def format_addr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8'), addr)) msg['From'] = format_addr('Sender Name <%s>' % from_addr) msg['To'] = ', '.join(format_addr(to_addr) for to_addr in to_addrs) # 发送邮件 smtpObj.sendmail(from_addr, to_addrs, msg.as_string(), mail_options=[], rcpt_options=[]) smtpObj.quit() ``` 若需要发送带有附件或图片的邮件,可以使用`MIMEBase`和`MIMEMultipart`等类来构建邮件的多个部分。例如,添加附件: ```python from email.mime.base import MIMEBase from email import encoders # 添加附件 with open('path_to_attachment', 'rb') as attachment: part = MIMEBase('application', 'octet-stream') part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment', filename='filename.txt') # 将附件添加到邮件主体 msg.attach(part) ``` 图片邮件则需先将其转换为二进制数据,然后添加到邮件中: ```python img_data = open('path_to_image.jpg', 'rb').read() image_part = MIMEImage(img_data, name='image.jpg') image_part.add_header('Content-ID', '<image1>') msg.attach(image_part) ``` 在实际应用中,记得根据邮箱服务商的文档确认正确的服务器地址、端口以及可能需要的认证信息,如客户端授权密码。通过以上步骤,您可以灵活地使用Python的SMTP功能来发送各种类型的邮件。