по электронной почте последние строки из текстового файла в Python - PullRequest
1 голос
/ 23 декабря 2009

Я пытаюсь настроить функцию электронной почты, которая будет отправлять последние 15 строк файла results.txt в python. Я не уверен, как это сделать, и спрашивал, нужно ли мне подключаться к почтовому серверу или у python есть какой-то другой способ отправки электронной почты. Код ниже - то, что я получил до сих пор, и любая помощь будет оценена. Спасибо

import smtplib  

# Import the email modules we'll need
from email.mime.text import MIMEText

# Open a plain text file for reading.  For this example, assume that
# the text file contains only ASCII characters.
fp = open('/home/build/result.txt', 'r')
# Create a text/plain message
msg = MIMEText(fp.read())
fp.close()

me = 'name@server.com'
you = 'name@server.com'
msg['Subject'] = 'The contents of %s' % '/home/build/result.txt'
msg['From'] = me
msg['To'] = you

# Send the message via our own SMTP server, but don't include the
# envelope header.
s = smtplib.SMTP()
s.sendmail(me, [you], msg.as_string())
s.quit()

Привет еще раз,

При попытке подключения сервер не подключится. Я знаю, что не должен вводить адрес электронной почты. Может кто-нибудь подсказать, каким способом написать информацию о хосте Спасибо

smtplib.SMTPServerDisconnected: please run connect() first

Ответы [ 5 ]

4 голосов
/ 23 декабря 2009

Ваш компьютер не может отправлять почту без подключения к серверу (в противном случае, как почта будет доставляться с вашего компьютера?). Большинству людей предоставляется легкодоступный SMTP-сервер, предоставленный для них, либо их компанией (если это находится в интрасети), либо их провайдером (если домашний пользователь). Вам потребуется имя хоста (часто что-то вроде smtp1.myispdomain.com, где, конечно, myispdomain - это что-то другое для вас) и номер порта, обычно 25. Иногда хост предоставляется в виде числового IP-адреса, например 192.168.0.1.

Вызов SMTP() может принимать эти параметры и автоматически подключаться к серверу. Если вы не предоставляете параметры при создании объекта SMTP, вам придется позже вызвать connect(), предоставив ту же информацию. Подробнее см. документацию .

Обратите внимание, что по умолчанию используется подключение к localhost и порту 25. Это работает, если вы работаете на компьютере с Linux, на котором работает собственный почтовый сервер пересылки (например, Postfix, Sendmail, Exim), но если вы работаете на компьютере с Windows как правило, вам придется использовать адрес, предоставленный вашим провайдером.

2 голосов
/ 23 декабря 2009
msg = MIMEText(''.join(fp.readlines()[-15:]))
1 голос
/ 23 декабря 2009

Вы можете взглянуть на это:

http://docs.python.org/library/email-examples.html

1 голос
/ 23 декабря 2009
msg = MIMEText("\n".join(fp.read().split("\n")[-15:]))

Или, если вам не нужны пустые строки в конце, сделайте как

msg = MIMEText("\n".join(fp.read().strip().split("\n")[-15:]))
0 голосов
/ 23 декабря 2009

Возможно, вы захотите взглянуть на мой почтовый модуль. Оборачивает модули электронной почты в стандартной библиотеке.

from mailer import Mailer
from mailer import Message

message = Message(From="me@example.com",
                  To="you@example.com",
                  charset="utf-8")
message.Subject = 'The contents of %s' % '/home/build/result.txt'
message.Body = ''.join(fp.readlines()[-15:])

sender = Mailer('smtp.example.com')
sender.login('username', 'password')
sender.send(message)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...