Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как автоматически отправлять файл на почту


Автоматизация работы Microsoft Outlook с помощью VBA на примере создания массовой рассылки писем

В этой статье я бы хотел поделиться опытом автоматизации офисной, рутинной задачи по отправке сообщений группе клиентов.
Итак, собственно, в чем вопрос: необходимо отправить электронные письма с вложением нескольким десяткам клиентам. При этом в поле получателя должен быть только один адрес, т.е. клиенты друг о друге не должны знать. Кроме того, не допускается установка дополнительного программного обеспечения, типа MaxBulk Mailer и ему подобного. В нашем распоряжении есть только Microsoft Office, а в данном конкретном случае — Microsoft Office 2013.

Я описываю, на мой взгляд, самый вариант – без применения шаблонов, черновиков и форматирования. Для наших целей потребуется Outlook (переходим в редактор VBA и добавляем модуль, еще включаем «Microsoft Excel 15.0 Object Library» в Tools > References), текстовый файл со списком адресатов по принципу «одна строка-один адрес», текстовый файл с телом письма и файлы, которые будем отправлять в качестве вложения.
Общий алгоритм таков: указываем данные для полей и генерируем письма, перебирая в цикле получателей.
Сразу отмечу, что данный пример не является неким доведенным до совершенства кодом, работающим с максимальной эффективностью при минимальных размерах. Но он работает и справляется с заявленным функционалом. Собственно, мне было просто лень отправлять вручную несколько десятков писем и я написал эту программу, а потом решил ей поделиться. Если кому-то интересно, тот может улучшать код сколько душе угодно.
VBA, по умолчанию, не требует четкого объявления переменных и их типов. В принципе, можно вообще обойтись без этого. Поэтому некоторые переменные в «эпизодических ролях» не описаны в конструкции с Dim.
Итак, сначала запрашиваем тему письма с реализацией проверки на отмену действия.
TxtSubj = InputBox("Тема письма", "Рассылка") If Len(Trim(TxtSubj)) = 0 Then Exit Sub End If 

Теперь очередь за файлами с адресами и текстом письма. Вот здесь возник нюанс. Как вызвать диалог выбора файла? О жестком прописывании пути я не хочу и думать. Так что приходится что-то придумывать. Многими используемый вариант с Application.GetOpenFilename не пройдет, так как в Outlook нет такого метода. Использовать API пробовал. Вариант с «Private Declare PtrSafe Function GetOpenFileName Lib „comdlg32.dll“…» не сработал (PtrSafe из-за того, что система Win7, х64). Ошибок не выдавал, но при вызове ничего не появлялось. Решения в Интернете не нашел. Если кто подскажет решение – буду благодарен. Таким образом, пришлось пойти в обход с применением объекта Excel.Application.


Dim xlApp As New Excel.Application Set fd = xlApp.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .Title = "Файл с текстом письма" .Filters.Add "Текстовый файл", "*.txt", 1 If .Show = -1 Then For Each vrtSelectedItem In .SelectedItems Path3Body = vrtSelectedItem Next vrtSelectedItem Else Exit Sub End If End With Set fd = Nothing 

И для другого файла
Set fd = xlApp.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .Title = "Файл со списком адресов" .Filters.Add "Текстовый файл", "*.txt", 1 If .Show = -1 Then For Each vrtSelectedItem In .SelectedItems Path3To = vrtSelectedItem Next vrtSelectedItem Else Exit Sub End If End With Set fd = Nothing 




А теперь и вложения. Тут я использовал динамический массив и возможность множественного выбора диалога.
Код
Set fd = xlApp.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = True .Title = "Файлы, прилагаемые к письму" .Filters.Add "Все файлы", "*.*", 1 If .Show = -1 Then i = 0 ReDim Preserve Path3Att(i) For Each vrtSelectedItem In .SelectedItems Path3Att(i) = vrtSelectedItem i = i + 1 ReDim Preserve Path3Att(i) Next vrtSelectedItem Else Exit Sub End If End With Set fd = Nothing 


Каждый раз я создавал и удалял объект fd из-за того, что это сделать проще, чем заниматься его чисткой перед последующим вызовом.
Для получения данных из текстовых файлов пришлось использовать пару дополнительных функций. Вызываются они таким образом:
txtBody = ReadTXTfile(Path3Body) Item2To = ReadTXTfile2Arr(Path3To) 

А тут их исходный код
Function ReadTXTfile(ByVal filename As String) As String Set FSO = CreateObject("scripting.filesystemobject") Set ts = FSO.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close Set ts = Nothing: Set FSO = Nothing End Function Function ReadTXTfile2Arr(ByVal filename As String) As Variant Const OpenFileForReading = 1 Const OpenFileForWriting = 2 Const OpenFileForAppending = 8 Const vbSplitAll = -1 Dim S As Variant Set FSO = CreateObject("Scripting.FileSystemObject") Set FSOFile = FSO.GetFile(filename) Set TextStream = FSOFile.OpenAsTextStream(OpenFileForReading) Do While Not TextStream.AtEndOfStream S = S & TextStream.ReadLine & vbNewLine Loop TextStream.Close ReadTXTfile2Arr = Split(S, vbNewLine, vbSplitAll, vbTextCompare) Set TextStream = Nothing Set FSOFile = Nothing Set FSO = Nothing End Function 




С целью отладки я вставил такой код
'Контроль за данными
'Debug.Print "Адреса получателя" 'Debug.Print "-----------------" 'For i = 0 To UBound(Item2To) - 1 ' Debug.Print Item2To(i) 'Next i 'Debug.Print "Прилагаемые файлы" 'Debug.Print "-----------------" 'For i = 0 To UBound(Path3Att) - 1 ' Debug.Print Path3Att(i) 'Next i 'Debug.Print "Тема письма" 'Debug.Print "-----------" 'Debug.Print TxtSubj 'Debug.Print "Тело письма" 'Debug.Print "-----------" 'Debug.Print txtBody 

Как видно, он сейчас закомментирован, но позволяет понять где что лежит.
Теперь небольшая по размеру, но самая важная часть – генерация писем.
Dim olMailMessage As Outlook.MailItem For i = 0 To UBound(Item2To) - 1 Set olMailMessage = Application.CreateItem(olMailItem) With olMailMessage DoEvents .To = Item2To(i) .Subject = TxtSubj .Body = txtBody For k = 0 To UBound(Path3Att) - 1 .Attachments.Add Path3Att(k), olByValue DoEvents Next k .Send End With Set olMailMessage = Nothing Next i 



При желании, метод .Send можно заменить на .Save. Тогда созданные письма окажутся в папке «Черновики».

Здесь полный код модуля «как есть».

Код
Attribute VB_Name = "Module" Function ReadTXTfile(ByVal filename As String) As String Set FSO = CreateObject("scripting.filesystemobject") Set ts = FSO.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close Set ts = Nothing: Set FSO = Nothing End Function Function ReadTXTfile2Arr(ByVal filename As String) As Variant Const OpenFileForReading = 1 Const OpenFileForWriting = 2 Const OpenFileForAppending = 8 Const vbSplitAll = -1 Dim S As Variant Set FSO = CreateObject("Scripting.FileSystemObject") Set FSOFile = FSO.GetFile(filename) Set TextStream = FSOFile.OpenAsTextStream(OpenFileForReading) Do While Not TextStream.AtEndOfStream S = S & TextStream.ReadLine & vbNewLine Loop TextStream.Close ReadTXTfile2Arr = Split(S, vbNewLine, vbSplitAll, vbTextCompare) Set TextStream = Nothing Set FSOFile = Nothing Set FSO = Nothing End Function Public Sub Autosender() 'требуется текстовый файл с перечнем адресов (каждый с новой строки), 'текстовый файл с телом письма 'и попросит выбрать вложение (мультивыбор доступен) Dim Path3Body As String Dim Path3To As String Dim Path3Att() As String Dim Item2To() As String Dim TxtSubj As String Dim txtBody As Variant Dim i Dim k Dim vrtSelectedItem As Variant Dim fd As FileDialog Dim olMailMessage As Outlook.MailItem Dim xlApp As New Excel.Application GenerateThis = False TxtSubj = InputBox("Тема письма", "Рассылка") If Len(Trim(TxtSubj)) = 0 Then Exit Sub End If Set fd = xlApp.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .Title = "Файл с текстом письма" .Filters.Add "Текстовый файл", "*.txt", 1 If .Show = -1 Then For Each vrtSelectedItem In .SelectedItems Path3Body = vrtSelectedItem Next vrtSelectedItem Else Exit Sub End If End With Set fd = Nothing Set fd = xlApp.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .Title = "Файл со списком адресов" .Filters.Add "Текстовый файл", "*.txt", 1 If .Show = -1 Then For Each vrtSelectedItem In .SelectedItems Path3To = vrtSelectedItem Next vrtSelectedItem Else Exit Sub End If End With Set fd = Nothing Set fd = xlApp.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = True .Title = "Файлы, прилагаемые к письму" .Filters.Add "Все файлы", "*.*", 1 If .Show = -1 Then i = 0 ReDim Preserve Path3Att(i) For Each vrtSelectedItem In .SelectedItems Path3Att(i) = vrtSelectedItem i = i + 1 ReDim Preserve Path3Att(i) Next vrtSelectedItem Else Exit Sub End If End With Set fd = Nothing Set xlApp = Nothing txtBody = ReadTXTfile(Path3Body) Item2To = ReadTXTfile2Arr(Path3To) DoEvents 'Контроль за данными 'Debug.Print "Адреса получателя" 'Debug.Print "-----------------" 'For i = 0 To UBound(Item2To) - 1 ' Debug.Print Item2To(i) 'Next i 'Debug.Print "Прилагаемые файлы" 'Debug.Print "-----------------" 'For i = 0 To UBound(Path3Att) - 1 ' Debug.Print Path3Att(i) 'Next i 'Debug.Print "Тема письма" 'Debug.Print "-----------" 'Debug.Print TxtSubj 'Debug.Print "Тело письма" 'Debug.Print "-----------" 'Debug.Print txtBody For i = 0 To UBound(Item2To) - 1 Set olMailMessage = Application.CreateItem(olMailItem) With olMailMessage DoEvents .To = Item2To(i) .Subject = TxtSubj .Body = txtBody For k = 0 To UBound(Path3Att) - 1 .Attachments.Add Path3Att(k), olByValue DoEvents Next k .Send End With Set olMailMessage = Nothing Next i MsgBox "Отправлено.", vbInformation + vbOKOnly, "Рассылка" End Sub 

В данном примере реализована возможность отправки простых писем. Если необходимо расширить возможности, например сделать текст форматированным, то двигаться следует в направлении Outlook.MailItem > GetInspector > WordEditor. Это, мягко говоря, усложняет код, но позволит использовать в качестве источника текста письма форматированный документ Word.
Можно также добавить обработку «преднамеренного» отсутствия каких-либо составляющих письма. Например, реализовать отправку без темы, текста или вложений. Сейчас отказ от одного из этих элементов приведет к прерыванию процедуры.
Этот код, теоретически, должен работать также и в более ранних версиях Microsoft Office. Поменяется только ссылка на библиотеку Excel.

Использование файлов для автоматической отправки электронных писем

Auto Mail Sender ™ File Edition (AMSFE) - это мощный и гибкий автоматический почтовый клиент, который может использовать ваши файлы для автоматической отправки электронных писем в любое время и с любой частотой, как вы ожидаете.

Вы можете использовать свой любимый текстовый редактор, чтобы написать все элементы электронной почты и различные расписания отправки (например, годовые, ежемесячные (день, день недели, последний день), еженедельные, ежедневные и любые другие расписания, которые вы можете придумать) в ваши файлы в соответствии с определениями интерфейса электронной почты и файлами примеров, в настоящее время поддерживаются текстовые файлы / файлы инициализации / конфигурации (*.txt; *. ini; *. cfg) и файлы XML (* .xml).

AMSFE предоставляет вам определения интерфейса электронной почты, файлы примеров и некоторые основные настройки, он поддерживает почти все традиционные элементы / функции электронной почты и некоторые отличительные элементы / функции, такие как расписание отправки, отправка по очереди с настройкой интервала (в секундах), повторная отправка, автоматическая повторная отправка в случае сбоя с настройками максимального времени и интервала (минут), менеджер макросов и встроенные макросы (получатели, дата отправки, время и ваша информация), возможность прикрепления папки, очистка папки после ее успешной отправки, установить более одного отправок одновременно, список учетных записей SMTP и автоматический выбор доступной, если значение по умолчанию недоступно, удаление файла электронной почты после его успешной отправки (обычно используется для одноразового файла, созданного другими программами / устройствами), список прокси-серверов и автоматический выбор доступного, если значение по умолчанию недоступно, диспетчер очередей и журналов, средство проверки файлов электронной почты, диспетчер папок электронной почты, отправка копии вам для r каждое исходящее сообщение, редактор содержимого электронной почты WYSIWYG с форматированным текстом (HTML), настраиваемый отправитель / получатель ответа / получатель уведомлений о прочтении, чтение получателей / содержимого из внешних файлов, безопасное SMTP-соединение SSL / TLS, создание популярных учетных записей SMTP напрямую, поддержка Unicode, автозаполнение настроек учетной записи SMTP и т. д.

Вы можете информировать себя или других, отправлять рабочие журналы или документы и отправлять обычные деловые электронные письма, конечно же, размещать объявления и поздравлять членов своей семьи или друзей в их важный день (например, день рождения) с помощью AMSFE.

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

Прочтите полное описание в онлайн-документации Auto Mail Sender ™ File Edition

Обзор BitsDuJour

Автоматическая отправка писем по собственному расписанию

Обмен сообщениями по электронной почте - замечательное изобретение, но ему не хватает гибкости для отправки писем по собственному расписанию.Даже так называемые «планировщики» электронной почты позволяют указать только определенную дату и время для отправки электронного письма - любая попытка составить более подробный или расширенный график рассылки по электронной почте встречает разочарование и неудачу! Вот почему сегодняшняя акция включает Auto Mail Sender ™ File Edition, программное решение для автоматической электронной почты с широкими возможностями настройки для пользователей Windows, доступное с потрясающей скидкой!

Auto Mail Sender ™ File Edition позволяет использовать простые текстовые файлы для передачи электронной почты в любое время и с любой частотой! С Auto Mail Sender ™ File Edition вы сможете настроить программное обеспечение для регулярной отправки сообщений, например, по дате, дню недели, еженедельно, ежедневно, практически в любой период, который вы можете себе представить.Кроме того, настройки интервала позволяют отправлять электронные письма с любой частотой, которую вы выберете, вплоть до секунд. Конечно, Auto Mail Sender ™ File Edition поддерживает повторную отправку неудавшихся доставок, встроенных макросов, нескольких электронных писем и вложений в папки.

Подумайте обо всех возможностях использования такой программы, как Auto Mail Sender ™ File Edition! Те журналы работы или статусные документы, которые вы отправляете каждую неделю? Выполнено. Обычные деловые письма? Выполнено. Даже поздравления с днем ​​рождения и годовщиной можно настроить заранее и настроить на повторение, чтобы никогда больше не упрекнуть вас за то, что вы забудете важную дату! Все это ваше благодаря сегодняшней акции, доступной с большой скидкой.

1. Easy Way

Просто нажмите соответствующие кнопки справа, чтобы поделиться им с Facebook, Twitter, Google+ и т. Д.

2. Совместное использование вручную

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

Тема: Рекомендовать программное обеспечение - Auto Mail Sender File Edition: использовать файлы для автоматической отправки электронных писем (от «ваше имя здесь»)

Содержание:
Привет,

Я использую Auto Mail Sender File Edition , это мощный и гибкий автоматический почтовый клиент, предоставляющий вам бесплатную лицензию, он может использовать ваши файлы для автоматической отправки электронных писем в любое время и с любой частотой, как вы ожидаете.

Тебе стоит пройти тест!

Официальная страница: https://www.automailsender.com/file-edition/
Прямая загрузка: https://www.automailsender.com/file-edition/auto-mail-sender-file-edition.zip

.

android - отправить электронное письмо автоматически с вложением

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.Вложение

- Как отправить файл по электронной почте без сохранения файла на диск?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.Электронная почта

- Как автоматически отправлять электронные письма с листа по мере его обновления?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Смотрите также