TypeError при попытке отправить письмо с текстом - PullRequest
0 голосов
/ 16 января 2019

Я попытался создать программу, в которую люди будут загружать некоторые файлы .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

1 Ответ

0 голосов
/ 16 января 2019

Вам нужно:

msg = f.read()

вместо:

msg = f.readlines()

Это потому, что sendmail() хочет строку , как следует из сообщения, но то, что readlines() возвращает, представляет собой список строк .

Когда вы сделаете print(msg), вы увидите ['first line', 'second line', ...]. Вместо этого вы должны увидеть все сообщение без скобок или кавычек.

read() правильно прочитает весь файл и вернет его содержимое в виде одной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...