admin管理员组

文章数量:1559090

2021/9/15更新:添加图片附件 添加抄送

注意:msg[‘cc’] = ‘,’.join(cc) 这里表示在邮件的抄送栏写明抄送给谁,但是不代表会被发送。所以必须把cc加入到receiver中一起发送才可以。

# sender: 发件邮箱, string
# receiver: 收件邮箱, string
# cc: 抄送, list
# subject: 主题
# content: 正文内容(html)
# imgs: 图片附件 list
# attaches: 其他附件 list
# my_pass: 发信密码
def send_mail(sender, receiver, cc, subject, content, imgs, attaches, my_pass):
    # ret是返回值, false表示发送失败
    ret = true
    try:
        # 发送html和附件
        msg = mimemultipart('related')
        msg['from'] = formataddr(["", sender])
        msg['to'] = formataddr(["", receiver])
        msg['subject'] = subject
        msg['cc'] = ','.join(cc)
        # 填写正文内容
        msgtxt = mimetext(content, "html", "utf-8")
        msg.attach(msgtxt)
        # 添加img
        for img in imgs:
            att = addimg(img, '')
            att["content-type"] = 'application/octet-stream'
            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
            att["content-disposition"] = 'attachment; filename=%s' % img
            msg.attach(att)
        # 添加其他附件
        for f in attaches:
            att = mimeapplication(open(f, 'rb').read())
            att["content-type"] = 'application/octet-stream'
            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
            att["content-disposition"] = 'attachment; filename=%s' % f
            msg.attach(att)
        # 登录邮件服务器
        server = smtplib.smtp_ssl('smtp.exmail.qq', 465)
        server.login(sender, my_pass)
        server.sendmail(sender, [receiver,]cc, msg.as_string())
        server.quit()
    except exception as e:
        print("send_mail:failed!")
        print(e)
        ret = false
    return ret
    

2020/12/14更新:腾讯企业邮不需要取得发信密码

今天pm要求用公共邮箱发信,所以。。我发现不并不需要开启安全登录 获取发信密码。

代码不用改,my_pass直接用登录密码即可。

示例代码

import smtplib
from email.mime.application import mimeapplication
from email.mime.multipart import mimemultipart
from email.utils import formataddr
def send_mail(sender, receiver, subject, attaches, my_pass):
    ret = true
    try:
        msg = mimemultipart()
        # 邮件显示的发信人名称
        msg['from'] = formataddr(["大数据xxx", sender])
        msg['to'] = formataddr(["生产", receiver])
        # 邮件显示的主题
        msg['subject'] = subject
        server = smtplib.smtp_ssl('smtp.exmail.qq', 465) # 腾讯企业邮
        # 这个是普通qq邮箱的服务器
        #server = smtplib.smtp_ssl("smtp.qq", 465)
        for f in attaches:
            att = mimeapplication(open(f, 'rb').read())
            att["content-type"] = 'application/octet-stream'
            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
            att["content-disposition"] = 'attachment; filename=%s' % f
            msg.attach(att)
        server.login(sender, my_pass)
        server.sendmail(sender, [receiver, ], msg.as_string())
        server.quit()
    except exception:
        ret = false
    return ret
    
sender = 'xxx@xx'
receiver = 'xxxx@qq'
my_pass = '**********'
attaches = [准备发送的文件名列表]
send_mail(sender, receiver, "订单更新结果", attaches, my_pass)

要点在于如何获取这个my_pass,就是使用邮箱发信的密码。这个密码并不是发件人登录邮箱服务器所用的密码(其实不太确切)。

对于普通qq邮箱

设置 - 账户 -

用这个授权码当my_pass。

腾讯企业邮

我是公司业务嘛,肯定不能用个人邮箱对吧。首先开启安全登录,之后可能会被退出账户吧,扫码进来之后,获取客户端专用密码即可。客户端专用密码就是my_pass。

本文标签: 腾讯发送邮件邮箱