Бывает нужно разослать большое количество писем списку контактов из таблицы в Excel.
Это может быть список потенциальных клиентов с мероприятия, выгрузка контактов из программы (1С, Битрикс24, amoCRM), просто список родственников, которые с нетерпением ждут от вас поздравления с праздником или уникального предложения.
Расскажу, как сделать это просто, быстро и бесплатно. Для решения задачи понадобится Excel, Word и Outlook из пакета Microsoft Office.
Итак, например, есть Excel таблица с данными клиентов (ФИО, компания, E-mail) и мы хотим отправить им персонализированное сообщение о предстоящих скидках.
Колонка “Пол” потребуется для определения окончания “уважаемый” или “уважаемая”, ее я вычислил по формуле, если “Отчество” заканчивается на “ч” значит это мужчина, если нет — женщина:
=ЕСЛИ(ПРАВСИМВ(C2;1) = "ч"; "М";"Ж")
В новом документе Word наберём шаблон текста сообщения, которое будем отправлять. Вместо обращения, имени и названия компании оставим пока пустые места.
Запустим Мастер Слияния: вкладка Рассылки (Mailings), Начать слияние (Start Mail Merge), далее Пошаговый мастер слияния (Step-by-Step Merge Wizard).
Откроется мастер, состоящий из 6 этапов.
На перовом этапе выберем пункт Электронное сообщение (E-mail), так как хотим отправить наши сообщения по электронной почте.
На втором этапе нужно указать, какой документ будет использоваться в качестве шаблона, выберем Текущий документ (Current document).
Третий этап — выбор получателей. Так как список наших клиентов хранится в файле Excel, выбираем пункт Использование списка, жмем Обзор (Browse) и указываем наш файл.
Откроется окно Получатели слияния, в нем можно выбрать или отменить клиентов для которых делаем рассылку.
Четвертый этап — создание сообщения. Тут можно вставить данные из нашего файла Excel в шаблон сообщения, который мы подготовили.
Вставим Фамилию, Имя, Отчество и название компании в наш шаблон, для этого: установим курсор в текст сообщения куда хотим вставить значение поля Excel, нажмем Другие элементы, в открывшемся окне выберем поле, которое хотим вставить, и так для всех полей.
Чтобы правильно указать обращение “уважаемый” для мужчин, и “уважаемая” для женщин создадим правило. Жмём кнопку Правила (Rules) на вкладке Рассылки (Mailings) и выберем пункт IF…THEN…ELSE.
В открывшемся окне укажем правило: если поле “Пол” равно “М” — вставить текст “уважаемый”, в противном случае — вставить текст “уважаемая”.
В итоге, после вставки полей должен получиться шаблон похожий на мой (вставленные поля выделил красным цветом).
На пятом этапе можно предварительно просмотреть результаты слияния. Для перехода между письмами служат кнопки со стрелками.
На завершающем 6 этапе нужно выбрать единственный пункт Электронная почта.
Затем в открывшемся окне указать тему отправляемых писем и выбрать в поле Кому столбец нашей таблицы Excel, в котором содержаться адреса получателей
После нажатия на кнопку ОК, Word автоматически подключится к вашему почтовому клиенту Outlook, поместит все сообщения в папку «Исходящие», после чего письма отправятся получателям.
Если вы хотите проверить письма перед отправкой, есть небольшая хитрость, нужно предварительно перевести Outlook в автономный режим Файл — Автономный режим. Письма останутся в исходящих, пока вы не выйдете из автономного режима и при необходимости вы сможете проверить или внести в них изменения.
На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.
Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.
- Интернет
- Рассылка почты
Пример макроса, отправляющего письма со вложениями из Excel через почтовый клиент Outlook:
Sub Отправить_Письмо_из_Outlook() 'отправляем письмо без вложений res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 1", "Тема письма 1") If res Then Debug.Print "Письмо 1 отправлено успешно" Else Debug.Print "Ошибка отправки" 'отправляем письмо с 1 вложением attach$ = ThisWorkbook.FullName ' прикрепляем текущий файл Excel res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 2", "Тема письма 2", attach$) If res Then Debug.Print "Письмо 2 отправлено успешно" Else Debug.Print "Ошибка отправки" 'отправляем письмо с несколькими вложениями Dim coll As New Collection ' заносим в коллекцию список прикрепляемых файлов coll.Add "C:Documents and SettingsAdminРабочий столTyres.jpg" coll.Add "C:Documents and SettingsAdminРабочий столcalc.xls" coll.Add ThisWorkbook.FullName ' прикрепляем текущий файл Excel res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 3", "Тема письма 3", coll) If res Then Debug.Print "Письмо 3 отправлено успешно" Else Debug.Print "Ошибка отправки" End Sub
Макрос использует функцию SendEmailUsingOutlook, которая:
- принимает в качестве параметров адрес получателя письма, тему и текст письма, список вложений
- запускает Outlook, формирует письмо, и отправляет его
- возвращает TRUE, если отправка прошла успешно, или FALSE, если с отправкой почты вызникли проблемы
Код функции SendEmailUsingOutlook:
Function SendEmailUsingOutlook(ByVal Email$, ByVal MailText$, Optional ByVal Subject$ = "", _ Optional ByVal AttachFilename As Variant) As Boolean ' функция производит отправку письма с заданной темой и текстом на адрес Email ' с почтового ящика, настроенного в Outlook для отправки писем "по-умолчанию" ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл (файлы) On Error Resume Next: Err.Clear Dim OA As Object: Set OA = CreateObject("Outlook.Application") If OA Is Nothing Then MsgBox "Не удалось запустить OUTLOOK для отправки почты", vbCritical: Exit Function With OA.CreateItem(0) 'создаем новое сообщение .To = Email$: .Subject = Subject$: .Body = MailText$ If VarType(AttachFilename) = vbString Then .Attachments.Add AttachFilename If VarType(AttachFilename) = vbObject Then ' AttachFilename as Collection For Each file In AttachFilename: .Attachments.Add file: Next End If For i = 1 To 100000: DoEvents: Next ' без паузы не отправляются письма без вложений Err.Clear: .Send SendEmailUsingOutlook = Err = 0 End With Set OutApp = Nothing End Function
Пример макроса, с получением параметров письма из ячеек листа Excel:
Sub Отправить_Письмо_из_Outlook() ' адрес получателя - в ячейке A1, текст письма - в ячейке A2 res = SendEmailUsingOutlook(Cells(1, 1), Range("a2"), "Тема письма 1") If res Then Debug.Print "Письмо 1 отправлено успешно" Else Debug.Print "Ошибка отправки" End Sub
- 176096 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Почтовая рассылка
Постановка задачи
Имеем таблицу в Microsoft Excel, в которой хранится информация о ключевых клиентах нашей компании (адреса эл.почты, имена, названия компаний и т.д.), которых мы хотим поздравить с очередным праздником.
Поздравлять будем при помощи простого, но трогательного сообщения, содержащего имя клиента и название его компании. Причем все надо сделать так, чтобы получатель (не дай бог!) не подумал, что письмо сделано автоматически, а был уверен, что письмо было кропотливо написано ради него вручную.
В конце все созданные сообщения надо:
- либо отправить через Outlook каждому клиенту на его e-mail
- либо распечатать для последующей отправки обычной почтой
- либо закинуть в новый файл, где каждое письмо будет отдельным листом (разделом)
В терминах Microsoft Office такая процедура называется Слиянием (Mail Merge). Поехали…
Подготовка списка клиентов в Excel
Таблица со списком клиентов для рассылки должна удовлетворять нескольким простым условиям:
- Шапка таблицы должна быть простой — одна строка с уникальными названиями столбцов (без повторений и пустых ячеек).
- В таблице не должно быть объединенных ячеек.
- В таблице не должно быть пустых строк или столбцов (отдельные пустые ячейки допускаются).
Если планируется отправка по электронной почте, то, само-собой, в таблице должен быть столбец с адресами получателей.
Поскольку Excel и Word не смогу сами определить пол клиента по имени, то имеет смысл сделать отдельный столбец с обращением (господин, госпожа и т.п.) или с родовым окончанием (-ый или -ая) для обращения «Уважаемый(ая)…» Как вариант, возможно полуавтоматическое определение пола в зависимости от окончания отчества («а» или «ч»), реализованное функцией ПРАВСИМВ (RIGHT).
В новых версиях Microsoft Excel 2007/2010 для таких таблиц очень удобно использовать инструмент Форматировать как таблицу (Format as Table) с вкладки Главная (Home). Подробнее про такие «умные таблицы» можно почитать тут.
Создаем сообщение в Word и подключаем Excel
Открываем новый пустой документ в Microsoft Word и набираем туда текст нашего сообщения, оставляя в нем пустые места для будущей вставки имени клиента и его компании.
Потом запускаем пошаговый Мастер Слияния на вкладке Рассылки (Mailings) кнопкой Начать слияние (Start Mail Merge) – Пошаговый мастер слияния (Step-by-Step Merge Wizard):
В Word 2003 и старше эта команда была доступна в меню Сервис — Письма и рассылки — Мастер слияния (Tools — Letters and Mailings — Mail Merge).
Далее следует процесс из 6 этапов (переключение между ними — с помощью кнопок Вперед (Next) и Назад (Back) в правом нижнем углу в области задач).
Этап 1. Выбор типа документа.
На этом шаге пользователь должен выбрать тип тех документов, которые он хочет получить на выходе после слияния. Наш вариант — Письма (Letters), если мы хотим на выходе отправить созданные письма на принтер или Электронное сообщение (E-mail), если хотим разослать их по почте.
Этап 2. Выбор документа
На этом шаге необходимо определить, какой документ будет являться основой (заготовкой) для всех будущих однотипных сообщений. Мы выбираем — Текущий документ (Current document).
Этап 3. Выбор получателей
На этом шаге мы подключаем список клиентов в Excel к документу Word. Выбираем Использование списка и жмем на Обзор (Browse), после чего в диалоговом окне открытия файла указываем где лежит наш файл со списком клиентов.
После выбора источника данных, Word позволяет провести фильтрацию, сортировку и ручной отбор записей при помощи окна Получатели слияния:
Этап 4. Создание письма
На этом этапе пользователь должен указать – куда именно в документ должны попасть данные из подключенного списка. Для этого необходимо установить курсор в точку вставки в письме и использовать ссылку Другие элементы — она выводит полный набор всех полей списка, из которого мы и выбираем нужное поле для вставки:
В итоге, после вставки всех полей слияния у нас должно получиться нечто похожее (вставленные поля выделены красным):
Если в исходной таблице не было специального столбца для окончания «ый»/»ая» к слову «уважаем» (как в нашем примере), но был обычный столбец «Пол» с классическими «муж» и «жен», то можно воспользоваться кнопкой Правила (Rules) на вкладке Рассылки (Mailings):
Эта кнопка открывает список правил (функций и полей), доступных для вставки в документ при создании рассылки. Для подстановки нужного окончания к слову «уважаемый/ая» выберем третий пункт IF…THEN…ELSE. В открывшемся затем окне зададим правило подстановки правильного окончания в зависимости от пола:
Этап 5. Просмотр писем
На этом этапе мы уже можем предварительно просмотреть результаты слияния, используя кнопки со стрелками. При необходимости, также, можно исключить любого получателя из списка.
Этап 6. Завершение слияния
На завершающем этапе возможны несколько вариантов:
Нажатие ссылки Печать (Print) приведет к немедленной отправке всех результатов слияния на принтер без вывода на экран.
Если необходимо сохранить созданные в результате слияния документы для дальнейшего использования или требуется внести ручную правку в некоторые из документов, то лучше использовать ссылку Изменить часть писем (Edit individual letters), которая выведет результаты слияния в отдельный файл:
Если вы на Шаге 1 выбирали опцию Электронные сообщения (E-mail), то на Шаге 6 вам предложат ввести тему для отправляемых сообщений и выбрать столбец таблицы, содержащий адреса электронной почты для рассылки. Затем все созданные сообщения будут помещены в папку Исходящие (Outbox) вашего почтового клиента Outlook.
Для проверки правильности созданных сообщений можно заранее временно отключить Outlook от сервера, чтобы письма сразу не ушли и вы могли их посмотреть и убедиться, что с ними все в порядке. Для этого в меню Microsoft Outlook можно выбрать команду Файл — Автономный режим или даже временно отключить сетевое подключение к вашему компьютеру. Письма временно «застрянут» в папке Исходящие (Outbox) и вы сможете их открыть и проверить перед отправкой.
Ссылки по теме
- Отправка книги или листа Excel по электронной почте
- Создание электронных писем с помощью функции ГИПЕРССЫЛКА (HYPERLINK)
- Инструмент для массовой рассылки сообщений (в т.ч. с вложениями) по списку из надстройки PLEX
Возникла задача организации рассылки писем по списку e-mail пользователей в Excel. В каждом письме будут содержаться некоторые данные, индивидуальные для каждого пользователя, и приложен персональный файл. В этой статье, мы рассмотрим, как использовать Outlook для автоматической рассылки писем по списку из Excel с помощью VBA макроса или PowerShell
Содержание:
- VBA макрос в Excel для рассылки писем из Outlook
- Отправить письмо из Outlook с помощью PowerShell
Важно. Оба способа отправки писем подразумевают, что на вашем компьютере установлен и настроен почтовый профиль Outlook. Именно с этого почтового ящика (и e-mail адреса) будет выполнятся рассылка.
Допустим, у нас есть Excel файл, содержащий следующие столбцы:
Email пользователя | ФИО | Время последней смены пароля | Статус учетной записи
В рамках моей задачи нужно каждому пользователю из списка отправить письмо вида:
Тема: Статус учетной записи в домене winitpro.ru
Тело письма: Уважаемый %FullUsername%
Ваша учетная запись в домене winitpro.ru — %status%
Время последней смены пароля: %pwdchange%
Совет. Если для учетных записей пользователей нужно получить значение одного из атрибутов пользователя в Active Directory, можно воспользоваться решением из статьи Функция Excel для получения данных пользователя из AD.
VBA макрос в Excel для рассылки писем из Outlook
Сначала рассмотрим небольшой макрос отправки писем на языке VBA (Visual Basic for Applications), который можно создать прямо в документе Excel.
Создайте новый макрос: вкладка Вид -> Макросы. Укажите имя макроса send_email и нажмите кнопку Создать:
В открывшемся редакторе VBA вставьте следующий код (я снабдил его всеми необходимыми комментариями). Для автоматизации отправки писем я воспользуюсь функцией CreateObject(«Outlook.Application»), позволяющей создать и использовать в скрипте объект приложения Outlook.
Sub send_email()
Dim olApp As Object
Dim olMailItm As Object
Dim iCounter As Integer
Dim Dest As Variant
Dim SDest As String
' тема письма
strSubj = "Статус учетной записи в домене winitpro.ru"
On Error GoTo dbg
' создаем новый объект типа Outlook
Set olApp = CreateObject("Outlook.Application")
For iCounter = 2 To WorksheetFunction.CountA(Columns(1))
' создаем новый элемент (письмо) в Outlook
Set olMailItm = olApp.CreateItem(0)
strBody = ""
useremail = Cells(iCounter, 1).Value
FullUsername = Cells(iCounter, 2).Value
Status = Cells(iCounter, 4).Value
pwdchange = Cells(iCounter, 3).Value
'формируем тело письма
strBody = "Уважаемый " & FullUsername & vbCrLf
strBody = strBody & "Ваша учетная запись в домене winitpro.ru " & Status & vbCrLf
strBody = strBody & "Время последней смены пароля: " & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
'добавляем вложение, формат имени файла [email protected] . Если вложение не нужно, закомментируйте следующую строку
olMailItm.Attachments.Add ("C:ps" & useremail & ".txt")
olMailItm.BodyFormat = 1
' 1 - текстовый формат письма, 2 - HTML формат
olMailItm.Body = strBody
olMailItm.Send
'следующую строку можно использовать для отладки текста письма, закомментировав предыдущую
'MsgBox strBody
Set olMailItm = Nothing
Next iCounter
Set olApp = Nothing
dbg:
'отображение ошибок, если есть
If Err.Description <> "" Then MsgBox Err.Description
End Sub
Данный Excel файл нужно сохранить с расширением xlsm (формат книги Excel с поддержкой макросов). Для запуска рассылки выберите созданную процедуру (макрос) и нажмите кнопку выполнить.
Макрос последовательно перебирает все строки на листе Excel, формирует и отправляет по одному письму на каждый Email из списка. Отправленные письма сохраняются в папку Sent Items Outlook.
Если вам нужно отправить письмо от имени другого пользователя или общего почтового ящика, нужно предоставить на него права SendAs/Sent on behalf (в случае использования Exchange) и добавить в скрипт строку (перед olMailItm.Send).
olMailItm.SentOnBehalfOfName = "[email protected]"
Отправить письмо из Outlook с помощью PowerShell
В PowerShell можно использовать командлет Send-MailMessage для отправки писем, однако он требует выполнения аутентификации на почтовом сервере перед отправкой и не поддерживает современные методы проверки подлинности, такие как в том числе OAuth и Microsoft Modern Authentication. Поэтому, если на вашем компьютер есть настроенный профиль Outlook, гораздо проще использовать его для отправки писем.
Ниже приведен пример скрипта PowerShell, который получает данные из Excel файла и использует Outlook для отправки письма для каждого пользователя:
# открыть Excel файл
$ExcelObj = New-Object -comobject Excel.Application
$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:PSuser_list.xlsx")
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("Sheet1")
# Получаем количество заполненных строк в xlsx файле
$rowcount=$ExcelWorkSheet.UsedRange.Rows.Count
# Перебираем все строки в столбце 1, начиная со второй строки (в этих ячейках указано доменное имя пользователя)
for($i=2;$i -le $rowcount;$i++){
$useremail = $ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
$FullUsername = $ExcelWorkSheet.Columns.Item(2).Rows.Item($i).Text
$Status = $ExcelWorkSheet.Columns.Item(4).Rows.Item($i).Text
$pwdchange = $ExcelWorkSheet.Columns.Item(3).Rows.Item($i).Text
# формируем тело письма
$strSubj = "Статус учетной записи в домене winitpro.ru"
$strBody = "Уважаемый " + $FullUsername
$strBody = $strBody + " `r`n Ваша учетная запись в домене winitpro.ru " + $Status
$strBody = $strBody + "`r`n Время последней смены пароля: " + $pwdchange
$strfile="C:ps" + $useremail + ".txt"
# предполагаем, что Outlook открыт, если нет нужно запустить его командой $outlook = new-object -comobject outlook.application
$outlook = [Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application")
$email = $outlook.CreateItem(0)
$email.To = $useremail
$email.Subject = $strSubj
$email.Body = $strBody
# добавить вложение (если нужно)
$email.Attachments.add($strfile)
#отправить письмо
$email.Send()
}
$ExcelWorkBook.close($true)
Данный PowerShell скрипт предполагает, что на компьютере запущен Outlook. Для каждого email адреса из XLSX файла скрипт генерирует тему и текст письма и прикрепляет файл. Затем выполняется отправка письма.
Содержание
- 0.1 Постановка задачи
- 0.2 Подготовка списка клиентов в Excel
- 0.3 Создаем сообщение в Word и подключаем Excel
- 0.4 Ссылки по теме
- 1 Применение инструмента
- 2 Что необходимо
- 3 Добавить «Email рассылки» в Excel 2016, 2013, 2010, 2007
- 4 Как работать с надстройкой:
Постановка задачи
Имеем таблицу в Microsoft Excel, в которой хранится информация о ключевых клиентах нашей компании (адреса эл.почты, имена, названия компаний и т.д.), которых мы хотим поздравить с очередным праздником.
Поздравлять будем при помощи простого, но трогательного сообщения, содержащего имя клиента и название его компании. Причем все надо сделать так, чтобы получатель (не дай бог!) не подумал, что письмо сделано автоматически, а был уверен, что письмо было кропотливо написано ради него вручную.
В конце все созданные сообщения надо:
- либо отправить через Outlook каждому клиенту на его e-mail
- либо для последующей отправки обычной почтой
- либо закинуть в новый файл, где каждое письмо будет отдельным листом (разделом)
В терминах Microsoft Office такая процедура называется Слиянием (Mail Merge). Поехали…
Подготовка списка клиентов в Excel
Таблица со списком клиентов для рассылки должна удовлетворять нескольким простым условиям:
- Шапка таблицы должна быть простой — одна строка с уникальными названиями столбцов (без повторений и пустых ячеек).
- В таблице не должно быть объединенных ячеек.
- В таблице не должно быть пустых строк или столбцов (отдельные пустые ячейки допускаются).
Если планируется отправка по электронной почте, то, само-собой, в таблице должен быть столбец с адресами получателей.
Поскольку Excel и Word не смогу сами определить пол клиента по имени, то имеет смысл сделать отдельный столбец с обращением (господин, госпожа и т.п.) или с родовым окончанием (-ый или -ая) для обращения «Уважаемый(ая)…» Как вариант, возможно полуавтоматическое определение пола в зависимости от окончания отчества («а» или «ч»), реализованное функцией ПРАВСИМВ (RIGHT).
В новых версиях Microsoft Excel 2007/2010 для таких таблиц очень удобно использовать инструмент Форматировать как таблицу (Format as Table) с вкладки Главная (Home). Подробнее про такие «умные таблицы» можно почитать тут.
Создаем сообщение в Word и подключаем Excel
Открываем новый пустой документ в Microsoft Word и набираем туда текст нашего сообщения, оставляя в нем пустые места для будущей вставки имени клиента и его компании.
Потом запускаем пошаговый Мастер Слияния на вкладке Рассылки (Mailings) кнопкой Начать слияние (Start Mail Merge) – Пошаговый мастер слияния (Step-by-Step Merge Wizard):
В Word 2003 и старше эта команда была доступна в меню Сервис — Письма и рассылки — Мастер слияния (Tools — Letters and Mailings — Mail Merge).
Далее следует процесс из 6 этапов (переключение между ними — с помощью кнопок Вперед (Next) и Назад (Back) в правом нижнем углу в области задач).
Этап 1. Выбор типа документа.
На этом шаге пользователь должен выбрать тип тех документов, которые он хочет получить на выходе после слияния. Наш вариант — Письма (Letters), если мы хотим на выходе отправить созданные письма на принтер или Электронное сообщение (E-mail), если хотим разослать их по почте.
Этап 2. Выбор документа
На этом шаге необходимо определить, какой документ будет являться основой (заготовкой) для всех будущих однотипных сообщений. Мы выбираем — Текущий документ (Current document).
Этап 3. Выбор получателей
На этом шаге мы подключаем список клиентов в Excel к документу Word. Выбираем Использование списка и жмем на Обзор (Browse), после чего в диалоговом окне открытия файла указываем где лежит наш файл со списком клиентов.
После выбора источника данных, Word позволяет провести фильтрацию, сортировку и ручной отбор записей при помощи окна Получатели слияния:
Этап 4. Создание письма
На этом этапе пользователь должен указать – куда именно в документ должны попасть данные из подключенного списка. Для этого необходимо установить курсор в точку вставки в письме и использовать ссылку Другие элементы — она выводит полный набор всех полей списка, из которого мы и выбираем нужное поле для вставки:
В итоге, после вставки всех полей слияния у нас должно получиться нечто похожее (вставленные поля выделены красным):
Если в исходной таблице не было специального столбца для окончания «ый»/»ая» к слову «уважаем» (как в нашем примере), но был обычный столбец «Пол» с классическими «муж» и «жен», то можно воспользоваться кнопкой Правила (Rules) на вкладке Рассылки (Mailings):
Эта кнопка открывает список правил (функций и полей), доступных для вставки в документ при создании рассылки. Для подстановки нужного окончания к слову «уважаемый/ая» выберем третий пункт IF…THEN…ELSE. В открывшемся затем окне зададим правило подстановки правильного окончания в зависимости от пола:
Этап 5. Просмотр писем
На этом этапе мы уже можем предварительно просмотреть результаты слияния, используя кнопки со стрелками. При необходимости, также, можно исключить любого получателя из списка.
Этап 6. Завершение слияния
На завершающем этапе возможны несколько вариантов:
Нажатие ссылки Печать (Print) приведет к немедленной отправке всех результатов слияния на принтер без вывода на экран.
Если необходимо сохранить созданные в результате слияния документы для дальнейшего использования или требуется внести ручную правку в некоторые из документов, то лучше использовать ссылку Изменить часть писем (Edit individual letters), которая выведет результаты слияния в отдельный файл:
Если вы на Шаге 1 выбирали опцию Электронные сообщения (E-mail), то на Шаге 6 вам предложат ввести тему для отправляемых сообщений и выбрать столбец таблицы, содержащий адреса электронной почты для рассылки. Затем все созданные сообщения будут помещены в папку Исходящие (Outbox) вашего почтового клиента Outlook.
Для проверки правильности созданных сообщений можно заранее временно отключить Outlook от сервера, чтобы письма сразу не ушли и вы могли их посмотреть и убедиться, что с ними все в порядке. Для этого в меню Microsoft Outlook можно выбрать команду Файл — Автономный режим или даже временно отключить сетевое подключение к вашему компьютеру. Письма временно «застрянут» в папке Исходящие (Outbox) и вы сможете их открыть и проверить перед отправкой.
Ссылки по теме
- Отправка книги или листа Excel по электронной почте
- Создание электронных писем с помощью функции ГИПЕРССЫЛКА (HYPERLINK)
- Инструмент для массовой рассылки сообщений (в т.ч. с вложениями) по списку из надстройки PLEX
Привет! Сегодня решил осветить один из тех инструментов, а именно массовую рассылку (слияние) документов. Этот инструмент относится к тем, что:
- легки в использовании
- малоизвестны
- приносят охрененную пользу
и еще один нюанс — это единственный из всех инструментов, который использует связь с Word. Даже более того, этот инструмент больше относится к Word, чем к Excel.
Итак, начинаем.
Применение инструмента
Представим ситуацию. Вы начальник отдела кадров, в котором утвержденный проект трудового договора. Каждый сотрудник, включая гендира, подписывает ежегодно один и тот же документ, который каждый раз отличается только в деталях, индивидуально присущих каждому человеку — ФИО, должность, зарплата, домашний адрес и т.д.
Или ситуация — когда надо отправить одно и то же письмо куче адресатов — новогоднее поздравление, приглашение на благотворительный концерт, уведомление — маркетологи например часто вынуждены клепать подобные письма с конвертами своим клиентам.
Как обычно делается? Либо вы вносите каждый раз перед распечаткой в установленный шаблон нужные изменения либо создаете на каждого сотрудника (адресата) отдельный документ, в котором только корректируете дату подписания.
В любом случае вы работаете с каждым адресатом. Это отнимает много времени и является рутинной процедурой, которую легко можно сократить.
Что необходимо
В первую очередь нам нужны:
- Документ-шаблон в Word’е
- Список адресатов с их характеристиками (адресами, полом, обращением…)
У меня для примера простенькое письмецо:
Серым отмечены блоки, индивидуальные для каждого адресата. Как видите, нужно подготовить обращение (Уважаемый/Уважаемая), нужные поля в родительном падеже (Иванову). Соответственно, на каждый такой блок я готовлю табличку в Excel:
Делаем слияние
Слияние — вот как называется этот инструмент. Для этого открываем наш шаблон в Word и нажимаем на вкладке «Рассылки» — «Начать слияние» — «Пошаговый мастер слияния».
Далее появится справа панель, где поэтапно надо выбирать нужный вариант.
- Выбор типа документа. Я выбрал «Письма»
- Открытие документа. Я уже открыл, поэтому «Текущий документ».
- Выбор получателей. У меня уже готовый список, поэтому «Использование списка» и Обзор. Там выбираю свой файл.
- Создание письма. Мне много блоков надо ввести, поэтому поочередно выбираю нужное место в письме и через «Другие элементы» вставляю нужный мне элемент.
- Просмотр писем. Здесь можно прокрутить ваши записи, т.е. посмотреть все документы, нажимая на соответствующие стрелочки.
- Завершение слияния. Тут есть два варианта — «Печать» — можете готовые документы, при этом выбрав только тех, кто нужен. И другой вариант «Изменить часть писем» — здесь каждый документ формируется друг за другом. Это нужно для того, чтобы внести какие-то редкие изменения, которые просто нецелесообразно втыкать в таблицу. При этом также можно выбрать какие письма вам выгрузятся в Word, а какие не нужны.
Сохраните документ. Потом при открытии вас будут спрашивать
Отвечаете «Да» и можете просматривать шаблон с текущими адресами прямо на панели, слияние делать больше не придется.
Очевидный плюс этого инструмента — никакой рутины. Подготовка документа будет сводиться лишь к открытию, выбору адресатов и распечатке (отправке).
Обычно я делаю быструю пояснялку для Youtube, но этот инструмент уже освещен в моем бесплатном часовом видеокурсе «. Все мои подписчики его получили, если же его у вас нет, можете его получить, введя в поле в правой части свои контакты и после подтверждающего письма (где надо кликнуть на ссылке) вам придет письмо со ссылкой на видеокурс. Там вы заодно познакомитесь еще с 9ю инструментами, которые приносят огромную пользу в работе всем пользователям Excel.
«Глаза боятся, а руки делают»
P.S. Понравилась статья? Подпишитесь на рассылку в правой части страницы (Бесплатный курс «Топ-10 инструментов Excel») и будьте в курсе новых событий.
Сегодня массовые рассылки почти по умолчанию предполагают персонализацию. Это касается любых рассылок, от корпоративных новостей до массовых маркетинговых кампаний. И любого способа отправки, от стандартного слияния почты в MS Word до специализированных SendGrid или MailChimp. Зачастую единственный общий знаменатель — это список получателей в Excel. Так возможно ли отправлять массовые персонализированные рассылки без помощи Word или других программ?
Надстройка XLTools «Email рассылки» позволяет создать слияние вашей почты со списком получателей в Excel и отправлять массовые персонализированные рассылки напрямую из интерфейса Excel:
- Не нужно переключаться между окнами, импортировать данные, запускать Word или другие программы
- Установка связи с любым вашим email через SMTP — Gmail, Yandex, Outlook, т.д.
- Вложение файлов любого формата с вашего компьютера
- Вложение одинаковых файлов всем или разных файлов разным получателям
- TXT или HTML шаблоны сообщения с любыми персонализированными полями
Добавить «Email рассылки» в Excel 2016, 2013, 2010, 2007
Подходит для: Microsoft Excel 2016 – 2007, desktop Office 365 (32-бит и 64-бит).
Скачать надстройку XLTools
Как работать с надстройкой:
- Кому будет полезна надстройка XLTools «Email рассылки»
- Как работает слияние почты в Excel
- Как связать «Email рассылки» в Excel с вашим почтовым ящиком
- Как создать список получателей в Excel
- Как вложить файлы в сообщения email рассылки
- Как создать шаблон email сообщения и отправить персонализированную рассылку
- Как выглядит сообщение, отправленное «Email рассылкой», в почтовом ящике получателя
- Какой лимит отправки сообщений в XLTools «Email рассылки»
Кому будет полезна надстройка XLTools «Email рассылки»
Предположим, ваша компания планирует провести мероприятие, и вам нужно отправить email приглашения 50-60 партнёрам. Чтобы сообщения не выглядели как спам, вам нужно, чтобы каждому партнёру пришло персонализированное письмо с обращением по имени. Кроме того, вы не хотите случайно раскрыть контакты всех партнёров в строке «КОМУ» — так что каждое письмо должно быть адресовано только одному партнёру. Надстройка XLTools «Email рассылки» поможет выполнить рассылку именно так, при этом сэкономив вам время.
- Используйте эту надстройку, если вы привыкли хранить списки контактов в Excel. Все операции выполняются напрямую в интерфейсе Excel — без необходимости переключаться между email, Excel, Word и файлами вложения.
- Используйте «Email рассылки» для отправки массовых электронных сообщений с любого вашего email аккаунта: Outlook, Gmail, Yandex, Интернет провайдеры, провайдеры веб-хостинга, сервисы SMTP ретрансляции как SendGrid или MailChimp, т.д.
- «Email рассылки» для рабочих рассылок: отправляйте приглашения партнёрам, напоминания об оплате счета клиентам, презентации коллегам, отчёты об успеваемости студентам, т.д.
- «Email рассылки» для личных рассылок: отправляйте план совместной поездки друзьям и семье, повестку собрания членам родительского комитета, т.д.
- «Email рассылки» для маркетинговых рассылок: отправляйте новостную рассылку подписчикам, специальные предложения клиентам, промо-акции читателям блога, т.д.
Обратите внимание, что надстройка XLTools «Email рассылки» не является сервисом email-рассылок — это надстройка Excel для повышения продуктивности работы. И хотя XLTools не устанавливает лимит отправки, ваш почтовый домен его наверняка устанавливает лимит, как и штрафы за его нарушение.
Как работает слияние почты в Excel
Надстройка XLTools «Email рассылки» НЕ является сервисом email-рассылок. Это надстройка Excel для повышения продуктивности работы, которая упрощает массовую отправку персонализированных рассылок, с быстрой настройкой параметров:
- Свяжите «Email рассылки» со своим email аккаунтом.
- Создайте список получателей в таблице Excel.
- Создайте шаблон email сообщения, добавьте метки для вставки персонализированных данных.
- Нажмите «Отправить» — и отправьте массовую персонализированную рассылку, не покидая интерфейса Excel!
Надстройка «Email рассылки» никак не может повлиять на спам-фильтры какой-либо электронной почты. В конечном итоге, вы не можете предугадать, отправит (или не отправит) почтовый ящик получателя ваше письмо в спам. Каждый почтовый домен устанавливает собственные алгоритмы фильтрации спама.
Как связать «Email рассылки» в Excel с вашим почтовым ящиком
Свяжите «Email рассылки» в Excel с вашим почтовым ящиком посредством SMTP (Simple Mail Transfer Protocol — простой протокол передачи электронной почты). Это работает практически с любым email аккаунтом: личной или рабочей почтой на Outlook, Gmail, Yandex, Интернет провайдеры, провайдеры веб-хостинга, сервисы SMTP ретрансляции, т.д.
- Нажмите кнопку «Настройки» на вкладке XLTools > Откройте вкладку «Email рассылки (SMTP)».
- «Email отправителя» – адрес вашей электронной почты, с которой будет осуществлена рассылка.
Напр., your_name@gmail.com. - «SMPT Сервер» и «Порт» заполнятся автоматически; в противном случае обратитесь к вашему системному администратору.
- «Имя отправителя» – введите свое имя, название компании или любое другое, как оно будет отображаться в почтовом ящике получателей.
Напр., «Семинары XYZ». - «Имя пользователя» и «Пароль» – привяжите свою электронную почту.
- При необходимости отметьте флажком «Использовать SSL/TLS». Криптографические протоколы SSL (Secure Sockets Layer, уровень защищённых сокетов) и TLS (Transport Layer Security, безопасность транспортного уровня) создают безопасную связь между вашим email сервером и вашим компьютером.
Для проверки связи с этой электронной почтой нажмите кнопку «Отправить тестовый Email…». Тестовое сообщение будет сразу же отправлено.
Как создать список получателей в Excel
Таблица Excel — это удобный способ хранения контактов. Каждая строка содержит сведения об одном получателе. Каждый столбец представляет собой персонализированное поле, напр. Email, Имя, Отчество, т.д. Эта Excel таблица также служит источником данных для «Email рассылок». Данные этих персонализированных полей позднее заместят соответствующие метки в шаблоне email сообщения.
Чтобы создать создание список получателей с нуля:
- Нажмите кнопку «Email рассылок» «Создать список рассылки» на панели XLTools.
- Отметьте флажками нужные поля, напр., Имя, Фамилия.
Внимание: столбец «Email» добавляется по умолчанию. - Отметьте флажком «Вложение», если вы хотите приложить файлы.
- Укажите, поместить ли список рассылки на новый или на существующий лист.
- Нажмите «Создать» > Готово.
- Заполните таблицу своими данными. При необходимости вручную добавьте столбцы для других персонализированных полей, напр. «РегНомер». Число столбцов не ограничено.
Чтобы использовать свой существующий список контактов:
- Откройте ваш список контактов в Excel.
- Отформатируйте список как таблицу:
Выделите диапазон > На вкладке «Главная» нажмите «Форматировать как таблицу» > Выберете любой подходящий стиль таблицы. - Присвойте заголовки столбцам, напр., «Email», «Имя», «Фамилия», «РегНомер», «Вложение», т.д.
Как вложить файлы в сообщения email рассылки
Вы можете вложить 1 или 2 файла каждому получателю вашей рассылки. Вы можете вложить файл любого формата: PDF, DOCX, PPTX, XLSX, JPEG, т.д. Учтите ограничения вашего почтового домена на размер вложений. Обычно, размер сообщения с вложениями не может превышать 10-20 MB.
- Откройте свой список получателей.
- Добавьте столбец для указания файловых вложений:
- Чтобы приложить один файл: добавьте один столбец, напр. «Вложение 1».
- Чтобы приложить два файла: добавьте два столбца, напр. «Вложение 1» и «Вложение 2».
- Укажите путь к файлу на вашем компьютере, напр., C:DocumentsПрограмма-Семинара.pdf.
- Чтобы отправить один и тот же файл всем получателям: скопируйте путь к файлу во все ячейки столбца вложений.
- Чтобы отправить разные файлы разным получателям: укажите путь к файлам для каждого получателя индивидуально.
- Чтобы не отправлять вложений некоторым получателям: оставьте соответствующие ячейки пустыми.
Указанные файлы будут прикреплены к письмам в вашей рассылки. Далее перейдите к созданию шаблона email сообщения.
Как создать шаблон email сообщения и отправить персонализированную рассылку
Email шаблон — это некая заготовка, обезличенное email сообщение. Использование в шаблоне общих меток даёт возможность автоматически персонализировать каждое письмо: надстройка «Email рассылки» возьмёт данные из вашего списка контактов в Excel и заменит эти общие метки конкретными данными для каждого получателя. К примеру, она заменит общую метку на имя получателя «Александр».
- Нажмите кнопку «Отправить рассылку» на вкладке XLTools > Откроется диалоговое окно.
- Укажите диапазон списка рассылки, включая заголовки.
- Подтвердите столбец, который содержит email адреса получателей:
Напр., выберите поле «Email». - Подтвердите столбцы, которые содержат пути к файлам вложений:
Напр., выберите поля «Вложение 1» и «Вложение 2». - Напишите «Тему сообщения» так, как она должна отображаться в почтовом ящике получателя.
Напр., напечатайте «Подтверждение участия в семинаре». - Введите текст сообщения в редакторе:
- Напечатайте текст сообщения. При необходимости используйте инструменты форматирования текста: шрифт, цвет, выравнивание, вставить ссылку, вставить изображение, т.д.
- Или, нажмите кнопку «Загрузить HTML из файла», чтобы использовать свой существующий HTML шаблон.
- Выбирайте метки из списка возможных и вставляйте их в квадратных скобках:
Напр., , .
Внимание: после нажатия кнопки «Отправить» и до окончания отправки будет невозможно внести изменения в список получателей или в шаблон сообщения. Рекомендуем сначала протестировать рассылку. Напр., создайте тестовый список получателей, указав в нём только свои email адреса — и отправьте email себе. Проверьте, чтобы метки корректно замещались персонализированными данными, чтобы в тексте и теме письма не было ошибок и опечаток. Убедитесь, что ваше сообщение выглядит профессионально.
Как только вы нажмёте «Отправить», XLTools «Email рассылки» сразу же начнёт отправку массовой персонализированной рассылки:
- Email сообщения отправляются одно за другим, напрямую из интерфейса Excel.
- Статус отправки (либо Sent — отправлено, либо указание ошибки — error) появится в последнем столбце вашего списка рассылки.
- Отправленные сообщения вы сможете найти в «Исходящих» или «Отправленных» письмах в своём почтовом ящике.
- Внимание: статус доставки сообщения не отслеживается.
Как выглядит сообщение, отправленное «Email рассылкой», в почтовом ящике получателя
- Каждый человек из вашего Excel списка рассылки получает персонализированное email сообщение.
- Каждое сообщение отправляется индивидуально — получатель не видит email адреса других получателей.
- Все метки корректно замещаются данными для каждого конкретного получателя.
- Указанные файлы автоматически прикрепляются к сообщению.
Какой лимит отправки сообщений в XLTools «Email рассылки»
Надстройка XLTools «Email рассылки» не является сервисом email-рассылок и не ограничивает число отправляемых email сообщений. Массовая рассылка отправляется с вашего email аккаунта.
Внимание: у каждого почтового домена (поставщика услуг электронной связи) существует своя политика о квотах исходящих сообщений, размера вложений и размера почтового ящика. Превышение лимита отправки грозит блокировкой, занесением в чёрный список или другими санкциями. Свяжитесь с вашим поставщиком и уточните свой лимит на отправку электронных сообщений посредством SMTP.
- Бесплатные email аккаунты предназначены для личной переписки и не созданы для массовых рассылок. Напр., лимит на Gmail и Yandex составляет около 50-100 писем/день.
- Рабочая почта или собственные SMTP-серверы допускают гораздо большее число отправленных сообщений.
- Специализированные сервисы email рассылок, напр. SendGrid или MailChimp, предлагают тысячи сообщений в месяц в зависимости от типа подписки.
Появились вопросы или предложения? Оставьте комментарий ниже.
Хитрости »
1 Май 2011 386186 просмотров
Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов. Не надо отсылать письма на указанные в статье e-mail адреса- это все приходит мне на почту. Помимо этого Вы сами не сможете понять работает или нет, т.к. письма придут мне, а не Вам.
Спасибо за понимание
P.S. А если написанное выше Вы все же проигнорировали и отправили письмо на мои адреса электронной почты — это означает, что Вы соглашаетесь с тем, что вся информация внутри письма, включая вложения, может быть использована мной без ограничений в личных целях.
- Отправка через меню Excel
- Простая отправка книги через VBA без Outlook
- Отправка писем через VBA при помощи Outlook(с вложениями)
- Отправить письма через Outlook с картинкой в теле письма
- Массовая рассылка писем по адресам при помощи Outlook
- Отправка сообщения без использования Outlook — используем CDO
Отправить письмо из Excel можно несколькими способами, в том числе и через написание кода в VBA.
Отправка через меню Excel
Отправку без кода осуществить достаточно просто:
- Excel 2003: Файл(File) —Отправить(Send To) —Сообщение(Mail Recipient)
и выбрать способ отправки:- Сообщение(Mail Recipient) — создается сообщение в программе по умолчанию для отправки электронных писем
- Сообщение (для ознакомления) (Mail Recipient for Review) — вполне интересный вариант. Перед отправкой для книги включается отслеживание изменений(Сервис(Tools)—Исправления(Track changes)). Можно воспользоваться этим методом, чтобы отправить получателю для внесения им изменений, а после отследить их(Сервис —Исправления —Выделить исправления(Highlight changes))
- Сообщение (как вложение)(Mail Recipient as attachment) — создается сообщение в программе по умолчанию для отправки электронных писем, в которое вложением вкладывается активная книга целиком
- По маршруту(Routing Recipient) — практически тоже самое, что и Сообщение (для ознакомления) (Mail Recipient for Review) с той разницей, что письмо с вложением пересылается как эстафета от одного получателя к другому. После этого так же можно отследить изменения, внесенные каждым пользователем
- Папка Exchange(Exchange folder) — активная книга автоматически сохраняется в заданную папку общего сервера Microsoft Exchange. Доступ к этой книге будет открыт всем участникам рабочей группы
- Факс пользователю службы факсов интернета(Fax) — отправляет содержимое книги по факсу указанным получателям. Для использования данной возможности должна быть установлена служба факсов
- Excel 2007: Кнопка Офис —Отправить(Send) —Сообщение(E-mail)
- Excel 2010: Файл(File) —Сохранить и отправить(Save & Send) —Отправить(Send Using E-mail)
- Как вложение(Send as attachment) — будет автоматически запущена почтовая программа по умолчанию и создано новое письмо, в которое уже будет вложен файл книги, из которой была вызвана команда
- Как ссылку(Send link) — доступно, только если файл находится на сетевом ресурсе. После нажатия будет создано новое письмо в почтовой программе по умолчанию, в тело которого будет вставлена ссылка на книгу
- Как PDF(Send as PDF) — файл будет автоматически сохранен в формате PDF, далее будет создано новое письмо в почтовой программе по умолчанию и файл PDF будет вставлен в письмо
- Как XPS(Send as XPS) — файл будет автоматически сохранен в формате PDF, далее будет создано новое письмо в почтовой программе по умолчанию и файл PDF будет вставлен в письмо
- Отправить как факс через интернет(Send as internet fax) — если у вас на ПК установлена служба работы с факсами и есть возможность отправлять и получать факсы на ПК — то данная команда отправит данные активного листа файла как факс
Далее выбирается способ отправки:
Простая отправка книги через VBA без Outlook
Описанные выше действия можно выполнить так же кодом(так же будет использоваться программа, установленная по умолчанию для отправки писем):
Sub SendMailStandart() ActiveWorkbook.SendMail "mail1@excel-vba.ru", "Тема письма" End Sub
Также можно указать несколько получателей:
Sub SendMailStandart_MassRecipients() ActiveWorkbook.SendMail Array("mail1@excel-vba.ru", "mail2@excel-vba.ru"), "Тема письма" End Sub
Внутри скобок Array можно в кавычках через запятую указать достаточное количество получателей.
Данный метод универсален, но работает только с активным файлом. Нельзя выбрать файл с диска и отправить как вложение. Кроме того, нельзя отправить более одного файла разом и указать текст письма.
Поэтому очень часто на форумах возникает вопрос как отправить письмо из Excel кодом с указанием темы, текста и вложения.
Есть несколько вариантов:
Отправить письмо через Outlook кодом VBA
Option Explicit Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If 'раскомментировать строку, если в Outlook несколько учетных записей и нужно подключиться к конкретной(только если Outlook закрыть) ' [параметры]: Session.Logon "имя профиля","пароль",[показывать окно выбора профиля], [запускать в новой сессии] 'objOutlookApp.Session.Logon "profile","1234",False, True Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "AddressTo@mail.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Автоотправка" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Привет от Excel-VBA" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:TempКнига1.xls" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) 'добавляем вложение, если файл по указанному пути существует(dir проверяет это) If sAttachment <> "" Then If Dir(sAttachment, 16) <> "" Then .Attachments.Add sAttachment 'просто вложение 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName End If End If .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub
Этот код отправляет одно письмо и одно вложение за раз. Но если несколько раз вызвать метод .Attachments.Add, то можно добавить еще файлы:
.Attachments.Add "C:TempКнига1.xlsx" .Attachments.Add "C:TempКнига2.xlsx" .Attachments.Add "C:DocumentsReport.rar"
Строка:
objOutlookApp.Session.Logon "user","1234",False, True
имеет особое значение. По сути она нужна только в тех случаях, когда в Outlook настроено несколько профилей(не путать с учетными записями) и запускать нужно от конкретного. Если профиль только один или не указан, то Outlook запускается с профилем по умолчанию. Для этого строку нужно записать без параметров(так же можно записать эту строку, если Outlook при попытке создания письма выдает ошибку профиля):
objOutlookApp.Session.Logon
Важно помнить: пути для файлов в качестве вложений должны содержать полный путь до файла, включая его имя и расширение: C:DocumentsReport.rar. При указании только имени Report.rar или пути без расширения (C:DocumentsReport) ошибки не будет, но вложения не будут помещены в сообщения и адресату отправится письмо без вложений.
Этот код создает сообщение, но есть маленький нюанс — если в Outlook настроено добавление подписей в новые сообщения — то созданные кодом VBA письма игнорирует эту настройку(особенность Outlook, так назовем). Поэтому, если необходимо отправлять письма с подписью, то ознакомьтесь со статьей: Вставить в письмо подпись из Outlook через VBA
В этой же статье можно посмотреть пример составления письма с форматированным текстом.
Отправить письма через Outlook с картинкой в теле письма
Sub Send_Mail_With_Picture() Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String, sPicture As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If 'objOutlookApp.Session.Logon "user","1234",False, True Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "AddressTo@mail.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Автоотправка" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Привет от Excel-VBA" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:TempКнига1.xls" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) sPicture = "C:ДокументыИзображенияExcel_vba_ru.png" 'если надо вставить в письмо картинку 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения ' .Body = sBody 'текст сообщения без форматирования .HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) 'чтобы картинка была видна внутри сообщения - надо её сначала добавить как вложение 'если картинка по указанному пути существует(dir проверяет это) If Dir(sPicture, 16) <> "" Then If Dir(sPicture, 16) <> "" Then .Attachments.Add sPicture 'теперь вставляем код картинки .HTMLBody = .HTMLBody & "<p>Картинка в письме</p>" & "<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & ">" ' & " height=240 width=180>" '" height=240 width=180>" - если нужны размеры картинки End If End If 'добавляем вложение, если файл по указанному пути существует(dir проверяет это) If sAttachment <> "" Then If Dir(sAttachment, 16) <> "" Then .Attachments.Add sAttachment 'просто вложение End If End If .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub
Этот код отправляет одно письмо и вставляет одну картинку. За это отвечает строка
"<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & ">"
Если картинку надо вложить с заранее указанными размерами, то строка будет выглядеть так:
"<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & " height=240 width=180>" 'height - высота 'width - ширина
Если надо добавить несколько картинок, то метод .Attachments.Add sPicture надо будет вызвать столько раз, сколько картинок(для каждого свой путь к картинке).
Важно помнить: пути для картинок должны содержать полный путь до файла, включая его имя и расширение: C:ДокументыИзображенияExcel_vba_ru.png. При указании только имени Excel_vba_ru.png или пути без расширения (C:ДокументыИзображенияExcel_vba_ru) ошибки не будет, но картинка не будет вставлена, а вместо неё скорее всего будет текст «Ошибка загрузки картинки!» или пустой квадрат вместо реальной картинки.
Массовая рассылка писем по адресам
Так же можно сделать нечто вроде рассылки, организовав цикл по ячейкам. Предположим, что в столбце А записаны адреса, в столбце В тема, в столбце С текст сообщения, в столбце D путь к вложениям:
Тогда можно применить следующий код:
Sub Send_Mail_Mass() Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Dim lr As Long, lLastR As Long Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If 'произошла ошибка создания объекта - выход If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub 'objOutlookApp.Session.Logon "user","1234",False, True lLastR = Cells(Rows.Count, 1).End(xlUp).Row 'цикл от второй строки(начало данных с адресами) до последней ячейки таблицы For lr = 2 To lLastR Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'создаем сообщение With objMail .to = Cells(lr, 1).Value 'адрес получателя .Subject = Cells(lr, 2).Value 'тема сообщения .Body = Cells(lr, 3).Value 'текст сообщения 'вложение(если ячейка не пустая и путь к файлу указан правильно) If Cells(lr, 4).Value <> "" Then If Dir(Cells(lr, 4).Value, 16) <> "" Then .Attachments.Add Cells(lr, 4).Value End If End If .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Next lr Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub
Скачать пример массовой рассылки:
Массовая рассылка писем через Outlook.xls (60,0 KiB, 6 984 скачиваний)
При использовании этих кодов есть один недостаток: очень часто при программной отправке писем Outlook выдает окно с запросом подтверждения отправки. Сообщение может быть трех видов:
- Программа пытается получить доступ к адресам электронной почты, хранящимся в Outlook. Если вы этого не ожидаете, нажмите кнопку «Запретить» и проверьте наличие последних обновлений для антивирусной программы.
- Программа пытается отправить сообщение от вашего имени. Если вы этого не ожидаете, нажмите кнопку «Запретить» и проверьте наличие последних обновлений для антивирусной программы.
- Программа пытается выполнить действие, которое может привести к отправке сообщения от вашего имени. Если вы этого не ожидаете, нажмите кнопку «Запретить» и проверьте наличие последних обновлений для антивирусной программы
Чтобы при программной отправке данных сообщений не появлялось, в версиях Outlook, начиная с 2007 можно отключить его настройками безопасности:
- Outlook 2007: Меню—Параметры—Центр управления безопасностью—Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)
- Outlook 2010 и выше: Файл—Параметры—Центр управления безопасностью—Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)
ВАЖНО: Если компьютер управляется администратором Microsoft Exchange или Microsoft Windows Active Directory Domain Services и администратором в качестве параметров по умолчанию установлен запрет на внесение изменений в параметры безопасности пользователями, возможность изменения данных настроек безопасности программного доступа будет недоступна.
Важно: сам код рассылки не имеет никаких ограничений по числу отправляемых сообщений. Но различные почтовые серверы могут устанавливать свои лимиты. Например, Gmail и Yandex могут заблокировать email, с которого ведется рассылка, если общее количество отправленных сообщений превышает 100 штук в день. Поэтому производить важные массовые рассылки рекомендуется с собственного SMTP-сервера.
Но так же при отправке файлов и писем часто необходимо не привязываться к конкретной почтовой программе. Ведь далеко не все ставят Outlook. Многие используют иные почтовые программы, например TheBat.
Отправка сообщения без использования Outlook — используем CDO
Option Explicit Sub Send_Mail() Const CDO_Cnf = "http://schemas.microsoft.com/cdo/configuration/" Dim oCDOCnf As Object, oCDOMsg As Object Dim SMTPserver As String, sUsername As String, sPass As String, sMsg As String Dim sTo As String, sFrom As String, sSubject As String, sBody As String, sAttachment As String On Error Resume Next 'sFrom – как правило совпадает с sUsername SMTPserver = "smtp.yandex.ru" ' SMTPServer: для Mail.ru "smtp.mail.ru"; для Яндекса "smtp.yandex.ru"; для Рамблера "mail.rambler.ru" sUsername = "YourMail@mail.ru" ' Учетная запись на сервере sPass = "1234" ' Пароль к почтовому аккаунту If Len(SMTPserver) = 0 Then MsgBox "Не указан SMTP сервер", vbInformation, "www.Excel-VBA.ru": Exit Sub If Len(sUsername) = 0 Then MsgBox "Не указана учетная запись", vbInformation, "www.Excel-VBA.ru": Exit Sub If Len(sPass) = 0 Then MsgBox "Не указан пароль", vbInformation, "www.Excel-VBA.ru": Exit Sub sTo = "AddressTo@mail.ru" 'Кому sFrom = "YourMail@yandex.ru" 'От кого sSubject = "Автоотправка" 'Тема письма sBody = "Привет от Excel-VBA" 'Текст письма sAttachment = "C:/Temp/Книга1.xls" 'Вложение(полный путь к файлу) 'Назначаем конфигурацию CDO Set oCDOCnf = CreateObject("CDO.Configuration") With oCDOCnf.Fields .Item(CDO_Cnf & "sendusing") = 2 .Item(CDO_Cnf & "smtpauthenticate") = 1 .Item(CDO_Cnf & "smtpserver") = SMTPserver 'если необходимо указать SSL '.Item(CDO_Cnf & "smtpserverport") = 465 'для Яндекса и Gmail 465 '.Item(CDO_Cnf & "smtpusessl") = True '===================================== .Item(CDO_Cnf & "sendusername") = sUsername .Item(CDO_Cnf & "sendpassword") = sPass .Update End With 'Создаем сообщение Set oCDOMsg = CreateObject("CDO.Message") With oCDOMsg Set .Configuration = oCDOCnf .BodyPart.Charset = "koi8-r" .From = sFrom .To = sTo .Subject = sSubject .TextBody = sBody 'Проверка наличия файла по указанному пути If Len(sAttachment) > 0 Then If Dir(sAttachment, 16) <> "" Then .AddAttachment sAttachment End If End If .Send End With Select Case Err.Number Case -2147220973: sMsg = "Нет доступа к Интернет" Case -2147220975: sMsg = "Отказ сервера SMTP" Case 0: sMsg = "Письмо отправлено" Case Else: sMsg = "Ошибка номер: " & Err.Number & vbNewline & "Описание ошибки: " & Err.Description End Select MsgBox sMsg, vbInformation, "www.Excel-VBA.ru" Set oCDOMsg = Nothing: Set oCDOCnf = Nothing End Sub
Данный код отправляет письмо, используя объект CDO(Collaboration Data Objects — присутствует во всех версиях Windows) и от имени Вашей учетной записи(либо Яндекс, либо Мэйл, либо Рамблер либо др.).
- SMTPserver — Каждый из приведенных выше сервисов имеет свой сервер для отправки сообщений(его можно посмотреть на сайте сервиса). В комментариях к коду я написал три самых распространенных, но если Вы используете какой-то другой, то просто посмотрите на его сайте настройки для Outlook и отыщите тот параметр, который отвечает за SMTPserver.
- sUsername — это Ваш логин для входа в почтовый сервис. Думаю тут все понятно. Единственный момент — обязательно указывать e-mail именно в полном виде — YourMail@mail.ru, даже если для входа на сервис через браузер Вы используете только первую часть записи(YourMail). Если необходимо подставить в качестве отправителя псевдоним(чтобы получатель видел не просто адрес, а ассоциированное имя учетной записи), то указывать надо именно в формате псевдонима:
sFrom = "Excel-vba <YourMail@yandex.ru>"
Excel-vba — и есть псевдоним. А сам адрес должен указываться между знаками <>
- sPass — пароль доступа к Вашей учетной записи, который Вы используете для входа в почту.
Это основные моменты. Поля Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) думаю не нуждаются в расшифровке.
Так же стоит учесть пару важных моментов: если на почтовом сервере используется шифрование, то необходимо раскомментировать(убрать знак апострофа) эти строки:
.Item(CDO_Cnf & "smtpserverport") = 465 .Item(CDO_Cnf & "smtpusessl")
Иначе вместо отправки письма получим ошибку «Отказ сервера SMTP». Серверы Яндекс и Gmail требуют шифрования, а значит для них указанные выше строки должны быть активированы(т.е. раскомментированы). Номер порта указывается в описании настроек сервера и для каждого сервера может быть своим, поэтому если с указанием приведенного в коде порта(«smtpserverport») письмо не отправляется — необходимо зайти в настройки почтового сервера и убедиться в правильности указания номера порта.
Чтобы использовать данный код вы можете либо просто скопировать его прямо со страницы, либо скачать файл. В файле программа немного упрощена к использованию — в ячейки листа вам необходимо будет внести поля: Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) и выбрать SMTPserver. SMTPserver выбирается из выпадающего списка. Сам список является динамическим и расположен на листе «Settinngs«. Там же расположены поля Учетной записи и Пароль, которые автоматически подставляются в необходимые поля на листе «Отправка«. Т.к. список динамический Вы можете просто добавлять к уже имеющимся новые сервисы и потом просто выбирать их из списка. Так же в файле есть еще одна возможность — выбрать файл. Для этого надо просто нажать на кнопку и выбрать файл.
Скачать пример:
Массовая рассылка писем через CDO — без Outlook.xls (64,0 KiB, 7 544 скачиваний)
Ввиду все более участившихся вопросов о том, как добавить к тексту письма картинку именно через CDO — описываю как это можно сделать. Я приведу лишь самый главный кусок кода — создание непосредственно сообщения. Весь остальной код остается таким же, как приведен выше.
With oCDOMsg Set .Configuration = oCDOCnf .From = sFrom .BodyPart.Charset = "windows-1251" .To = sTo .Subject = sSubject Set objbp = oCDOMsg.AddRelatedBodyPart("C:ДокументыИзображения11.jpg", "11.jpg", 1) objbp.Fields.Item("urn:schemas:mailheader:Content-ID") = "<11.jpg>" objbp.Fields.Update If Len(sAttachment) > 0 Then If Dir(sAttachment, 16) <> "" Then .AddAttachment sAttachment End If End If 'для вложения картинки письмо лучше формировать в формате HTML .HTMLBody = "<img src=""11.jpg""><br />" & sBody .Send End With
Самый главный момент:
AddRelatedBodyPart
-
C:ДокументыИзображения11.jpg — указывается полный путь к файлу картинки на компьютере, включая расширение файла.
11.jpg — указывается имя картинки с расширением. Это имя будет использовано внутри письма и именно его необходимо будет указать дальше в «urn:schemas:mailheader:Content-ID». И указывать обязательно в треугольных скобках: «<11.jpg>»
внутри же самого письма в том месте, где должна отображаться картинки надо записать:
в приведенном выше коде картинка вставляется в самом начале письма и после неё так же добавляется перенос на новую строку при помощи тэга
Также см.:
Отправка листа/книги по почте
Вставить в письмо подпись из Outlook через VBA
Вставить в письмо Outlook таблицу Excel с форматированием
Сохранить вложения из Outlook в указанную папку
Как отправить письмо от другой учетной записи Outlook
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
- Информация о материале
- Категория: Макросы Excel
-
Опубликовано: 24 апреля 2013
Макрос VBA для отправки почтовых сообщений может быть полезен пользователям, адресные книги которых ведутся в рабочих книгах Excel, а также тем, кто занимается e-mail маркетингом. Ниже приведен программный код макроса, отправляющего электронное письмо через почтовый клиент MS Outlook.
Перед запуском макроса необходимо прописать существующие адреса электронной почты для полей «Кому» и «Копия» и указать путь к существующему файлу, который будет приложением к письму (либо закомментировать строку).
Макрос для отправки электронного письма
Sub SendMail() Dim objOL As Object Dim objMail As Object Set objOL = CreateObject("Outlook.Application") Set objMail = objOL.CreateItem(0) With objMail .To = "здесь указывается адрес получателя письма" .CC = "здесь указывается адрес получателя копии" .Body = "Текст письма" 'указывается текст письма .Subject = "Тема письма" 'указывается тема письма .Attachments.Add "C:outtest.txt" 'указывается полный путь к файлу .Send End With Set objMail = Nothing Set objOL = Nothing End Sub
Этот же макрос будет работать и при отправке письма из Word, а вот аналогичный макрос для MS Outlook.
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом, нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Надстройка для рассылки электронной почты
Если добавить к приведенному выше коду цикл, а значения, заключенные в кавычки, заменить на значения, содержащиеся в ячейках рабочей книги Excel, создать пользовательскую форму, через которую пользователем будут задаваться необходимые диапазоны, то получится инструмент для рассылки писем электронной почты прямо из Excel.
надстройка для рассылки электронных писем из Excel через Outlook