непредвиденная ошибка при отправке письма из .txt документа - PullRequest
0 голосов
/ 03 декабря 2018

Я пишу программу для отправки электронной почты (из message.txt) на адреса электронной почты, которые хранятся в email.txt.Отправка пустого электронного письма работает безупречно, но если я использую txt или сообщение, оно выдает синтаксическую ошибку «неожиданный случайный отступ» в самой последней строке кода.Почему это так и что я могу сделать, чтобы решить эту проблему?

РЕДАКТИРОВАТЬ: Я прочитал проблемы других людей, получающих ту же ошибку, но происхождение их ошибки очень отличается от моего, поэтому я не могу сделать вывод из их решений...

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

def send_email(user, pwd, recipients, subject):
    try:        
        with open('message.txt') as fp:
            # Create a text/plain message
            msg = MIMEText(fp.read())
        recipients = []
        with open('emails.txt') as f:
            for line in f:
                if len(line.strip()) > 0:
                    recipients.append(line.strip())
        #container
        msg = MIMEMultipart('alternative')        
        msg['Subject'] = 'Your reminder'
        msg['From'] = 'example@gmail.com'
        msg['To'] = ','.join(recipients)
        msg.attach(msg)
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.starttls()
        server.login(user, pwd)
        server.sendmail(user, recipients, msg.as_string())
        server.close()
        print("Sent the email!")
send_email("example@gmail.com", "password", "Subject",     "A reminder")

1 Ответ

0 голосов
/ 03 декабря 2018

Вы использовали имя переменной msg как вложение сообщения MIMEText, так и контейнер сообщений MIMEMultipart.В приведенном ниже коде я изменил имя переменной MIMEText на strMessage.

Неожиданный случай произошел из-за того, что блок попытки не завершен.Либо добавьте что-то в блок try, чтобы завершить составной оператор:

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

def send_email(user, pwd, recipients, subject):
    try:        
        with open('message.txt') as fp:
            # Create a text/plain message
            strMessage = MIMEText(fp.read())
        recipients = []
        with open('emails.txt') as f:
            for line in f:
                if len(line.strip()) > 0:
                    recipients.append(line.strip())
        #container
        msg = MIMEMultipart('alternative')        
        msg['Subject'] = 'Your reminder'
        msg['From'] = 'example@gmail.com'
        msg['To'] = ','.join(recipients)
        msg.attach(strMessage)
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.starttls()
        server.login(user, pwd)
        server.sendmail(user, recipients, strMessage.as_string())
        server.close()
        print("Sent the email!")
    finally:
        pass
send_email("example@gmail.com", "password", "Subject",     "A reminder")

, либо полностью пропустите попытку:

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

def send_email(user, pwd, recipients, subject):
            with open('message.txt') as fp:
                # Create a text/plain message
                strMessage = MIMEText(fp.read())
            recipients = []
            with open('emails.txt') as f:
                for line in f:
                    if len(line.strip()) > 0:
                        recipients.append(line.strip())
            #container
            msg = MIMEMultipart('alternative')
            msg['Subject'] = 'Your reminder'
            msg['From'] = 'example@gmail.com'
            msg['To'] = ','.join(recipients)
            msg.attach(strMessage)
            server = smtplib.SMTP("smtp.gmail.com", 587)
            server.starttls()
            server.login(user, pwd)
            server.sendmail(user, recipients, strMessage.as_string())
            server.close()
            print("Sent the email!")
send_email("example@gmail.com", "password", "Subject",     "A reminder")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...