我也是被坑了好久才發現。
解決方法:
經過多次測試發現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)
完結!!