用python群发邮件(显示图片+图片附件)

先获取邮箱授权码

QQ邮箱授权码获取方式
其他的百度搜啦~

函数部分

import smtplib
import os.path
import mimetypes
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
from smtplib import SMTP_SSL
from email import encoders
import time
from tqdm import tqdm
def send_email(receiver):
    host_server = 'smtp.qq.com'#qq邮箱smtp服务器
    sender_qq = '***@qq.com'#sender_qq为发件人的qq号码
    pwd = '***'#pwd为qq邮箱的授权码
    sender_qq_mail = '***@qq.com'#发件人的邮箱

    mail_content = '' #邮件的正文内容
    mail_title = '全国计算生物学与生物信息学会议'#邮件标题

    #邮件正文内容
    msg = MIMEMultipart('related')
    msg["Subject"] = Header(mail_title, 'utf-8')
    msg["From"] = sender_qq_mail


    msgAlternative = MIMEMultipart('alternative')
    msg.attach(msgAlternative)
    
    #邮件正文内容,内含需显示的2个图片
    mail_body = """
    <p><img src="cid:send_image_1"></p>
    <p>尊敬的老师、同仁:</p>

    <p>您好!</p>

    <p>详见: https://blog.csdn.net/weixin_41171061</p>

    <p>组委会联系方式:***@163.com</p>

    <p> (群二维码)</p>        
    <p><img src="cid:send_image_2"></p>

    <p>祝您:身体健康,科研顺利!</p>
    <p></p>
    <p>                                                                           NCCBB2020组委会</p>
    """

    msgText = (MIMEText(mail_body, 'html', 'utf-8'))
    msgAlternative.attach(msgText)
    
    # 构造MIMEBase对象做为文件附件内容并附加到根容器

    ## 读入文件内容并格式化 [方式1]------------------------------
    file_name = '邀请海报.jpg'
    data = open(file_name, 'rb')
    ctype,encoding = mimetypes.guess_type(file_name)
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype,subtype = ctype.split('/',1)
    file_msg = MIMEBase(maintype, subtype)
    file_msg.set_payload(data.read())
    data.close( )
    encoders.encode_base64(file_msg)#把附件编码

    ## 设置附件头
    basename = os.path.basename(file_name)
    file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头
    msg.attach(file_msg)

    file_name = '参会群二维码.JPG'
    data = open(file_name, 'rb')
    ctype,encoding = mimetypes.guess_type(file_name)
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype,subtype = ctype.split('/',1)
    file_msg = MIMEBase(maintype, subtype)
    file_msg.set_payload(data.read())
    data.close( )
    encoders.encode_base64(file_msg)#把附件编码

    ## 设置附件头
    basename = os.path.basename(file_name)
    file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头
    msg.attach(file_msg)
    
    # 指定图片为当前目录
    with open('邀请海报.jpg', 'rb') as f:
        msgImage_1 = MIMEImage(f.read())
        msgImage_1.add_header('Content-ID', '<send_image_1>')# 定义图片 ID,在 HTML 文本中引用
        msg.attach(msgImage_1)

    with open('参会群二维码.JPG', 'rb') as f:
        msgImage_2 = MIMEImage(f.read())
        msgImage_2.add_header('Content-ID', '<send_image_2>')
        msg.attach(msgImage_2)
        
    msg["To"] = receiver

    smtp = SMTP_SSL(host_server)#ssl登录
    smtp.set_debuglevel(1)#set_debuglevel()是用来调试的。参数值为1表示开启调试模式,参数值为0关闭调试模式
    smtp.ehlo(host_server)
    smtp.login(sender_qq, pwd)

    smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
    smtp.quit()
    
    return None

运行部分

receivers = ['***@126.com','***@qq.com','***@edu.cn']
for receiver in tqdm(receivers):
    send_email(receiver) # 收件人不会出现一群,显得是特意发给这个人的~
    time.sleep(10)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章