0 / 0 / 0
Регистрация: 31.12.2020
Сообщений: 9
1

Автоматическая рассылка файлов по электронной почте

10.01.2025, 10:06. Показов 304. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, форумчане. Помогите. Работа заставляет ежемесячно отправлять рабочий документ (pdf, excel, word) по контрагентам на электронные почты.
Отправлять вручную очень долго и муторно.

Задача:
Есть контрагенты с наименованиями:
ГК19251_РЦИБ
ДГ33500_ЦГБ
... и т д
И есть электронные адреса этих контрагентов.

Можно ли как то создать скрипт или программку, которая будет направлять файлы с моего рабочего электронного адреса из исходной папки на электронную почту этих организаций?
Чтобы можно было менять тему письма при отправке.
Чтобы за основу брался именно код контрагента ГК19251, ДГ33500... и т.д. при отправке на электронную почту.
У одного контрагента может быть несколько электронных адресов.

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2025, 10:06
Ответы с готовыми решениями:

Как получать по электронной почте уведомления о сохранении исполняемых файлов в общей папке?
Здравствуйте, форумчане! Помогите разобраться... Я столкнулся с проблемой, настраивая фильтр блокировки файлов на Windows Server 2003 R2:...

Рассылка данных по электронной почте
может кто-нибудь разбирался с таким кодом? что конкретно делают функции SendAlarmMail и MakeAlarmMail? даже на английском обяснения...

Автоматическая рассылка информации по почте
Добрый день. Помогите, пожалуйста, с автоматизацией рассылки информации по почте. Грубый аналог БД во вложении. Есть данные по...

Рассылка сообщений по электронной почте при изменении значений в поле
Форумчане,доброго времени суток! Помогите, пожалуйста, решить проблему рассылки сообщений по электронной почте сотрудникам согласно...

6
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
10.01.2025, 11:37 2
robinzon1,

У Google исчерпывающая информация ( в рамках Google Documents API ) с примерами на разных языках по созданию google-документов, массовой рассылки писем получателям со ссылками на данные документы и управлению почтовыми ящиками.

Если не сможешь разобраться сам, найди того, кто сможет.
0
3161 / 1087 / 491
Регистрация: 29.05.2016
Сообщений: 4,522
10.01.2025, 12:27 3
robinzon1, добрый! В каком виде идёт сопоставление контрагентов и адресов их электронных почт?
0
0 / 0 / 0
Регистрация: 31.12.2020
Сообщений: 9
10.01.2025, 13:08  [ТС] 4
Цитата Сообщение от Karen87 Посмотреть сообщение
добрый! В каком виде идёт сопоставление контрагентов и адресов их электронных почт?
Можно в любом удобном,
Было бы удобно
ГК19252/primer@mail.ru
ГК19253/primer2@mail.ru
ГК19254/primer3@mail.ru

Если несколько адресов то
ГК19252/primer@mail.ru
ГК19252/primer22@mail.ru

Или
ГК19252/primer@mail.ru/primer22@mail.ru


Если вы имеете ввиду в файле, то в excel, столбец А код ГК19252, столбец B primer22@mail.ru

Добавлено через 29 минут
Цитата Сообщение от bidstrup Посмотреть сообщение
У Google исчерпывающая информация ( в рамках Google Documents API ) с примерами на разных языках по созданию google-документов, массовой рассылки писем получателям со ссылками на данные документы и управлению почтовыми ящиками.
Мою задачу не решит. Костыли это все.
0
3161 / 1087 / 491
Регистрация: 29.05.2016
Сообщений: 4,522
10.01.2025, 13:22 5
robinzon1, создаете файл, в котором хранится все это сопоставление. Дальше с помощью PowerShell отправка письма осуществляется + нужно сопоставить контрагента и файл, предназначенный для него. Написать скрипт можно, в общем
0
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
10.01.2025, 17:32 6
Цитата Сообщение от robinzon1 Посмотреть сообщение
Костыли это все.
Да? Сделай лучше.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import os
import base64
import pickle
import time
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
 
 
# Define the scope of access
SCOPES = ['https://www.googleapis.com/auth/gmail.send']
 
# Function to authenticate and get service object
def authenticate_gmail():
    """Authenticate to Gmail API and return service object."""
    creds = None
    # Check if token.json exists for previously saved credentials
    if os.path.exists('token.json'):
        with open('token.json', 'rb') as token:
            creds = pickle.load(token)
    
    # If no valid credentials are available, let the user log in
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=8080)
        
        # Save the credentials for future use
        with open('token.json', 'wb') as token:
            pickle.dump(creds, token)
 
    try:
        service = build('gmail', 'v1', credentials=creds)
        return service
    except HttpError as error:
        print(f'An error occurred: {error}')
        return None
 
# Function to create a message with attachments
def create_message_with_attachment(sender, to, subject, message_text, file_path):
    """Create a MIME message with attachment."""
    message = MIMEMultipart()
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    
    # Add the text part of the message
    msg = MIMEText(message_text)
    message.attach(msg)
    
    # Attach the file
    try:
        filename = os.path.basename(file_path)
        with open(file_path, 'rb') as f:
            file_data = f.read()
            file_type = 'application/octet-stream'
            part = MIMEBase('application', 'octet-stream')
            part.set_payload(file_data)
            encoders.encode_base64(part)
            part.add_header('Content-Disposition', f'attachment; filename={filename}')
            message.attach(part)
    except Exception as e:
        print(f"Error attaching file {file_path}: {str(e)}")
    
    raw_message = base64.urlsafe_b64encode(message.as_bytes()).decode()
    return {'raw': raw_message}
 
# Function to send email
def send_email(service, sender, to, subject, message_text, file_path):
    """Send an email using Gmail API."""
    try:
        message = create_message_with_attachment(sender, to, subject, message_text, file_path)
        send_message = service.users().messages().send(userId="me", body=message).execute()
        print(f"Message sent to {to}")
        return send_message
    except HttpError as error:
        print(f'An error occurred: {error}')
 
# Function to send bulk emails to predefined list of recipients
def send_bulk_emails(service, sender, recipients, subject, message_text, file_paths):
    """Send bulk emails with attachments."""
    for recipient in recipients:
        for file_path in file_paths:
            send_email(service, sender, recipient, subject, message_text, file_path)
            time.sleep(1)  # Sleep to avoid Gmail rate limits
 
# Main function
def main():
    sender = "your-email@gmail.com"
    subject = "Subject of your email"
    message_text = "This is the body of the email."
    
    # List of predefined recipients
    recipients = [
        "client1@example.com",
        "client2@example.com",
        "client3@example.com",
    ]
    
    # List of files you want to send
    file_paths = [
        "path/to/your/file.xlsx",
        "path/to/your/file.docx",
        "path/to/your/file.pdf"
    ]
    
    # Authenticate and get service object
    service = authenticate_gmail()
    if service:
        send_bulk_emails(service, sender, recipients, subject, message_text, file_paths)
 
if __name__ == '__main__':
    main()
0
0 / 0 / 0
Регистрация: 31.12.2020
Сообщений: 9
10.01.2025, 22:47  [ТС] 7
Цитата Сообщение от bidstrup Посмотреть сообщение
Да? Сделай лучше.
Ну ты и размазал я тебе скажу. Все так объемно, красивый код. Мне до тебя как до луны. Но для меня это сложно понять. Куда вставлять мой контрагент и куда вводить почту эту.
0
10.01.2025, 22:47
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2025, 22:47
Помогаю со студенческими работами здесь

Автоматическая отправка сообщений по электронной почте при отсутствии Аксесс на компьютере (есть Рантайм)
Форумчане, доброго времени суток! Какое-то время назад занимался организацией автоматической отправки сообщений при возникновении события...

Отправка файлов по электронной почте
Здравствуйте! Как с помощью c# отправить несколько(именно не один, а несколько) прикреплённых к e-mail файлов? А то как отправить письмо с...

Передача больших файлов по электронной почте
Как передавать большие файлы по электронной почте?

Автоматическая рассылка выбранных файлов
Всем добрый день! Не совсем уверен, что написал по теме, прошу простить. Имею рутинную задачу, которая состоит в отправке документов по...

Автоматическая отправка файлов по почте
Как сделать .exe файл который при запуске будет отправлять файл на почту?

Автоматическая рассылка файлов адресатам в Outlook
Всем привет! По работе каждый день приходится обрабатывать множество заказов (ктотрые вытаскиваются из программки) и рассылать их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru