mail mail
Нужен макрос для Excel?
Сделайте заказ прямо сейчас!
Ищете готовое решение?
Выбирайте и покупайте!
У вас есть интернет-магазин?
Настроим парсер под любой сайт!

Отправка писем из Excel при помощи почтовой программы TheBAT!

Отправка почты из Excel при помощи TheBAT!

Макроc предназначен для автоматизированной рассылки почты из Excel.

Для рассылки используется почтовая программа TheBAT!

(подразумевается, что эта программа на компьютере установлена и настроена, т.е. без проблем удаётся вручную создать в TheBAT письмо, и отправить его на произвольный адрес)

В качестве исходных данных выступает таблица Excel, в которой в первом столбце указаны адреса получателей рассылки, а в остальных столбцах - данные для формирования писем (тема, текст и т.д.)

В прикреплённом примере макрос формирует тему письма из значения ячейки второго столбца

' формируем тему письма из 2-й ячейки строки
            Тема = "Информация для " & ro.Cells(2) & " от EducatedFool"

а текст писем составляется из значений других ячеек (столбцы с 3 по 9)

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

Эти файлы создаются в папке C:\WINDOWS\Temp (используется системная папка для временных файлов),
файлам присваиваются имена типа mail.207561135292053, где 207561135292053 - случайное число:

Отправка письма производится вызовом специальной функции ОтправитьПисьмоЧерезTheBat:

ОтправитьПисьмоЧерезTheBat Адрес, Текст, Тема

Код функции для отправки письма:

Function ОтправитьПисьмоЧерезTheBat(ByVal Email As String, _
                                    ByVal Текст As String, Optional ByVal Тема As String = "", _
                                    Optional ByVal AttachFilename As String = "") As Boolean
    ' функция производит отправку письма с заданной темой и текстом на адрес Email
    ' с почтового ящика, настроенного в TheBAT для отправки писем "по-умолчанию"
    ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл

    strTO = "TO=" & Chr(34) & Email & Chr(34)    ' адрес получателя (можно указать список адресов)
    strSUBJECT = "SUBJECT=" & Chr(34) & Replace(Тема, """", "`") & Chr(34)   ' тема сообщения

    Filename$ = Environ("temp") & "\mail." & Fix(Rnd() * 1E+15)
    ff = FreeFile: Open Filename$ For Output As #ff
    Print #ff, Текст: Close #ff    ' пишем текст в файл

    ' текст сообщения (или путь к текстовому файлу с сообщением)
    strTEXT = "TEXT=" & Chr(34) & Filename$ & Chr(34)    ' Chr(34) - это кавычка

    ' путь к прикреплённому файлу (можно прикрепить несколько файлов)
    If AttachFilename <> "" Then strATTACH = "ATTACH=" & Chr(34) & AttachFilename & Chr(34)
 
    TheBatPath = ПутьКФайлуПрограммыTheBAT: DoEvents
    Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & _
           strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"    ' формируем командную строку
           
    CreateObject("WScript.Shell").Exec Cmd$    ' выполняем команду
End Function

Ознакомьтесь также со способом отправки почты из Excel
без использования почтовых программ

Ранние версии программы TheBAT! почему-то не отправляли письма сразу же.

Если вы используете древнюю версию этой почтовой программы (я заметил этот эффект на версии 1.54),
то по окончании формирования всех писем запустите такой макрос:

Function Send_Mail_with_TheBAT_from_Excel_VBA()
    ' теперь и без этого всё работает :) видимо, раньше у меня была глючная версия TheBAT
    For i = 1 To 30000: DoEvents: Next    ' пауза - без неё почему-то не происходит отправки
    Cmd2 = TheBatPath & " /SENDALL;": wsh.Exec Cmd2    ' команда ОТПРАВИТЬ ВСЮ ПОЧТУ
End Function

 

Если вы хотите узнать, с какого из настроенных почтовых ящиков TheBAT! будет отправлять почту,
есть возможность загрузить эти данные из настроек программы в реестре Windows:

Function DefaultMailAccount() As String
    ' читает из реестра настройки почтового ящика,
    ' установленного в TheBAT! как "ящик по-умолчанию"
    ' возвращает адрес почты, или пустую строку, если TheBAT! не настроен
    On Error Resume Next: Err.Clear
    key$ = "HKEY_CURRENT_USER\Software\RIT\The Bat!\Users depot\Default"
    DefaultMailAccount = CreateObject("WScript.Shell").RegRead(key$)
End Function
 
Sub УзнатьАдресПочты()
    MsgBox DefaultMailAccount, vbInformation
End Sub

ВложениеРазмерЗагрузкиПоследняя загрузка
TheBAT.xls40.5 КБ984 дня 1 час назад

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Спасибо за макрос.
А чтобы старый Бат отправлял и не закрывался, нужен параметр /SEND*.
После паузы, да.

Извините, все дело было в кавычках (Chr(34))

Прекрасный макрос!
Одна проблема - если либо в теме, либо в пути к файлу есть пробел, то строки отсекаются до него. Соответственно, тема из одного слова, а файл не находится.
Скажите, пожалуйста, как решить проблему? Bat 5.0.36.2, Win7, Office 2010

Вряд ли под Portable-версию получится, - там может не быть (и, скорее всего, нет) возможностей для программного управления рассылкой.
Так что пока только Outlook и стандартный TheBAT из вариантов отправки писем макросом (еще на сайте есть макрос для отправки писем без почтовых программ, средствами CDO)

А есть возможность настроить макрос под voyager(это портбл бат)? Дело в том, что он не устанавливается на комп., и найти его в реестре не получается, может есть какая-то хитрая переадресация.

Здравствуйте, Ярослав.
Совсем как при ручной вставке, - сложно очень, т.к. к функциям вставки из буфера обмена в тело письма, в TheBAT никак не добраться (а писать макрос, имитирующий действия пользователя - щелканье по кнопкам интерфейса TheBAT - не лучшая идея)

Но можно сделать что-то очень похожее.
Для этого, надо создать шаблон письма в формате HTML, и в середину шаблона вставить HTML код таблицы [a1:b10]
У меня на сайте есть парочка макросов, которые по диапазону ячеек сгенерирует HTML код (выберите любой из 2 вариантов, и подружите с макросом отправки письма)
http://excelvba.ru/code/ExportHTML
http://excelvba.ru/programmes/ExportHTML

Спасибо за замечательный макрос.
Работает хорошо - вот только вопрос как можно вставить в тело письма не просто обычный текст а табличку из Excel (не прикрепить файл а именно небольшую табличку) например из диапазона [a1:b10]. пока додумался просто сцеплять текст, как у Вас в примере, но хотелось бы именно таблицу с сохранением форматирования, как при ручной вставке.

Спасибо за код. Интересный и очень полезный. Единственно, что надо поменять в коде, что бы после отправки МЫШЬ остался активным (закрывается)

Print #ff, Текст: Close #ff ' пишем текст в файл

функция оставляет в txt файле пустую строку в конце
т.е. если записали в файл "123", при загрузке получим "123 " или "123"&vbNewLine

Влад, либо в настройках программы включите опцию «сворачивать программу вместо закрытия»,
либо в коде уберите параметр /MINIMIZE;
PS: не проверял. но у меня все отправляется, и ничего не закрывается.

Помогите! =)) Отличная функция! долго искал. Но вот вроде настроил. прикреплят то что нужно. НО после того как отправляет письма БАТ закрывается - что абсолютно не удобно. Помогите советом! Открывать постоянно программу после этого не удобно.

Шаблон присоединил, но он отображается в тексте, только в формате (.txt), все html и все подобные текстовые и иные файлы с языками разметки отображаются своим кодом и естественно без вложений с изображениями итд. Да шаблон вылезает сверху письма, да вещь совершенно бесполезная, проще руками прописать или ссылками на ячейки Excel.
Attach нескольких файлов реализовал так:
--- --- ---
If AttachFilename <> "" Then strATTACH = "ATTACH=" & Chr(34) & AttachFilename & Chr(34)
If AttachFilename1 <> "" Then strATTACH1 = "ATTACH=" & Chr(34) & AttachFilename1 & Chr(34)

TheBatPath = ПутьКФайлуПрограммыTheBAT: DoEvents
Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL;TEMPLATE=""C:\Users\WWW\Desktop\123.txt"";" & strTO & ";" & strSUBJECT & ";" & _
strTEXT & ";" & strATTACH & ";" & strATTACH1 & " /MINIMIZE;"
--- --- ---
Осталось только собственно то, для чего и нужен был шаблон,- научиться пристегивать картинку с отображением в тесте письма. Есть мысли у кого-нибудь как это можно реализовать?

Очень большая просьба, положите пожалуйста пример с шаблоном (как не прописываю,- результат тот же, пустой шаблон в исходящих) и с отправкой нескольких файлов (прикрепляется только последний, где бы не прописал весь список), может гранаты не той системы? (office 2007 standart) или дело в прокладке между монитором и клавиатурой...

C шаблонами пробовал - не получилось.
TheBAT ждёт в качестве значения параметра TEMPLATE полный путь к файлу шаблона
Т.е. можно создать в отдельном текстовом файле шаблон письма - он будет вставлен перед текстом письма (т.е. сам текст письма добавится ПОСЛЕ всего текста шаблона - т.е. результат совсем не тот, какой мы ожидаем)

Одно не понимаю, - зачем вам колдовать с этими шаблонами?
В макросе можно дописать пару строк, добавив перед текстом письма шапку, а после - подвал письма:

            ' формируем текст письма
            Текст = Текст & "Здравствуйте, " & ro.Cells(2) & vbNewLine & vbNewLine
 
            Текст = Текст & "Предоставленный документ: " & ro.Cells(3) & vbNewLine & vbNewLine
            Текст = Текст & "Формат документа: " & ro.Cells(4) & " на " & ro.Cells(5) & " стр." & vbNewLine
            Текст = Текст & "Срок выполнения: " & ro.Cells(6) & vbNewLine
            Текст = Текст & "Стоимость: " & ro.Cells(7) & " " & ro.Cells(8) & vbNewLine
            Текст = Текст & "Дата выполнения: " & ro.Cells(9) & vbNewLine
 
            Текст = Текст & vbNewLine & vbNewLine & "С уважением," & vbNewLine & _
                    "администратор сайта ExcelVBA.ru" & vbNewLine & "Игорь    mailto:info@excelvba.ru"

Насчет ATTACH с несколькими файлами, - ниже в комментах было предложено решение (хотя я делал как-то иначе, - и тоже работало):

Делается очень просто: ;ATTACH=D:\Файл1.mhtml;ATTACH=D:\Файл2.mhtml
это присоединять к письму несколько файлов (EvgeniuXP).

Короче, для каждого файла надо добавлять в командную строку отдельный ATTACH

Но, поскольку длина командной строки ограничена, можно (и рекомендуется) поступить как с текстом письма:
записываем список прикрепляемых файлов в текстовый файл (по одному полному пути к файлу на строку), и в параметре ATTACH задаем путь к этому текстовому файлу.

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

Добрый день, огромное спасибо автору за функцию, и присоединяюсь к вопросу Кирилла, команда TEMPLATE не зависимо от дальнейшего адреса, в любом случае добавляет шаблон нового письма по умолчанию, даже с таким синтаксисом:
--- --- ---
Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL; TEMPLATE=""Мой шаблон""; " & strTO & ";" & strSUBJECT & ";" & _
strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;" ' формируем командную строку
--- --- ---
игнорируя все дальнейшие манипуляции, причем конкретного адреса шаблона вообще не существует, есть только файл для каждого ящика со всеми шаблонами сразу "ACCOUNT.QTB", адрес которого прописывать бессмысленно. Может единственный способ, это прописать в коде "руками" все настройки из шаблона?

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

Большое спасибо за макрос, давно пытался создать что-то подобное, а подскажите пожалуйста как можно реализовать рассылку с условием при повторяющихся подряд в первой колонке адресах почты, чтоб он не создавал отдельное письмо, а дополнял самое первое ниже, указывая весь текст соответствующий каждому повтору email?

Кирилл, скорее всего, вы неверно указали название или путь к шаблону.
Название шаблона надо заключать в кавычки. В коде, кавычки надо дублировать.
Например, если шаблон называется Мой шаблон,
то в коде должно быть что-то типа такого:

Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL; TEMPLATE=""Мой шаблон""; " & strTO & ";" & strSUBJECT & ";" & _
           strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"    ' формируем командную строку

Спасибо за идею, но при таком подходе (добавление TEMPLATE=...всеравночто... - при любом варианте шаблон "Новое письмо") действительно формируется письмо с шаблоном "Новое письмо" (только) , а дальнейшая строка изнорируется. Т.е. в папке исходящих писем создается новое письмо с шаблоном по умолчанию, но без адресата, темы, текста и аттача. Попробовал через переменную - по аналогии с параметрами адрес, тема, текст ( strTEMPLATE = "TEMPLATE=" & Chr(34) & TEMPLATE & Chr(34) ) - отправляет письмо как раньше , добавляя текст, что не найден файл в папке System32

Здравствуйте, Кирилл.
По идее, TheBAT должен использовать настроенный шаблон из настроек почтового ящика.
Но, по факту, создается «голое» письмо.

По параметрам командной строки TheBAT, информация есть здесь: http://www.nobat.ru/cmd_intro.html

Синтаксис команды /MAIL:
/MAIL:[parameter1[;parameter2[;parameter3 [...]]]

Возможные параметры:

USER=значение или U=значение.
Значение - название ящика, из которого должно быть отправлено сообщение. Если параметр FOLDER не определен, будет отправлено сообщение из папки Inbox данного ящика.
PASSWORD=значение или P=значение.
Значение - пароль. Используется в том случае, если ящик защищен паролем.
FOLDER=значение или F=значение.
Значение - путь к папке в ящике, из которой следует оправить сообщение. Если путь не включает имя ящика, The Bat! будет просматривать все ящики в поисках папки с таким именем; использоваться будет первая найденная папка. Если заданная папка не найдена, будет использоваться папка Inbox указанного ящика.
TEMPLATE=значение или T=значение.
Значение - путь к файлу, содержащему шаблон, который должен использоваться для создания сообщения. По умолчанию это - шаблон используемой папки или ящика.
TO=значение.
Значение определяет первичного адресата сообщения. Вы можете добавлять дополнительных адресатов с помощью макрокоманд шаблона %TO, %CC, %BCC.
SUBJECT=значение или S=значение. Значение определяет тему сообщения. Также возможно определить тему сообщения в шаблоне, используя макрос %SUBJECT.
TEXT=значение или CONTENTS=значение или C=значение.
Значение - путь к текстовому файлу, который содержит текст сообщения. Также возможно включить текстовый файл в сообщение, используя в шаблоне макрос %PUT.
ATTACH=значение или FILE=значение или A=значение.
Значение - путь к файлу,  который должен быть присоединен к сообщению. Также возможно использовать макрос %ATTACHFILE в шаблоне.

 

Вывод: надо в команду добавить что-то вроде TEMPLATE=НазваниеШаблона;

Я не пробовал, - потому готового решения дать не могу. Проверьте - должно получиться.

Т.е. надо заменить

Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & _
           strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"    ' формируем командную строку

на

Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL; TEMPLATE=НазваниеВашегоШаблона; " & strTO & ";" & strSUBJECT & ";" & _
           strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"    ' формируем командную строку

Хочу поблагодарить за показанный способ отправки файлов через The_Bat! Использую для рассылки документов PDF - всё работает великолепно. Мне "Мыша" всегда больше оутлука нравился - еще раз СПАСИБО, Мастер! Единственный оставшийся вопрос - при создании нового письма в The_Bat применяется шаблон с настроенными шрифтами, подписью, логотипом компании и т.д., а при отправке писем макросом, с того же почтового ящика, уходит "голое" письмо с текстом , прописанном мною в коде. Есть ли возможность задействовать шаблон "мыша"? Подскажите, пожалуйста, как это решается. Спасибо!

Тоже не смог разобраться, как прикрепить два (три) файла! Получаю такойже результат!

Спасибо! Ответ не нужен! Ошибку нашел-разобрался!

Добрый день! Огромное спасибо за такой необходимый макрос! Однако возникла сложность с оператором:
TheBatPath = ПутьКФайлуПрограммыTheBAT: DoEvents
Передает в командную строку пустое значение (Empty)
TheBat - запущен. Ящик определяется (функцией, Вами подсказанной) по умолчанию верный....
Буду благодарен за разъяснение!

Делается очень просто: ;ATTACH=D:\Файл1.mhtml; ATTACH=D:\Файл2.mhtml
Написал - потому что нигде в инете информацию не нашел, может кому тоже пригодится :)

это присоединять к письму несколько файлов (EvgeniuXP).

Здравствуйте, Петр.
Уберите везде в коде параметр /SENDALL, - и письма будут оставаться в папке «Исходящие»

Можете также использовать готовую программу для рассылки почты (через Outlook или TheBAT),
- там, в настройках. есть опция немежденной или отложенной отправки писем.

Как сделать чтобы письма не отправлялись, а помещались в черновики например?

Спасибо, за ответ.
Скорректируйте, пожалуйста,
прописываю пути к файлам через запятую:
AttachFilename = Chr(34) & "d:\1.jpg" & Chr(34) & "," & Chr(34) & "d:\2.jpg" & Chr(34)
получаю "Файл d:\1.jpg,d:\2.jpg не найден", т.е. воспринимает как один файл с именем d:\1.jpg,d:\2.jpg

Заранее, благодарю

Чтобы прикрепить несколько файлов, - надо в переменной strATTACH перечислить полные пути к ним (не помню только, с каким разделителем, - вроде запятую можно использовать), заключая каждый путь в двойные кавычки

Я обычно формирую текстовый файл, в который прописываю все команды и список вложений, - а потом задаю этот файл в качестве параметра к TheBAT (это если надо указать много файлов)

Здравствуйте, подскажите, пожалуйста, как отправить несколько вложений в одном письме?
Количество вложений должно зависеть от данных введенных в ячейку.
Например, если в ячейке стоит текст "1,2,3", то должно отправиться три файла с указанным расширением, к примеру, 1.jpg, 2.jpg, 3.jpg Заранее, спасибо.

Надо в TheBAT! в свойствах почтового ящика поставить галочку «использовать по умолчанию»

Office тут ни при чем. В windows - да, может быть что-то не так настроено.
Но тут я ничего подсказать не могу - я ничего специально не настраивал,
просто запустил ваш макрос - письмо отправилось (WinXP, Office 2010)

Я конечно же проверил изначально. Не работает.
Run-time 1004: Method 'sendMail' of object'_Workbook' failed.
Я упустил большой нюанс - кроме все это все на ОС Windows 7 и Oficce '07. Может в этом дело???
Может в настройках панели управления необходимо что-то изменить??
В настройках The Bat почтовый клиент по умолчанию.

Код не надо менять - с TheBAT все будет работать точно также.
Что спрашивать-то... проверили бы, и увидели, что все работает.

(возможно, в TheBAT потребуется назначить один из почтовых ящиков «по-умолчанию».
У меня TheBAT без всяких паролей, я назначенным по-умолчанию ящиком, - ваш код сработал)

Добрый день. Подскажите, раньше отправлял письма через Outlook Express вызываемый макросом Эксель. Теперь вынужден был перейти к The Bat.
Процесс происходит приблизительно так:
есть базовый файл Эксель, с ним происходят определенные изменения, которые сохраняются уже под др именем (имя все время разное). Именно его и надо автоматически отправлять на один определенный адрес.
Раньше код выглядел так:
With ActiveWorkbook
.SendMail Recipients:="k@ukr.net", _
Subject:="..."
.Close SaveChanges:=False
End With
Подскажите пожалуйста, как должен выглядеть код??

Ни один ящик не настроен в качестве ящика по умолчанию. Хотя в программе все настроено, почта одна

Читаем справку по параметрам командной строки TheBAT:

TO=значение. Значение определяет первичного адресата сообщения.
Вы можете добавлять дополнительных адресатов с помощью макрокоманд шаблона %TO, %CC, %BCC.

и делаем по аналогии:

strTO = "TO=" & Chr(34) & Email & Chr(34) & ";" & "CC=" & Chr(34) & "address@mail.ru" & Chr(34)   
 ' адрес получателя (можно указать список адресов)

CC - копии письма, BCC - скрытые копии письма.

Да и вообще, можно просто указать список email в параметре TO=
не изменяя код.
Все подробности, как это делать - в справке по TheBAT!

Спасибо за функцию Но есть один вопрос- как указать ещё и адреса для рассылки копии письма?

СПасибо!

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

ВАЖНО! Файл не должен быть открыть в какой-либо программе.
Например, если это файл XLS, он не должен быть открыт в Excel, иначе макрос не сможет прикрепить файл к сообщению
(если честно, не проверял, но обычно это так и бывает)

Пример кода отправки письма с файлом:

Sub ПримерОтправкиФайлаПоПочте()
    Получатель$ = "vasya@mail.ru"
    Текст$ = "Здравствуй, Вася. Лови файл."
    Тема$ = "Пример отправки файла во вложении к письму"
    ПутьКФайлу$ = "C:\Documents and Settings\Admin\Рабочий стол\маршрут.xls"
 
    ОтправитьПисьмоЧерезTheBat Получатель$, Текст$, Тема$, ПутьКФайлу$
End Sub

Добрый день!
простите, если вопрос очень прост, но не могу понять куда нужно прописать AttachFilename, чтоб к отправляемому письму прикреплялся файл вложения? Кроме того, где должен находится файл и каким должно быть его имя?

Заранее спасибо!

При создание письма The Bat закрывается автоматически

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
  _____                  _  __               
|___ | _ __ __ __ | |/ / _ __ __ _
/ / | '_ \ \ \/ / | ' / | '__| / _` |
/ / | |_) | > < | . \ | | | (_| |
/_/ | .__/ /_/\_\ |_|\_\ |_| \__, |
|_| |_|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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