Python实现邮件发送的方法
Python中有多种方法可以实现邮件发送,包括使用内置模块和第三方库,以下是常用的两种方法。
方法一:使用标准库smtplib
smtplib是Python的一个标准库,可以用来发送邮件。其核心类SMTP(Simple Mail Transfer Protocol)提供了基本的邮件传输功能,具体步骤如下:
1. 登录SMTP服务器:
import smtplib
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('sender_email', 'password')
其中,'smtp.gmail.com'和587是使用Gmail发送邮件的默认SMTP服务器和端口号,可以根据需要修改。starttls()方法用于启用TLS加密传输。sender_email和password分别是发件人的邮箱地址和密码。
2. 编写邮件内容:
from email.mime.text import MIMEText
from email.header import Header
message = MIMEText('邮件正文', 'plain', 'utf-8')
message['From'] = Header('发件人名称', 'utf-8')
message['To'] = Header('收件人名称', 'utf-8')
message['Subject'] = Header('邮件主题', 'utf-8')
其中,MIMEText类用于创建邮件正文对象,以文本方式编码,utf-8为编码方式。Header类用于设置邮件头部信息,即发件人、收件人和主题。
3. 发送邮件:
smtpObj.sendmail(sender_email, receiver_email, message.as_string())
其中,message.as_string()将邮件内容转换为字符串形式,sender_email和receiver_email分别为发件人和收件人的邮箱地址。
4. 关闭SMTP连接:
smtpObj.quit()
完整代码如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('sender_email', 'password')
message = MIMEText('邮件正文', 'plain', 'utf-8')
message['From'] = Header('发件人名称', 'utf-8')
message['To'] = Header('收件人名称', 'utf-8')
message['Subject'] = Header('邮件主题', 'utf-8')
smtpObj.sendmail(sender_email, receiver_email, message.as_string())
smtpObj.quit()
方法二:使用第三方库yagmail
yagmail是一个开源的Python第三方库,可以用来发送邮件。它提供了简单易用的API,具体步骤如下:
1. 安装yagmail库:
pip install yagmail
2. 初始化yagmail客户端:
import yagmail
yag = yagmail.SMTP('sender_email', 'password', 'smtp.gmail.com', 587)
其中,sender_email和password分别是发件人的邮箱地址和密码,smtp.gmail.com和587是使用Gmail发送邮件的默认SMTP服务器和端口号,可以根据需要修改。
3. 编写邮件内容:
contents = ['邮件正文']
yag.send('receiver_email', '邮件主题', contents)
其中,contents是一个包含邮件正文的字符串列表,receiver_email是收件人的邮箱地址。
4. 关闭yagmail客户端:
yag.close()
完整代码如下:
import yagmail
yag = yagmail.SMTP('sender_email', 'password', 'smtp.gmail.com', 587)
contents = ['邮件正文']
yag.send('receiver_email', '邮件主题', contents)
yag.close()
以上两种方法都需要注意安全性问题,例如不应将密码明文存储在代码中,应该使用机密存储库或环境变量来保存密码。并且应该避免发送垃圾邮件,确保发送邮件的目的合法。
