我试图创建一个程序,人们可以在其中上传一些.txt文件,并且.txt文件中的文本将通过SMTP发送到我的电子邮件中。我正在使用gmail。我没有太多的编程经验,我想学习更多,所以请帮助我。 :)
我有2个工作代码,第一个代码用于查找和读取.txt文件,第二个代码用于发送电子邮件。
import smtplib
from tkinter import *
from tkinter.filedialog import *
Tk().withdraw()
token = askopenfilename()
with open(token) as f:
msg = f.readlines()
print(msg)
##########MAIL##############################################################
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("MYEMAIL", "PASS")
server.sendmail("MYEMAIL", "MYEMAIL", msg)
server.quit()
两个代码都可以,我只需要将它们组合即可。这段代码给了我错误:
Traceback (most recent call last):
File "C:\Users\JiriC\Desktop\name V1.1.py", line 19, in <module>
server.sendmail("MYEMAIL", "MYEMAIL", msg)
File "E:\PROGRAMY\PYTHON\lib\smtplib.py", line 882, in sendmail
(code, resp) = self.data(msg)
File "E:\PROGRAMY\PYTHON\lib\smtplib.py", line 564, in data
q = _quote_periods(msg)
File "E:\PROGRAMY\PYTHON\lib\smtplib.py", line 176, in _quote_periods
return re.sub(br'(?m)^\.', b'..', bindata)
File "E:\PROGRAMY\PYTHON\lib\re.py", line 192, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object
答案 0 :(得分:1)
您需要:
msg = f.read()
代替:
msg = f.readlines()
这是因为sendmail()
想要一个 string ,如消息所示,但是readlines()
返回的是一个字符串列表。>
执行print(msg)
时,您会看到['first line', 'second line', ...]
。相反,您应该看到整个消息,没有任何方括号或引号。
read()
将正确读取整个文件并将其内容作为单个字符串返回。