Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Рассылка

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Kuken



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
так при чем тут SMTP сервер то?
- дак я вопрос про смтп сервер и не задавал..
люди сами туда пошли.. (не виноватый я)
 
с начала темы задача не поменялась..
 
6,8,12 посты
 

Всего записей: 37 | Зарегистр. 27-01-2017 | Отправлено: 13:22 14-06-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kuken

Цитата:
6,8,12 посты


Код:
from openpyxl import load_workbook
from datetime import datetime
import smtplib
import ssl
 
INFORM_BY = (5, 1, 0)
SEND_TO = 'some@email.ru'
SEND_FROM = 'from@email.ru'
SMTP_SERVER = '127.0.0.1'
SMTP_PORT = 587
SMTP_USER = 'user@'
SMTP_PASS = 'smtp_pass'
 
 
def main(filename='data.xlsx'):
    current = datetime.now()
    with load_workbook(filename, data_only=True) as wb:
        sheet = wb["График средст измерений"]
        for cell in sheet['G']:
            cell_date = datetime.strptime(cell.value, '%d.%m.%Y')
            if (cell_date - current).days in INFORM_BY:
                send_email(sheet[cell.row])
 
 
def send_email(row):
    message = f"""\
    Subject: This is an email subject: {row[1].value}
 
    This is a body of the message: {row[0].value} and {row[2].value}"""
 
    context = ssl.create_default_context()
    with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT, context=context) as server:
        server.login(SMTP_USER, SMTP_PASS)
        server.sendmail(SEND_FROM, SEND_TO, message)
 
 
if __name__ == '__main__':
    main()

 
для работы с SSL SMTP, если через STARTTLS или иначе, вообще без защиты - поменяйте
https://realpython.com/python-send-email/
запускать раз в сутки, так как не проверяет отправлено было ранее или нет и при повторном запуске в те же сутки снова отправит. не проверял, но старался написать просто.
 
если данные отсортированы по дате (то есть не нужно все перебирать), то можно цикл остановить раньше.

Код:
 
    INFORM_BY = (5, 1, 0)  
    MAX_DAYS = max(INFORM_BY)
 
# остальное
 
    for cell in sheet['G']:
        cell_date = datetime.strptime(cell.value, '%d.%m.%Y')
        days = (cell_date - current).days
        if days > MAX_DAYS:
            break;  
        if days in INFORM_BY:
            send_email(sheet[cell.row])

 
можно еще загнать отфильтрованные строки в массив, и потом установить SMTP соединение и отправить одно за другим, а не устанавливать новое соединение каждый раз - так будет быстрее. хотя зависит от количества писем и ограничения у конкретного почтового сервиса.

Всего записей: 15121 | Зарегистр. 20-09-2014 | Отправлено: 02:55 15-06-2022 | Исправлено: Mavrikii, 08:38 15-06-2022
sdr77

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> мне нужно что бы из файла выбирались данные по критерию (за 1 день до даты, за 5 дней до даты)
 
я бы использовал perl и модуль Date::Manip (лет 15 назад я с его помощью считал стаж по трудовым книжкам с точностью до дня). сейчас помотрел на cpan - упс, там навертели столько всего. Date::Calc попроще будет.

Всего записей: 386 | Зарегистр. 22-07-2005 | Отправлено: 13:02 17-06-2022
Kuken



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
я бы использовал perl и модуль Date::Manip (лет 15 назад я с его помощью считал стаж по трудовым книжкам с точностью до дня). сейчас помотрел на cpan - упс, там навертели столько всего. Date::Calc попроще будет

какая разница, если я ни то ни то не знаю.

Всего записей: 37 | Зарегистр. 27-01-2017 | Отправлено: 14:10 17-06-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kuken
Написал же код, что в нем не устраивает?

Всего записей: 15121 | Зарегистр. 20-09-2014 | Отправлено: 15:07 17-06-2022
sdr77

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kuken
так пора узнать, то или это или хоть что-нибудь,
позволяющее отсчитывать даты простой арифметикой.
 
или заплатить 1000 руб фрилансеру за скрипт для Excel.
(судя по статье на хабре, рынок скриптов Excel на заказ
существует и на нем много участников).

Всего записей: 386 | Зарегистр. 22-07-2005 | Отправлено: 16:33 18-06-2022
Kuken



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
Написал же код, что в нем не устраивает?

все устраивает..
 
а то код да, но еще и понять хочется что почему и для чего.  
ну и попутно книжки по питону читаю...
 
сейчас свалил в ОТПУСК, наконец то после буду тестить.
 
sdr77

Цитата:
так пора узнать, то или это или хоть что-нибудь,
позволяющее отсчитывать даты простой арифметикой.

 
читаем тему внимательно.  
читать если не хотим валим на формы пингвиноидов..
 
открою страшную тайну если тему почитать, то станет понятно что как раз после возникновения этого вопроса и начал изучать питон.
 
а флудить не надо, это вас не красит ни как специалиста ни как человека.
 

Всего записей: 37 | Зарегистр. 27-01-2017 | Отправлено: 09:40 23-06-2022 | Исправлено: Kuken, 09:42 23-06-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Рассылка


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru