您的位置:

通过Python SMTP发送电子邮件的完整教程

一、准备工作

在使用Python SMTP发送电子邮件之前,需要进行一些准备工作。首先,需要获取邮件服务器的信息,包括SMTP服务器地址、SMTP端口、邮箱账号和密码等信息。若不清楚该如何获取这些信息,可以通过联系邮件服务提供商进行咨询。

接下来需要安装Python的email和smtplib库。

pip install email smtplib

二、构建邮件内容

可以通过Python中email库提供的类来构建邮件内容。下面是一个简单的构建邮件内容的示例代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'send@example.com'
receivers = ['receiver@example.com']

message = MIMEText('Python发送邮件示例', 'plain', 'utf-8')
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('Python SMTP邮件示例', 'utf-8')

smtpObj = smtplib.SMTP('smtp.example.com', 25)
smtpObj.login('send@example.com', 'password')
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()

执行上述代码会发送一封简单的邮件。

三、添加附件

若需要添加附件,可以通过email库中的MIMEImage、MIMEAudio、MIMEApplication、MIMEText等类来分别创建不同类型的附件对象,并通过MIMEMultipart类将文本和附件组合在一起。下面是一个添加图片附件的示例代码:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header

sender = 'send@example.com'
receivers = ['receiver@example.com']

message = MIMEMultipart()
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('Python SMTP邮件带附件示例', 'utf-8')

text = MIMEText('Python发送邮件示例', 'plain', 'utf-8')
message.attach(text)

with open('/path/to/image.jpg', 'rb') as f:
    img_data = f.read()
image = MIMEImage(img_data)
image.add_header('Content-Disposition', 'attachment', filename='image.jpg')
message.attach(image)

smtpObj = smtplib.SMTP('smtp.example.com', 25)
smtpObj.login('send@example.com', 'password')
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()

执行上述代码会发送一封带有图片附件的邮件。

四、使用SSL加密连接

若需要使用SSL加密连接,可以通过SMTP_SSL类来进行连接。下面是一个使用SSL加密连接的示例代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'send@example.com'
receivers = ['receiver@example.com']

message = MIMEText('Python发送邮件示例', 'plain', 'utf-8')
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('Python SMTP邮件示例', 'utf-8')

smtpObj = smtplib.SMTP_SSL('smtp.example.com', 465)
smtpObj.login('send@example.com', 'password')
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()

执行上述代码会使用SSL加密连接发送一封简单的邮件。

五、使用TLS加密连接

若需要使用TLS加密连接,可以在连接前调用starttls()方法。下面是一个使用TLS加密连接的示例代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'send@example.com'
receivers = ['receiver@example.com']

message = MIMEText('Python发送邮件示例', 'plain', 'utf-8')
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('Python SMTP邮件示例', 'utf-8')

smtpObj = smtplib.SMTP('smtp.example.com', 25)
smtpObj.starttls()
smtpObj.login('send@example.com', 'password')
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()

执行上述代码会使用TLS加密连接发送一封简单的邮件。