常见邮箱开启 SMTP 服务及 Python 发送 email 详细说明

原文由wangle发表于TesterHome社区,点击原文链接可与作者直接交流。

一.开启邮箱 SMTP 服务

发送邮件需要使用 SMTP 服务器,常用的免费服务器有:163、126、qq 等邮箱。

QQ 邮箱配置方式如下:

1) 登录 qq 邮箱,选择【设置】-【账户】

2) 在 POP3/IMAP/SMAP/Exchage/CardDAV/CalDAV 服务中,找到 POP3/SMTP 服务和 IMAP/SMTP 服务,点击开启。

163 邮箱配置方式如下:

1) 注册 163 邮箱,登录后设置。

2)在新页面点击 “客户端授权密码”,勾选 “开启”,弹出新窗口填写手机验证码。

3) 填写授权码

4) 提示开启成功。

二、使用 python 发送邮件

使用 python 自带的模块:smptlib、email

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

1、发送普通的邮件

# 发送邮件的步骤
import smtplib
from email.mime.text import MIMEText     # 用来构造文本类型的邮件
from email.header import Header          # 用来构造邮件的头部
# 第一步:创建一个SMTP的对象
s = smtplib.SMTP()
# 第二步:连接到SMTP的服务器
host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25
port = 25
#  host = 'smtp.qq.com'  port = 465  # 设置qq邮箱服务器,端口为:465
s.connect(host,port)       # 连接服务器
# s.connect(host = 'smtp.163.com',port = 25)
# 第三步:登录SMTP服务器
mail_user = '18814726725@163.com'           # 163邮箱的用户名
mail_pass = 'password'                      # 注意:此处填写的是邮箱的SMTP服务器授权码
s.login(user=mail_user,password=mail_pass)
# 第四步:构建邮件内容
content = '使用python测试发送邮件'             # 构建邮件内容
msg = MIMEText(content,_charset='utf8')     # _charset 指定编码格式
msg['Subject'] = Header('测试报告','utf8')   # 邮件主题
msg['From'] = 'wl18814726725@163.com'       # 发件人邮箱,可传入列表,用于给多个人发送文件
msg['To'] = '1572533878@qq.com'             # 收件人

# 第五步:发送邮件
s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())     #将邮件内容转换为字符串

2、发送 HTML 格式邮件及附件

import smtplib
from email.mime.text import MIMEText     # 文本类型的邮件,用来构造邮件
from email.header import Header          # 用来构造邮件的头部
from email.mime.application import MIMEApplication   
from email.mime.multipart import MIMEMultipart  # 用来构造附件

# 发送邮件的步骤
# 第一步:创建一个SMTP的对象
s = smtplib.SMTP()
# 第二步:连接到SMTP的服务器
host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25
port = 25
#  host = 'smtp.qq.com'    # 设置qq邮箱服务器,端口为:465
s.connect(host,port)   # 连接服务器
# 第三步:登录SMTP服务器
mail_user = 'wl18814726725@163.com'     # 163邮箱的用户名
mail_pass = 'wl987654321'               # 注意:此处填写的是邮箱的SMTP服务器授权码
s.login(user=mail_user,password=mail_pass)

# 构造文本邮件内容
content = '使用python测试发送邮件'             # 构建邮件内容
textcontent = MIMEText(content,_charset='utf8')        # _charset 指定编码格式
# 构造附件(二进制字节流形式)
part = MIMEApplication(open("report.html",'rb').read(),_subtype=None) 
# part = MIMEApplication(open("report.html",'rb').read()) 需要查看_subtype=None 是否会引发异常
part.add_header('content-disposition', 'attachment', filename='report18.html')  # 对方收到邮件之后,附件在邮件中显示的名称
# 封装一封邮件
msg = MIMEMultipart()
# 加入文本内容
msg.attach(textcontent)
msg.attach(part)
# 发送邮件
msg['From'] = 'wl18814726725@163.com'       #发件人邮箱
msg['To'] = '1572533878@qq.com'             #收件人

#第五步:发送邮件
s.sendmail(from_addr='wl18814726725@163.com',to_addrs='1572533878@qq.com',msg=msg.as_string())      # 将邮件内容转换为字符串

3、定义 send_email 函数

import smtplib
from email.mime.text import MIMEText     #文本类型的邮件,用来构造邮件
from email.header import Header          #用来构造邮件的头部
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart  #用来构造附件

def send_email(filepath):
    """
    :param filepath:   #传入报告文件的路径
    :return:
    """
    # 发送邮件的步骤
    # 第一步:创建一个SMTP的对象
    s = smtplib.SMTP()
    # 第二步:连接到SMTP的服务器
    host = 'smtp.163.com'    #设置163邮箱服务器,端口为:25
    port = 25
    #  host = 'smtp.qq.com'    #设置qq邮箱服务器,端口为:465
    s.connect(host,port)   #连接服务器
    # 第三步:登录SMTP服务器
    mail_user = 'wl18814726725@163.com'     #163邮箱的用户名
    mail_pass = 'wl987654321'               #注意:此处填写的是邮箱的SMTP服务器授权码
    s.login(user=mail_user,password=mail_pass)

    #构造文本邮件内容
    content = '使用python测试发送邮件'             #构建邮件内容
    textcontent = MIMEText(content,_charset='utf8')        #_charset 指定编码格式
    #构造附件(二进制字节流形式)
    part = MIMEApplication(open(filepath,'rb').read())
    part.add_header('content-disposition', 'attachment', filename='report988.html')  #对方收到邮件之后,附件在邮件中显示的名称
    # 封装一封邮件
    msg = MIMEMultipart()
    #加入附件和文本内容
    msg.attach(textcontent)
    msg.attach(part)
    #发送邮件
    msg['From'] = 'wl18814726725@163.com'       #发件人邮箱
    msg['To'] = '1572533878@qq.com'             #收件人

    #第五步:发送邮件
    s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())      #将邮件内容转换为字符串

send_email('report.html')

4、使用 python 发送邮件时常见错误:

错误 1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 。

我们使用 python 发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用 SMTP 服务发送邮件,新注册的 163 邮箱是默认不开启客户端授权的(对指定的邮箱大师客户端默认开启),因此登录总是被拒绝,解决办法(以 163 邮箱为例):进入 163 邮箱 - 设置 - 客户端授权密码 - 开启(授权码是用于登录第三方邮件客户端的专用密码)。上述有专门的设置方法。

错误 2:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') 。

以 163 邮箱为例,在开启 POP3/SMTP 服务,并开启客户端授权密码时会设置授权码,将这个授权码代替 smtplib.SMTP().login(user,password) 方法中的 password 即可。

错误 3:给多人发送邮件是,可能会出现 “AttributeError: 'list' object has no attribute 'encode'” 或者写了多个人,实际只给第一个人发了邮件等错误。

# 将所有的收件人邮箱写入到一个字符串中
msg['To'] = '1668010021@qq.com, 1572533878@qq.com, wangle@kyee.com.cn, 2685083419@qq.com'
# 发送邮件时,通过字符串函数split分割,分割后返回的每一个邮箱账号
s.sendmail(from_addr=msg['From'], to_addrs=msg['To'].split(','), msg=msg.as_string())
原文由wangle发表于TesterHome社区,点击 原文链接可与作者直接交流。


今日份的知识已摄入~
想了解更多前沿测试开发技术:欢迎关注「第十届MTSC大会·上海」>>>
1个主会场+12大专场,大咖云集精英齐聚

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.导入所需模块和库: ``` import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication ``` 2.设置发送邮件的基本信息: ``` smtp_server = 'smtp.qq.com' # SMTP服务器地址 smtp_port = 465 # SMTP服务器端口 smtp_user = 'your_email@qq.com' # 发送邮件的邮箱 smtp_password = 'your_email_password' # 发送邮件的邮箱密码 from_addr = 'your_email@qq.com' # 发件人邮件地址 to_addr = 'receiver_email@qq.com' # 收件人邮件地址 ``` 3.创建邮件: ``` msg = MIMEMultipart() # 创建邮件实例 msg['From'] = from_addr # 设置发件人 msg['To'] = to_addr # 设置收件人 msg['Subject'] = '邮件主题' # 设置邮件主题 ``` 4.添加邮件正文: ``` content = '邮件正文' text = MIMEText(content) msg.attach(text) # 添加正文到邮件实例中 ``` 5.添加附件: ``` with open('file_path', 'rb') as f: attachment = MIMEApplication(f.read()) attachment.add_header('Content-Disposition', 'attachment', filename='file_name') msg.attach(attachment) # 添加附件到邮件实例中 ``` 6.发送邮件: ``` with smtplib.SMTP_SSL(smtp_server, smtp_port) as server: server.login(smtp_user, smtp_password) # 登录SMTP服务器 server.sendmail(from_addr, to_addr, msg.as_string()) # 发送邮件 ``` 完整代码示例: ``` import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication smtp_server = 'smtp.qq.com' # SMTP服务器地址 smtp_port = 465 # SMTP服务器端口 smtp_user = 'your_email@qq.com' # 发送邮件的邮箱 smtp_password = 'your_email_password' # 发送邮件的邮箱密码 from_addr = 'your_email@qq.com' # 发件人邮件地址 to_addr = 'receiver_email@qq.com' # 收件人邮件地址 msg = MIMEMultipart() # 创建邮件实例 msg['From'] = from_addr # 设置发件人 msg['To'] = to_addr # 设置收件人 msg['Subject'] = '邮件主题' # 设置邮件主题 content = '邮件正文' text = MIMEText(content) msg.attach(text) # 添加正文到邮件实例中 with open('file_path', 'rb') as f: attachment = MIMEApplication(f.read()) attachment.add_header('Content-Disposition', 'attachment', filename='file_name') msg.attach(attachment) # 添加附件到邮件实例中 with smtplib.SMTP_SSL(smtp_server, smtp_port) as server: server.login(smtp_user, smtp_password) # 登录SMTP服务器 server.sendmail(from_addr, to_addr, msg.as_string()) # 发送邮件 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值