一、SMTP协议简介
SMTP(Simple Mail Transfer Protocol)是一种用于发送电子邮件的标准协议。SMTP服务器提供了一种用于发送邮件的简单而强大的方式。使用Python可以轻松地通过SMTP协议发送电子邮件。在Python中,smtplib是负责与SMTP服务器通信的模块。
二、SMTP连接
在Python中,使用smtplib.SMTP类来连接SMTP服务器,SMTP类的构造函数需要两个参数:SMTP服务器的主机名和端口号。SMTP服务器的主机名可以是IP地址或域名。下面是连接SMTP服务器的代码示例:
import smtplib smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" smtp_password = "password" smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp_conn.login(smtp_username, smtp_password)
三、发送邮件
通过SMTP连接对象,可以使用sendmail方法发送邮件。该方法需要三个参数:发件人地址、收件人地址和邮件内容。
import smtplib smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" # 发件人地址 smtp_password = "password" # 邮箱密码 to_addr = "example2@qq.com" # 收件人地址 subject = "Python SMTP邮件测试" # 邮件主题 body = "这是一封PythonSMTP邮件测试。\n" # 邮件内容 msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" % (smtp_username, to_addr, subject, body) smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp_conn.login(smtp_username, smtp_password) smtp_conn.sendmail(smtp_username, to_addr, msg) smtp_conn.quit()
四、邮件内容设置
发送邮件时,需要设置邮件主题和内容。邮件主题和内容都可以包含HTML标签。可以使用email.mime模块中的MIMEText类来创建邮件主题和内容。
import smtplib from email.mime.text import MIMEText smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" # 发件人地址 smtp_password = "password" # 邮箱密码 to_addr = "example2@qq.com" # 收件人地址 # 邮件主题 subject = "Python SMTP邮件测试" # 邮件内容 content = "这是一封PythonSMTP邮件测试。
邮件内容可以包含HTML标签。
" msg = MIMEText(content, "html", "utf-8") msg["Subject"] = subject msg["From"] = smtp_username msg["To"] = to_addr smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp_conn.login(smtp_username, smtp_password) smtp_conn.sendmail(smtp_username, to_addr, msg.as_string()) smtp_conn.quit()
五、邮件附件
有时需要在邮件中添加附件。可以使用email.mime模块中的MIMEMultipart类来创建带有附件的邮件。
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" # 发件人地址 smtp_password = "password" # 邮箱密码 to_addr = "example2@qq.com" # 收件人地址 # 邮件主题 subject = "Python SMTP邮件测试" # 邮件内容 content = "这是一封PythonSMTP邮件测试。
邮件内容可以包含HTML标签。
" # 创建一个带有附件的邮件 msg = MIMEMultipart() msg["Subject"] = subject msg["From"] = smtp_username msg["To"] = to_addr # 添加邮件内容 text = MIMEText(content, "html", "utf-8") msg.attach(text) # 添加附件 file_path = "test.zip" with open(file_path, "rb") as f: att = MIMEApplication(f.read()) att.add_header("Content-Disposition", "attachment", filename=file_path) msg.attach(att) smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp_conn.login(smtp_username, smtp_password) smtp_conn.sendmail(smtp_username, to_addr, msg.as_string()) smtp_conn.quit()
六、小结
使用Python SMTP发送邮件非常简单,只需要连接SMTP服务器,设置邮件主题和内容,然后发送即可。使用email.mime模块可以创建带有附件的邮件。