我寫了一個代碼來用 Python 發送一封確認電子郵件,它可以作業,但是當我把它放在函式中時,發送代碼就有問題了。請幫我。代碼 :
import smtplib
import random
verify_code=str(random.randint(1111,9999))
sent_from = 'code@r*****'
password='*******'
to = ['re******@gmail.com']
subject = 'verify code'
body = ('your code is :' str(code))
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
smtp_server = smtplib.SMTP_SSL('mx2.ta*******.com', 465)
smtp_server.ehlo()
smtp_server.login(sent_from, password)
smtp_server.sendmail(sent_from, to, email_text)
smtp_server.close()
print ("Email sent successfully!")
當我輸入函式時:
def mail(code):
import smtplib
import random
code=str(random.randint(1111,9999))
sent_from = 'code@r****'
password='*******'
to = ['re*******@gmail.com']
subject = 'verify code'
body = ('your code is :' str(code))
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
smtp_server = smtplib.SMTP_SSL('mx2.tal*****.com', 465)
smtp_server.ehlo()
smtp_server.login(sent_from, password)
smtp_server.sendmail(sent_from, to, email_text)
smtp_server.close()
print ("Email sent successfully!")
執行函式時出錯:
此訊息是由郵件傳遞軟體自動創建的。
您發送的郵件無法傳遞給一個或多個收件人。這是一個永久性錯誤。以下地址失敗:
reza*****@gmail.com 主機 gmail-smtp-in.l.google.com [108.177.126.27] 資料結束后來自遠程郵件服務器的 SMTP 錯誤:550-5.7.1 [185.51。. ] 我們的系統檢測到此郵件不符合 RFC 550-5.7.1 5322:缺少 550-5.7.1 'From' 標頭。550-5.7.1 為減少發送到 Gmail 的垃圾郵件數量,此郵件已被 550-5.7.1 阻止。請訪問 550-5.7.1 https://support.google.com/mail/?p=RfcMessageNonCompliant 550 5.7.1 并查看 RFC 5322 規范以獲取更多資訊。
uj5u.com熱心網友回復:
嘗試 1 : ratelimit number of emails sent
您可能一次發送了太多電子郵件。嘗試在每封電子郵件之間等待幾秒鐘。由于您使用的是 Gmail 帳戶來發送電子郵件,因此您可能需要查看Google 施加的電子郵件配額。
此外,如果您在回圈中呼叫您的函式,您將向同一個收件人發送多封電子郵件。您的函式的引數應該是收件人的電子郵件,而不是code.
import smtplib
import random
import time
def mail(recipient):
code = str(random.randint(1111, 9999))
sent_from = 'code@r****'
password = '*******'
to = [recipient]
subject = 'verify code'
body = ('your code is :' str(code))
email_text = """From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
smtp_server = smtplib.SMTP_SSL('mx2.tal*****.com', 465)
smtp_server.ehlo()
smtp_server.login(sent_from, password)
smtp_server.sendmail(sent_from, to, email_text)
smtp_server.close()
print("Email sent successfully!")
recipient_list = ['[email protected]', '[email protected]']
for recipient in recipient_list:
mail(recipient)
time.sleep(1) # wait 1s before sending next email
嘗試2:直接使用CRLF字符email_text
RFC 5322 要求的 From 欄位格式為:
“發件人:”郵箱串列 CRLF
在 Python 中,CRLF 字符\r\n可以直接使用,email_text如下所示:
email_text = (
"""From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s"""
% (sent_from, ", ".join(to), subject, body))
這樣可以確保在正確的位置插入正確的換行符。(我們不必依賴 Enter 鍵插入的換行符)
具有功能的完整代碼:
import smtplib
import random
def mail():
code = str(random.randint(1111, 9999))
sent_from = 'code@r****'
password = '*******'
to = ['re*******@gmail.com']
subject = 'verify code'
body = ('your code is :' str(code))
email_text = (
"""From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s"""
% (sent_from, ", ".join(to), subject, body))
print(email_text)
smtp_server = smtplib.SMTP_SSL('mx2.tal*****.com', 465)
smtp_server.ehlo()
smtp_server.login(sent_from, password)
smtp_server.sendmail(sent_from, to, email_text)
smtp_server.close()
print("Email sent successfully!")
mail()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513307.html
