2016-12-04 84 views
0

所以我會盡力解釋這一點,我可以做到最好。 我手邊的任務是從數據庫中收集數據,並將這些信息放入一個自定義的編碼/格式化的HTML/CSS電子郵件中。通過電子郵件發送格式化的清單

運行此代碼時出現的錯誤是:TypeError:無法隱式將'list'對象轉換爲'str'。 我從數據庫中獲得的數據在每個部分的列表中都帶回了8個字符串的結果,所以我知道爲什麼這個錯誤會回來。我只是不太清楚如何繞過它,以便能夠自動將所有數據嵌入到電子郵件中,並以適當格式發送此類電子郵件。

import smtplib 
import sys 
import sqlite3 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

DATABASE = 'Blocs.db' 
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) 

print("Getting blocs from server...") 
conn = sqlite3.connect(DATABASE) 
cur = conn.cursor() 
cur.execute("SELECT weburl FROM Blocs") 
weburl_data = cur.fetchall() 
cur.execute("SELECT imgurl FROM Blocs") 
imgurl_data = cur.fetchall() 
cur.execute("SELECT title FROM Blocs") 
title_data = cur.fetchall() 
cur.execute("SELECT notes FROM Blocs") 
notes_data = cur.fetchall() 
conn.commit() 
conn.close() 

from_email = "[email protected]" 
from_pwd = "Password" 
to_email = "[email protected]" 

msg = MIMEMultipart('html') 
msg['Subject'] = "Test SMTPlib Message" 
msg['From'] = "[email protected]" 
msg['To'] = "[email protected]" 

firstHTML = '<html> <head></head> <body><table> <tr>' 
bloc_one = weburl_data 
secondHTML = '</tr></table></body></html>' 

new_html = firstHTML + bloc_one + secondHTML 

msg.attach(MIMEText(new_html, 'html')) 
print(msg) 

mail = smtplib.SMTP('outlook.office365.com', 587) 
mail.ehlo() 
mail.starttls() 
mail.login("[email protected]", "Password") 
mail.sendmail("[email protected]", "[email protected]", msg.as_string()) 
print("email sent") 
mail.quit() 
+1

或許你可以在哪一行說發生了錯誤?! – astraTiCon

+0

即時將假設錯誤發生在'new_html = firstHTML + bloc_one + secondHTML'。因爲bloc_one仍然是一個列表。您應該將該列表轉換爲字符串,如下面的答案。 – putonspectacles

回答

0

我不是真的在郵件的發送專家部門,但如果你唯一的問題是轉換列表爲str爲什麼不嘗試做與加入?

new_string = ''.join(name_of_the_list) 

我希望它能幫助:)