說明:本例使用163郵箱測試
使用SMTP發送郵件遇到如下報錯:ui
554, b'DT:SPM 163 smtp10,DsCowACXeOtmjRRdsY8aCw--.21947S2 1561628007,please see http://mail.163.com/help/help_spam_16.htm?ip=36.110.94.251&hostid=smtp10&time=1561628007'spa
1.檢查163郵箱是否設置受權碼,受權碼對不對。不對會報錯:535, b'Error: authentication failed'code
2.檢查代碼郵件格式規範server
下面貼出菜鳥教程部分代碼使用header。看已發送郵件的確是顯示了發件人別名(顯示代發),收件人看到的發件人也是本身起的別名。以下圖:htm
# -*- coding: utf-8 -*- # Nola import smtplib from email.mime.text import MIMEText from email.header import Header import time mail_server = "smtp.163.com" mail_port = 25 sender = "xxxxx@163.com" sender_password = "xxxxxx" # 受權碼 receivers = "wewewwe@163.com" message = MIMEText('Python郵件發送測試...', 'plain', 'utf-8') # message['From'] = sender # message['To'] = receivers message['From'] = Header("菜鳥教程", 'utf-8') message['To'] = Header("測試", 'utf-8') send_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) subject = '郵件測試' + send_time message['Subject'] = subject try: smtp_obj = smtplib.SMTP() smtp_obj.connect(mail_server, mail_port) smtp_obj.login(sender, sender_password) smtp_obj.sendmail(sender, [receivers], message.as_string()) print('success!') except smtplib.SMTPException as e: print('failure!') print(e)
重點是:收到幾封郵件後,收不到了,換收件人也收不到,猜想是163禁發了。點上圖中幫助能夠看到下圖,因此善意的假裝也會產生誤會。blog
From和To使用發件人和收件人真實郵箱地址,發送便可成功。教程
# -*- coding: utf-8 -*- # Nola import smtplib from email.mime.text import MIMEText import time mail_server = "smtp.163.com" mail_port = 25 sender = "xxxxx@163.com" sender_password = "xxxxxx" # 受權碼 receivers = "wewewwe@163.com" message = MIMEText('Python郵件發送測試...', 'plain', 'utf-8') message['From'] = sender message['To'] = receivers send_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) subject = '郵件測試' + send_time message['Subject'] = subject try: smtp_obj = smtplib.SMTP() smtp_obj.connect(mail_server, mail_port) smtp_obj.login(sender, sender_password) smtp_obj.sendmail(sender, [receivers], message.as_string()) print('success!') except smtplib.SMTPException as e: print('failure!') print(e)