python SMTP实现QQ邮箱发送附件带HTML的邮件(规范发件人和收件人地址)

注意from_addr自己是作为发信方,发到to_addrs

第一步,找到QQ邮箱的授权码

第二步,代码

 以下修改from_addr、to_addrs(可以单个可以多个)、authorization_code,HTML放在py文件同一路径即可

# -*- coding: utf-8 -*-
# @Time : 2020/11/25  11:03
# @Author : Liqiju
# @File : Ptest.py
# @Software : PyCharm
# !/usr/bin/python
# -*- coding: UTF-8 -*-

#coding=utf-8

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


from_addr='11102228@qq.com'   #邮件发送账号
to_addrs=['XX@yelinked.com','XX@qq.com']   #接收邮件账号,多个账号用列表
#to_addrs = 'dengj@yelinked.com'
authorization_code='vdxrxdvrmfqqbdhb'   #授权码(这个要填自己获取到的)
smtp_server='smtp.qq.com' #固定的SMTP服务器
smtp_port=465 #固定端口


#配置服务器
stmp=smtplib.SMTP_SSL(smtp_server,smtp_port)
stmp.login(from_addr,authorization_code)

#组装发送内容
#message = MIMEText('我是胖胖,准备下班吃饭了', 'plain', 'utf-8')   #发送的内容

# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("喜哥", 'utf-8')   #发件人
message['To'] = Header(header_name="李自动化测试", charset='utf-8')   #收件人
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')  #邮件标题
message.attach(MIMEText('今晚会议室培训,别跑路了', 'plain', 'utf-8'))# 邮件正文内容

#增加HTML附件
atthtml = MIMEText(open('report.html','rb').read(),'base64','utf-8')#文件放在同一路径,不放在同一路径改一下比如'D:/test/report.html
atthtml["Content-Type"] = 'application/octet-stream'
atthtml["Content-Disposition"] = 'attachment;filename = "report.html"'
message.attach(atthtml)

try:
    stmp.sendmail(from_addr, to_addrs, message.as_string())
except Exception as e:
    print ('邮件发送失败--' + str(e))
print ('邮件发送成功')



看看运行结果:

 

  

有关于其他的内容可以去菜鸟教程学习一下,写得真滴不错。Python3 SMTP发送邮件

也可以加入QQ群965230944一起学习进步。

2020年11月25日

-------------------------------------------------------------------------------------------------------------------------------------------------

其实看看上面的图还是有很多的破绽,比如没有收件人,发件人也不是姓名+邮件地址,看起来不专业。下面的代码提供规范的收件人地址。

直接上代码:

# -*- coding: utf-8 -*-
# @Time : 2020/11/25  11:03
# @Author : Liqiju
# @File : Ptest.py
# @Software : PyCharm
# !/usr/bin/python
# -*- coding: UTF-8 -*-

#coding=utf-8

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr

from_addr='111102228@qq.com'   #邮件发送账号
to_addrs="abcd@yelinked.com,2970787888@qq.com"    #接收邮件账号,字符串,多个账号用逗号分隔
authorization_code='vdxrxdvrmfqqbdhb'   #授权码(这个要填自己获取到的)
smtp_server='smtp.qq.com' #固定的SMTP服务器
smtp_port=465 #固定端口

#配置服务器
stmp=smtplib.SMTP_SSL(smtp_server,smtp_port)
stmp.login(from_addr,authorization_code)

# 创建一个带附件的实例
subject = 'Python自动化测试报告'
message = MIMEMultipart()
message['From'] = formataddr(["李自动化测试",from_addr]) #发件人
message['To'] = to_addrs #收件人
message['Subject'] = Header(subject, 'utf-8')  #邮件标题
message.attach(MIMEText('附件report.html为测试报告,请查阅', 'plain', 'utf-8'))# 邮件正文内容

#增加HTML附件
atthtml = MIMEText(open('report.html','rb').read(),'base64','utf-8')#文件放在同一路径,不放在同一路径改一下比如'D:\\test\\report.html
atthtml["Content-Type"] = 'application/octet-stream'
atthtml["Content-Disposition"] = 'attachment;filename = "report.html"'
message.attach(atthtml)

try:
    stmp.sendmail(from_addr, to_addrs.split(','), message.as_string())  # 发送邮件,split分割后产生列表
except Exception as e:
    print ('邮件发送失败--' + str(e))
print ('邮件发送成功')



先看看企业邮箱和QQ邮箱效果。

 QQ邮箱

 

如果收件人和发件人是好友关系 ,应该是直接会显示你QQ备注的名称,看上面的QQ邮箱截图。没有的话才取的是message的From的内容

注意我们在发送的时候  to_addrs.split(',') 用逗号分隔,返回列表,下面是源码注释

    def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
                 rcpt_options=[]):
        """This command performs an entire mail transaction.

        The arguments are:
            - from_addr    : The address sending this mail.
            - to_addrs     : A list of addresses to send this mail to.  A bare
                             string will be treated as a list with 1 address.
            - msg          : The message to send.
            - mail_options : List of ESMTP options (such as 8bitmime) for the
                             mail command.
            - rcpt_options : List of ESMTP options (such as DSN commands) for
                             all the rcpt commands.

        msg may be a string containing characters in the ASCII range, or a byte
        string.  A string is encoded to bytes using the ascii codec, and lone
        \\r and \\n characters are converted to \\r\\n characters.

感谢阅读。

2020年11月26日

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试李同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值