2017-04-24 64 views
0

我寫了下面的代碼發送一個簡單地發送「test」到指定電子郵件地址的電子郵件。用Python中的smtplib多次發送電子郵件

import smtplib 
     sentFrom = "my email" 
     to = input("Enter email: ") 
     #numberEmails = raw_input ("Enter number of emails to send") 
     messageText = "test" 

     msg = "From: %s\n To: %s\n\n%s" % (sentFrom, to, messageText) 

     username = str("my email") 
     password = str("my password") 

     try : 
      server = smtplib.SMTP("smtp.gmail.com", 587) 
      server.ehlo() 
      server.starttls() 
      server.login(username,password) 
      server.sendmail(sentFrom, to, msg) 
      server.quit()  
      print (" Email has sent") 
     except : 
     print("email NOT sent") 

當我試圖發送更多的電子郵件比1,例如:

5*server.sendmail(sentFrom, to, msg) 

只有一個電子郵件發送,然後我得到的錯誤「郵件不能發送。」在第一封電子郵件發送後,我沒有收到「已發送電子郵件」,但第一封郵件後只有一封「未發送電子郵件」。我該如何解決這個問題?我想最終有一個input(),這樣我就可以輸入要發送的電子郵件數量,程序會將輸入的電子郵件數量發送到輸入中。我把我認爲這看起來是頂部的評論。我可以通過numberEmails命令乘以server.sendmail命令嗎?

這是我第一天使用Python,所以對我來說很容易請。 :)

回答

1

你不能乘以此。

乘法只能用數字完成,server.sendmail(sentFrom, to, msg)不會導致數字。

你將不得不循環所需的金額。

因此,作爲一個例子,這個輸出「Hello World」五次:

def test(): 
    print "hello world" 

numberEmails = 5 

for _ in range(numberEmails): 
    test() 

關當然,你必須分析你的numberEmails爲int,如果它不是一個整數。

最終你通過這整個塊必須循環5次

try : 
     server = smtplib.SMTP("smtp.gmail.com", 587) 
     server.ehlo() 
     server.starttls() 
     server.login(username,password) 
     server.sendmail(sentFrom, to, msg) 
     server.quit()  
     print (" Email has sent") 
    except : 
    print("email NOT sent") 
+0

我結束了使用while循環,感謝寫得很好的響應。 – raviriley

相關問題