python郵件發送給多人時,只有第一個人能收到的問題


我也是被坑了好久才發現。

解決方法:

經過多次測試發現MIMEText()["to"]的數據類型與sendmail(from_addrs,to_addrs,...)的to_addrs不同;

前者為str類型,多個地址使用逗號分隔,后者為list類型。

原本有問題的代碼:

def send_mail_attach(receivers, mail_subject, mail_body, pattern="html"):
    import smtplib
    from email.mime.text import MIMEText
    # 設置服務器所需信息
    # 163郵箱服務器地址
    mail_host = 'hwhzsmtp.qiye.163.com'
    # 163用戶名
    mail_user = 'wang123@xxx.one'
    # 密碼(部分郵箱為授權碼)
    mail_pass = '1234567'
    # 郵件發送方郵箱地址
    sender = 'wang123@xxx.one'
    # 郵件接受方郵箱地址,注意需要[]包裹,這意味着你可以寫多個郵件地址群發

    # 設置email信息
    # 郵件內容設置
    message = MIMEText(mail_body, pattern, 'utf-8')
    # 郵件主題
    message['Subject'] = mail_subject
    # 發送方信息
    message['From'] = '%s <%s>' % (Header('hours report').encode(), sender)
    # 接受方信息
    if not isinstance(receivers,list): receivers=[receivers] message['To'] = ','.join(receivers) # 登錄並發送郵件
    try:

        # smtpObj = smtplib.SMTP(mail_host,25)
        smtpObj = smtplib.SMTP_SSL(mail_host, 994)
        # 連接到服務器
        # smtpObj.starttls()
        # smtpObj.ehlo()

        # 登錄到服務器
        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)  # 打印錯誤

經過修改之后的代碼如下:

def send_email(mail_subject, mail_body, receivers='wqbin@xxx.one', pattern='plain'):
    # 設置服務器所需信息
    # 163郵箱服務器地址

    mail_host = 'hwhzsmtp.qiye.163.com'
    # 163用戶名
    mail_user = 'wang123@xxx.one'
    # 密碼(部分郵箱為授權碼)
    mail_pass = '123456'
    # 郵件發送方郵箱地址
    sender = 'wang123@xxx.one'
    # 郵件接受方郵箱地址,注意需要[]包裹,這意味着你可以寫多個郵件地址群發

    # 設置email信息
    # 郵件內容設置
    message = MIMEText(mail_body, pattern, 'utf-8')
    # 郵件主題
    message['Subject'] = mail_subject
    # 發送方信息
    message['From'] = '%s' %  sender
    # 接受方信息
    # 此處只能填寫''',+str'''
    message['To'] = ','.join(receivers) if isinstance(receivers,list) else receivers # 登錄並發送郵件
    try:

        # smtpObj = smtplib.SMTP(mail_host,25)
        smtpObj = smtplib.SMTP_SSL(mail_host, 994)
        # 連接到服務器
        # smtpObj.starttls()
        # smtpObj.ehlo()

        # 登錄到服務器
        smtpObj.login(mail_user, mail_pass)
        # 發送
        # 此處填寫 list格式
        if not isinstance(receivers,list): receivers=receivers.split(",") smtpObj.sendmail( sender, receivers, message.as_string()) # 退出
        smtpObj.quit()
        print('success')
    except smtplib.SMTPException as e:
        print('error', e)  # 打印錯誤
    except Exception as e:
        print('其他錯誤',e)

完結!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM