详解Python发送email的三种方式

  • Post category:Python

下面我将为您详细讲解Python发送email的三种方式,并提供相应的示例说明。

一、SMTP库发送email

1. 导入SMTP库

使用SMTP库发送email需要先导入该库:

import smtplib

2. 登录SMTP服务器

在发送email之前,我们需要先登录SMTP服务器:

smtp_server = 'smtp.qq.com'        # QQ邮箱SMTP服务器
smtp_port = 587                    # SMTP协议默认端口
smtp_user = '你的QQ邮箱地址'       # 发件人邮箱地址
smtp_password = '你的QQ邮箱授权码'  # 发件人邮箱授权码

smtp_connection = smtplib.SMTP(smtp_server, smtp_port)
smtp_connection.starttls()
smtp_connection.login(smtp_user, smtp_password)

在登录SMTP服务器时,我们需要输入发件人的SMTP服务器地址、SMTP协议默认端口号以及发件人的邮箱地址和授权码。登录成功后,我们可以进入下一步操作。

3. 构造email消息

构造email消息包括设置邮件标题、发件人、收件人和正文内容。例如:

from email.mime.text import MIMEText
from email.utils import formataddr

sender_name = '发件人姓名'
sender_email = '你的QQ邮箱地址'

msg = MIMEText('邮件正文内容', 'plain', 'utf-8')
msg['From'] = formataddr([sender_name, sender_email])
msg['To'] = '收件人邮箱地址'
msg['Subject'] = '邮件标题'

4. 发送email

构建email消息之后,我们可以使用几个简单的方法将email消息发送到收件人邮箱:

smtp_connection.sendmail(sender_email, [msg['To']], msg.as_string())
smtp_connection.quit()

在发送email之后,我们需要关闭SMTP连接。

5. 完整示例

下面是一个完整的使用SMTP库发送email的示例:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

# 1. 登录SMTP服务器
smtp_server = 'smtp.qq.com'
smtp_port = 587
smtp_user = '你的QQ邮箱地址'
smtp_password = '你的QQ邮箱授权码'

smtp_connection = smtplib.SMTP(smtp_server, smtp_port)
smtp_connection.starttls()
smtp_connection.login(smtp_user, smtp_password)

# 2. 构造email消息
sender_name = '发件人姓名'
sender_email = '你的QQ邮箱地址'
msg = MIMEText('邮件正文内容', 'plain', 'utf-8')
msg['From'] = formataddr([sender_name, sender_email])
msg['To'] = '收件人邮箱地址'
msg['Subject'] = '邮件标题'

# 3. 发送email
smtp_connection.sendmail(sender_email, [msg['To']], msg.as_string())
smtp_connection.quit()

二、Yagmail发送email

1. 安装Yagmail

使用Yagmail发送email需要先安装Yagmail包:

!pip install yagmail

2. 构造email消息

构造email消息与使用SMTP库发送email类似:

import yagmail

sender_email = '你的QQ邮箱地址'
recipient_email = '收件人邮箱地址'
email_subject = '邮件标题'
email_content = '邮件正文内容'

yag = yagmail.SMTP(sender_email)
msg = {'to': recipient_email,
       'subject': email_subject,
       'contents': email_content}

3. 发送email

构建email消息之后,我们可以使用yagmail发送email:

yag.send(msg)

4. 完整示例

下面是一个完整使用Yagmail发送email的示例:

import yagmail

# 1. 构造email消息
sender_email = '你的QQ邮箱地址'
recipient_email = '收件人邮箱地址'
email_subject = '邮件标题'
email_content = '邮件正文内容'

yag = yagmail.SMTP(sender_email)
msg = {'to': recipient_email,
       'subject': email_subject,
       'contents': email_content}

# 2. 发送email
yag.send(msg)

三、Python标准库中的smtplib发送email

标准库中的smtplib也可以用于发送email。

1. 构造email消息

构造email消息与使用SMTP库和Yagmail库发送email相同:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

sender_email = '你的QQ邮箱地址'
recipient_email = '收件人邮箱地址'
email_subject = '邮件标题'
email_content = '邮件正文内容'

msg = MIMEText(email_content, 'plain', 'utf-8')
msg['From'] = formataddr(['发件人姓名', sender_email])  # 发件人姓名可以不用填写
msg['To'] = recipient_email
msg['Subject'] = email_subject

2. 发送email

在构建email消息之后,我们可以使用smtplib库发送email:

smtp_server = 'smtp.qq.com'
smtp_port = 587
smtp_user = '你的QQ邮箱地址'
smtp_password = '你的QQ邮箱授权码'

smtp_connection = smtplib.SMTP(smtp_server, smtp_port)
smtp_connection.starttls()
smtp_connection.login(smtp_user, smtp_password)
smtp_connection.sendmail(sender_email, [recipient_email], msg.as_string())
smtp_connection.quit()

3. 完整示例

下面是一个完整使用smtplib发送email的示例:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

# 1. 构造email消息
sender_email = '你的QQ邮箱地址'
recipient_email = '收件人邮箱地址'
email_subject = '邮件标题'
email_content = '邮件正文内容'

msg = MIMEText(email_content, 'plain', 'utf-8')
msg['From'] = formataddr(['发件人姓名', sender_email])
msg['To'] = recipient_email
msg['Subject'] = email_subject

# 2. 发送email
smtp_server = 'smtp.qq.com'
smtp_port = 587
smtp_user = '你的QQ邮箱地址'
smtp_password = '你的QQ邮箱授权码'

smtp_connection = smtplib.SMTP(smtp_server, smtp_port)
smtp_connection.starttls()
smtp_connection.login(smtp_user, smtp_password)
smtp_connection.sendmail(sender_email, [recipient_email], msg.as_string())
smtp_connection.quit()

以上就是三种Python发送email的方式,希望能对你有所帮助。