Сложность обновления тела электронной почты в python

Maximus спросил: 28 марта 2018 в 02:53 в: python

Ребята Я новичок в python, но я сделал код ниже с помощью различных веб-сайтов и его работы, но проблема заключается в отправке отдельных писем для каждого IP-адреса в списке сайтов. Помогите мне создать тело почты со всеми IP-адресами.

ping.py

#!/usr/bin/env pythonimport smtplib
import pyping
from conf import settings, sites
import time
import datetime"""Sends an e-mail to the specified recipient."""
sender = settings["monitor_email"]
recipient = settings["recipient_email"]
subject = settings["email_subject"]
headers = ["From: " + sender,
        "Subject: " + subject,
        "To: " + recipient,
        "MIME-Version: 1.0",
        "Content-Type: text/html"]
headers = "\r\n".join(headers)
session = smtplib.SMTP(settings["monitor_server"], settings["monitor_server_port"])
session.ehlo()
session.login(settings["monitor_email"], settings["monitor_password"])
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')for site in sites:
checker = pyping.ping(site)
# The site status changed from it's last value, so send an emailif checker.ret_code == 0:        # The site is UP
        body = "%s This Server is up %s" % (site, st)
        session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
else:
        # The site is Down
        body = "%s This Server is down %s" % (site, st)
        session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)session.quit()

Это мой conf.py

sites = (
"192.168.1.1",
"192.168.2.1",
"192.168.3.1",
)settings = {
"recipient_email": 'tomail@domain.com',
"monitor_email": 'frommail@domain.com',
"monitor_password": 'password',# Leave as it is to use gmail as the server
"monitor_server": 'frommail@domain.com',
"monitor_server_port": 587,# Optional Settings
"email_subject": 'Server Monitor Alert'
}

Я получаю вывод как:

Предупреждение о мониторе сервера

192.168 .1.1 Этот сервер находится на уровне 2018-04-21.

Эта почта успешно отправляется на адрес tomail@domain.com, но не в одной почте для трех ip-адресов, которые отправляют три письма с каждым IP-адресом. Pls поможет мне отправить весь статус ip, указанный на сайтах в одной почте.

1 ответ

Есть решение
Colin ответил: 28 марта 2018 в 03:09

Например:

temp = []for site in sites:
    checker = pyping.ping(site)
    # The site status changed from it's last value, so send an email    if checker.ret_code == 0:
        # The site is UP
        body = "%s This Server is up %s" % (site, st)
        temp.append(body)
    else:
        # The site is Down
        body = "%s This Server is down %s" % (site, st)
        temp.append(body)body = '\n'.join(temp)
session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
Maximus ответил: 28 марта 2018 в 03:32
:) Бадди, не могли бы вы сказать мне, почему я получаю вывод, поскольку параграф отсутствует в списке. Новая строка не работает
Colin ответил: 28 марта 2018 в 03:34
Вы пробовали: body = '\r\n'.join(temp)?
Maximus ответил: 28 марта 2018 в 03:37
:( не работает.
Colin ответил: 28 марта 2018 в 03:38
Если вы отправляете HTML, то для новой строки это должен быть <br>.