一、Python发送邮件的基本知识
Python发送邮件的基本知识包括SMTP、MIME和SSL/TLS协议三个方面。
SMTP(Simple Mail Transfer Protocol)是Internet邮件传输的协议,Python中使用smtplib模块提供基于SMTP协议的邮件发送功能。
MIME(Multipurpose Internet Mail Extensions)是一种邮件传输协议,可用于发送复杂或富文本邮件。Python中使用email及其子模块提供MIME邮件相关的功能。
SSL(Secure Socket Layer)与TLS(Transport Layer Security)是加密通信协议,可用于保护电子邮件通信中的数据,Python中使用ssl模块提供SSL/TLS相关功能。
import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddr sender = 'sender@example.com' # 发件人邮箱 password = 'password' # 发件人邮箱密码或授权码 receivers = ['receiver1@example.com', 'receiver2@example.com'] # 接收人邮箱,可支持多个接收人 message = MIMEText('Python邮件发送测试', 'plain', 'utf-8') message['From'] = formataddr((Header('发件人', 'utf-8').encode(), sender)) message['To'] = ','.join(receivers) message['Subject'] = Header('Python SMTP 邮件测试', 'utf-8').encode() try: smtpObj = smtplib.SMTP('smtp.example.com', 25) # SMTP服务器地址和端口 smtpObj.login(sender, password) # 登录SMTP服务器 smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件 smtpObj.quit() # 退出SMTP服务器 print("邮件发送成功!") except smtplib.SMTPException as e: print("邮件发送失败,错误信息:", e)
二、SMTP协议的使用
使用Python发送邮件的第一步是建立SMTP连接。Python提供了smtplib模块以支持SMTP协议。建立SMTP连接的方法是使用SMTP类的connect()或starttls()方法,这两种方法的选择取决于你是否需要使用加密连接。
在建立SMTP连接后,你可以使用SMTP类的login()方法提供SMTP服务器的用户名和密码进行身份验证。这是必须的,因为大多数SMTP服务器需要验证以防止恶意或未经授权的访问。
一旦你成功连接到SMTP服务器并进行身份验证,就可以使用SMTP类的sendmail()方法来发送邮件。在 sendmail() 方法中,你需要提供发件人地址,收件人地址以及要发送的消息。如果你要发送HTML或带附件的消息,你需要使用email库和MIME协议。
三、MIME协议的使用
邮件中的MIME(Multipurpose Internet Mail Extensions)协议是一种邮件内容格式。它允许您在邮件中发送不同类型的内容,例如文本、HTML、图像或附件。
Python中使用email库来创建MIME消息。将要发送的邮件消息作为一个字符串传递给MIMEText类。然后设置消息的发送者、接收者和主题,将该消息附加到MIME邮件中并发送它。
from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders msg = MIMEMultipart() msg['From'] = formataddr((Header('XX网站管理员', 'utf-8').encode(), 'webmaster@example.com')) msg['To'] = formataddr((Header('用户', 'utf-8').encode(), 'user@example.com')) msg['Subject'] = Header('XX网站密码重置', 'utf-8').encode() # 邮件正文 message = MIMEText('请点击下面的链接重置您的密码:\n\nhttp://www.example.com/resetpassword?key=abcdefg\n\n', 'plain', 'utf-8') msg.attach(message) # 添加附件 filename = 'guide.pdf' attachment = open(filename, 'rb') part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename= %s" % filename) msg.attach(part) try: smtpObj = smtplib.SMTP('smtp.example.com', 25) smtpObj.login(sender, password) smtpObj.sendmail(sender, receivers, msg.as_string()) smtpObj.quit() print("邮件发送成功!") except smtplib.SMTPException as e: print("邮件发送失败,错误信息:", e)
四、使用SSL/TLS进行加密通信
SSL(Secure Socket Layer)与TLS(Transport Layer Security)是加密通信协议,可用于保护电子邮件通信中的数据。Python中使用ssl模块提供SSL/TLS相关功能。
如果你要使用SSL加密SMTP通信,请使用SMTP_SSL类代替SMTP类。如果你要使用STARTTLS加密SMTP通信,请使用SMTP类的starttls()方法来启动加密连接。
import ssl context = ssl.create_default_context() with smtplib.SMTP_SSL("smtp.example.com", 465, context=context) as server: server.login(sender, password) server.sendmail(sender, receivers, message.as_string()) print('邮件发送成功!')
五、使用Python发送HTML邮件
使用Python发送HTML格式的邮件也很简单。只需使用MIMEText类,并指定“html”作为消息的子类型即可。
from email.mime.text import MIMEText html = 'Hello, World!
这是一封HTML邮件。