基于python发送邮件详细介绍

借助python发送邮件的详细介绍

前言

在信息飞速发展的今天,生活中我们经常会用到邮件来给朋友发祝福、发面试通知、给同事发工作一些内容等等。下面我们就来给大家讲解如何借助python发送邮件。

一、基本流程

使用脚本发送邮件的思路其实和客户端发送邮件一样,过程都是:

登录 —> 写邮件 —> 发送

二、python—Email模块

与发送邮件相关的 Python 模块:

smtplib

是关于 SMTP(简单邮件传输协议)的操作模块,在发送邮件的过程中起到服务器之间互相通信的作用。

email

简单来说,即服务器之间通信的信息,包括信息头、信息主体等等。

举个简单的例子,当你登录邮箱,写好邮件后点击发送,这部分是由 SMTP 接管;而写邮件、添加附件是由 email 模块控制。

三、开通电子邮箱的SMTP功能

在使用脚本发邮件之前,我们需要打开自己邮箱的 SMTP 功能,各家邮箱的设置方法就不一一讲述了,具体使用时可以百度一下,下面以 QQ 邮箱设置为例做一个简单的演示:

登录QQ邮箱 —> 设置—>账户—>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务—>开启POP3/SMTP服务

在这里插入图片描述
QQ邮箱官方介绍
在这里插入图片描述

四、代码实现

实践出真理,我们通过代码来实现具体过程:登录自己QQ 邮箱,向其他 qq 邮箱发送邮件。

脚本分为三个步骤:

  1. 设置好服务器端信息
  2. 邮件主体信息
  3. 登录发送

另外在处理文本时,我们需要使用 MIMEText 类

import smtplib
from email.mime.text import MIMEText

# 设置服务器所需信息
# qq邮箱服务器地址
mail_host = 'smtp.qq.com'
# qq用户名
mail_user = '11*****00'
# 密码(部分邮箱为授权码)
mail_pass = 'a******x'
# 邮件发送方邮箱地址
sender = '发送方QQ账号@qq.com'
# 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = ['接收方qq账号[email protected]', '接收方qq账号[email protected]', '接收方qq账号[email protected]']

# 设置email信息
# 邮件内容设置
message = MIMEText('content', 'plain', 'utf-8')
# 邮件主题
message['Subject'] = 'title'
# 发送方信息
message['From'] = sender
# 接受方信息
message['To'] = receivers[0]

# 登录并发送邮件
try:
    ## 启动
    #smtpObj = smtplib.SMTP()
    ## 连接到服务器
    #smtpObj.connect(mail_host, 25)
    # 注意事项:
		#这里有一些邮箱登录比如 QQ 邮箱需要 SSL 认证,所以 SMTP 已经不能满足要求,而需要SMTP_SSL,解决办法为:
    # 把smtpObj = smtplib.SMTP()和smtpObj.connect(mail_host, 25)替换为下面代码
    smtpObj = smtplib.SMTP_SSL(mail_host)

    # 登录到服务器
    smtpObj.login(mail_user, mail_pass)
    # 发送
    smtpObj.sendmail(
        sender, receivers, message.as_string())
    # 退出
    smtpObj.quit()
    print('success')
except smtplib.SMTPException as e:
    print('error', e)  # 打印错误

五、带有附件的email

上面这种发送字符串的邮件满足不了我们日常邮件的需求,下面我们介绍如何发送内容以 HTML 格式,并且带有图片和文本文件的邮件。

处理多种形态的邮件主体我们需要用到 MIMEMultipart 类,处理图片需要 MIMEImage 类。

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

# 设置登录及服务器信息
mail_host = 'smtp.qq.com'
mail_user = '11*****00'
mail_pass = 'a******x'
sender = '发送方QQ账号@qq.com'
receivers = ['接收方qq账号[email protected]', '接收方qq账号[email protected]', '接收方qq账号[email protected]']

# 设置eamil信息
# 添加一个MIMEmultipart类,处理正文及附件
message = MIMEMultipart()
message['From'] = sender
message['To'] = receivers[0]
message['Subject'] = '清华录取通知书'
# 推荐使用html格式的正文内容,这样比较灵活,可以附加图片地址,调整格式等
with open('email.html', 'r') as f:
    content = f.read()
# 设置html格式参数
part1 = MIMEText(content, 'html', 'utf-8')
# 添加一个txt文本附件
with open('offer.txt', 'r', encoding='utf8')as h:
    content2 = h.read()
# 设置txt参数
part2 = MIMEText(content2, 'plain', 'utf-8')
# 附件设置内容类型,方便起见,设置为二进制流
part2['Content-Type'] = 'application/octet-stream'
# 设置附件头,添加文件名
part2['Content-Disposition'] = 'attachment;filename="offer.txt"'
# 添加照片附件
with open('offer.jpg', 'rb')as fp:
    picture = MIMEImage(fp.read())
    # 与txt文件设置相似
    picture['Content-Type'] = 'application/octet-stream'
    picture['Content-Disposition'] = 'attachment;filename="1.png"'
# 将内容附加到邮件主体中
message.attach(part1)
message.attach(part2)
message.attach(picture)

# 登录并发送
try:
    # smtpObj = smtplib.SMTP()
    # smtpObj.connect(mail_host, 25)
    smtpObj = smtplib.SMTP_SSL(mail_host)
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(
        sender, receivers, message.as_string())
    print('success')
    smtpObj.quit()
except smtplib.SMTPException as e:
    print('error', e)

作者:吴常文
出处:https://blog.csdn.net/qq_41405475
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

猜你喜欢

转载自blog.csdn.net/qq_41405475/article/details/115150887