使用Python轻松搞定发邮件

1. 前言

Python作为一门广泛使用的编程语言,拥有着丰富的第三方库,很多问题都能够用Python来解决。在项目中,邮件的发送是很常见的需求,使用Python可以轻松地实现邮件发送的功能。本文将介绍如何使用Python的smtplib和email库来发送邮件。

2. 发送普通邮件

2.1 smtplib库

smtplib是Python内置的发送邮件的库,可以通过SMTP协议向指定的邮件服务器发送邮件。在使用smtplib发送邮件之前,需要先获取邮件服务器的地址和登录信息。

2.2 获取邮件服务器信息

获取邮件服务器的信息需要知道SMTP服务器的地址和SMTP端口号,以及是否需要使用TLS加密。常见的邮件提供商如Gmail、Outlook、QQ邮箱等均提供SMTP服务器支持。以下是一些常见邮件提供商的SMTP服务器地址、端口号和TLS选项:

- Gmail: smtp.gmail.com,端口号465或587,需要使用TLS

- Outlook: smtp.office365.com,端口号587,需要使用TLS

- QQ邮箱: smtp.qq.com,端口号465或587,需要使用SSL

2.3 登录邮件服务器

登录邮件服务器需要提供发件人的邮箱地址和邮箱的授权码,授权码是为了保证邮箱的安全性而设置的,可以在邮箱的设置中获取。以下是登录邮件服务器的代码示例:

import smtplib

# 设置登录信息和邮件服务器地址

smtp_server = 'smtp.gmail.com'

port = 587

sender_email = 'your_email@gmail.com'

password = 'your_password'

# 登录邮件服务器

smtp_obj = smtplib.SMTP(smtp_server, port)

smtp_obj.ehlo()

smtp_obj.starttls()

smtp_obj.login(sender_email, password)

2.4 构造邮件内容

使用email库来构造邮件内容,可以包括邮件的主题、发件人、收件人、正文和附件等信息。以下是一个简单的邮件示例:

from email.mime.text import MIMEText

from email.header import Header

# 构造邮件

subject = 'Python邮件测试'

sender = 'your_email@gmail.com'

receivers = ['receiver_email@example.com'] # 收件人邮箱,可以是一个列表

content = '

这是一封Python邮件

'

html = MIMEText(content, 'html', 'utf-8') # 将正文转换为MIME格式

html['From'] = Header(sender, 'utf-8')

html['To'] =Header(','.join(receivers), 'utf-8')

html['Subject'] = Header(subject, 'utf-8')

正文可以是纯文本,也可以是HTML格式。在构造邮件时,需要注意编码格式,避免出现乱码。

2.5 发送邮件

使用smtplib库的sendmail方法来发送邮件,该方法需要三个参数,分别为发件人邮箱、收件人邮箱和邮件内容。以下是发送邮件的代码示例:

# 发送邮件

smtp_obj.sendmail(sender_email, receivers, html.as_string())

smtp_obj.quit()

print('邮件发送成功')

3. 发送带附件的邮件

3.1 构造带附件邮件内容

如果需要发送带附件的邮件,需在邮件内容中添加附件信息。使用MIMEBase来构造附件,将附件内容添加到MIMEBase中,再将MIMEBase添加到MIMEMultipart中。

以下是一个发送带附件的邮件示例:

from email.mime.multipart import MIMEMultipart

from email.mime.base import MIMEBase

from email import encoders

# 构造邮件

subject = 'Python邮件测试'

sender = 'your_email@gmail.com'

receivers = ['receiver_email@example.com'] # 收件人邮箱,可以是一个列表

body = '

这是一封带附件的Python邮件

'

msg = MIMEMultipart('related')

msg['From'] = Header(sender, 'utf-8')

msg['To'] = Header(','.join(receivers), 'utf-8')

msg['Subject'] = Header(subject, 'utf-8')

msg.attach(MIMEText(body, 'html', 'utf-8'))

# 添加附件

filename = 'test.txt'

with open(filename, 'rb') as f:

attachment = MIMEBase('application', 'octet-stream')

attachment.set_payload(f.read())

encoders.encode_base64(attachment)

attachment.add_header('Content-Disposition', 'attachment', filename=('gbk', '', filename))

msg.attach(attachment)

在以上代码中,我们创建了一个MIMEMultipart对象msg,该对象包含了邮件的基本信息。然后,我们使用MIMEBase对象来创建附件,并将附件添加到MIMEMultipart对象中。

3.2 发送带附件的邮件

在发送邮件时,我们需要将MIMEMultipart对象作为参数传递给sendmail方法。

以下是发送带附件的邮件的代码示例:

# 发送邮件

smtp_obj.sendmail(sender_email, receivers, msg.as_string())

smtp_obj.quit()

print('邮件发送成功')

4. 总结

通过使用Python的smtplib和email库,我们可以轻松地实现邮件的发送功能。在使用smtplib库发送邮件时,需要先获取邮件服务器的地址和登录信息,然后使用email库构造邮件内容,最后调用smtplib库的sendmail方法来发送邮件。

参考文献

1. Python官方文档 https://docs.python.org/3/library/email.mime.html

2. Python邮件发送实战 https://www.cnblogs.com/mzc1997/p/11356612.html

后端开发标签