Хитрости »
Основные понятия (22)Здесь собраны статьи, в которых разъясняются базовые понятия работы в Excel и VBA, а так же проблемы, с которыми сталкивается большинство начинающих
Сводные таблицы и анализ данных (5) Раздел поможет изучить сводные таблицы и научиться их использовать "на полную"
Графики и диаграммы (4) Раздел поможет научиться создавать диаграммы и графики в Excel, в том числе нестандартные
Работа с VB проектом (10) С помощью статей раздела вы научитесь создавать процедуры программно и выполнять различные операции с объектами самого VBA
Power BI и Power Query (5) Здесь собраны статьи, раскрывающие различные возможности мощнейшего инструмента для визуализаций бизнесс-процессов Power BI и надстройки для Excel Power Query
Условное форматирование (5) Этот раздел поможет поближе познакомиться с Условным форматированием на примерах различных ситуаций
Списки и диапазоны (5) Статьи, посвященные работе не только с выпадающими списками, но и с диапазонами и хитростями их применения в рабочих файлах
Макросы(VBA процедуры) (59) Статьи раздела направлены на изучение VBA с детальным разбором кодов. Множество статей с примерами кодов под всевозможные ситуации с комментариями и пояснениями
Разное (34) Собраны статьи, которые не подходят ни под одну из представленных выше категорий или входят сразу в несколько. Но эти статье не менее полезные!

Как отправить письмо из Excel?

 

Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов. Не надо отсылать письма на указанные в статье e-mail адреса- это все приходит мне на почту. Помимо этого Вы сами не сможете понять работает или нет, т.к. письма придут мне, а не Вам.
Спасибо за понимание

Отправить письмо из 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
Это можно выполнить так же кодом:

Также можно указать несколько получателей:

Внутри скобок Array можно в кавычках через запятую указать достаточное количество получателей.
Данный метод универсален, но работает только с активным файлом. Нельзя выбрать файл с диска и отправить как вложение. Кроме того, нельзя отправить более одного файла разом и указать текст письма.
Поэтому очень часто на форумах возникает вопрос как отправить письмо из Excel кодом с указанием темы, текста и вложения.
Есть несколько вариантов:



Отправить письмо через Outlook кодом VBA

Этот код отправляет одно письмо и одно вложение за раз. Но если несколько раз вызвать метод .Attachments.Add, то можно добавить еще файлы:

Важно помнить: пути для файлов в качестве вложений должны содержать полный путь до файла, включая его имя и расширение: C:\Documents\Report.rar. При указании только имени Report.rar или пути без расширения (C:\Documents\Report) ошибки не будет, но вложения не будут помещены в сообщения и адресату отправится письмо без вложений.

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


 

Массовая рассылка писем по адресам
Так же можно сделать нечто вроде рассылки, организовав цикл по ячейкам. Предположим, что в столбце А записаны адреса, в столбце В тема, в столбце С текст сообщения, в столбце D путь к вложениям:
Таблица адресов
Тогда можно применить следующий код:

Скачать пример массовой рассылки:

  Tips_Macro_SendMail_Mass.xls (53,5 KiB, 1 396 скачиваний)

При использовании этих кодов есть один недостаток: очень часто при программной отправке писем Outlook выдает окно с запросом подтверждения отправки. Сообщение может быть трех видов:

  • Программа пытается получить доступ к адресам электронной почты, хранящимся в Outlook. Если вы этого не ожидаете, нажмите кнопку "Запретить" и проверьте наличие последних обновлений для антивирусной программы.
  • Программа пытается отправить сообщение от вашего имени. Если вы этого не ожидаете, нажмите кнопку "Запретить" и проверьте наличие последних обновлений для антивирусной программы.
  • Программа пытается выполнить действие, которое может привести к отправке сообщения от вашего имени. Если вы этого не ожидаете, нажмите кнопку "Запретить" и проверьте наличие последних обновлений для антивирусной программы

Чтобы при программной отправке данных сообщений не появлялось, в версиях Outlook, начиная с 2007 можно отключить его настройками безопасности:

  • Excel 2007: Меню-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется);
  • Excel 2010: Файл-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется).

ВАЖНО: Если компьютер управляется администратором Microsoft Exchange или Microsoft Windows Active Directory Domain Services и администратором в качестве параметров по умолчанию установлен запрет на внесение изменений в параметры безопасности пользователями, возможность изменения данных настроек безопасности программного доступа будет недоступна.


 

Но так же при отправке файлов и писем часто необходимо не привязываться к конкретной почтовой программе. Ведь далеко не все ставят Outlook. Многие используют иные почтовые программы, например TheBat.

Отправка сообщения без использования Outlook - используем CDO

Данный код отправляет письмо, используя объект CDO(Collaboration Data Objects - присутствует во всех версиях Windows) и от имени Вашей учетной записи(либо Яндекс, либо Мэйл, либо Рамблер либо др.).

  • SMTPserver - Каждый из приведенных выше сервисов имеет свой сервер для отправки сообщений(его можно посмотреть на сайте сервиса). В комментариях к коду я написал три самых распространенных, но если Вы используете какой-то другой, то просто посмотрите на его сайте настройки для Outlook и отыщите тот параметр, который отвечает за SMTPserver.
  • sUsername - это Ваш логин для входа в почтовый сервис. Думаю тут все понятно. Единственный момент - обязательно указывать e-mail именно в полном виде - YourMail@mail.ru, даже если для входа на сервис через браузер Вы используете только первую часть записи(YourMail).
  • sPass - пароль доступа к Вашей учетной записи, который Вы используете для входа в почту.

Это основные моменты. Поля Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) думаю не нуждаются в расшифровке.

Чтобы использовать данный код вы можете либо просто скопировать его прямо со страницы, либо скачать файл. В файле программа немного упрощена к использованию - в ячейки листа вам необходимо будет внести поля: Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) и выбрать SMTPserver. SMTPserver выбирается из выпадающего списка. Сам список является динамическим и расположен на листе "Settinngs". Там же расположены поля Учетной записи и Пароль, которые автоматически подставляются в необходимые поля на листе "Отправка". Т.к. список динамический Вы можете просто добавлять к уже имеющимся новые сервисы и потом просто выбирать их из списка. Так же в файле есть еще одна возможность - выбрать файл. Для этого надо просто нажать на кнопку и выбрать файл.

Скачать пример:

  Tips_Macro_SendMailCDO.xls (69,5 KiB, 4 639 скачиваний)


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

Самый главный момент:
AddRelatedBodyPart

    C:\Документы\Изображения\11.jpg - указывается полный путь к файлу картинки на компьютере, включая расширение файла.
    11.jpg - указывается имя картинки с расширением. Это имя будет использовано внутри письма и именно его необходимо будет указать дальше в "urn:schemas:mailheader:Content-ID". И указывать обязательно в треугольных скобках: "<11.jpg>"

Также см.:
Отправка листа/книги по почте
Вставить в письмо подпись из Outlook через VBA


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Поиск по меткам

Access Multex Outlook Power BI Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Настройка Поиск данных Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx вебинар ссылки статьи тренинг
Обсуждение: оставлено 149 коммент.
  1. Alina:

    У меня массово не отправляет с вложениями. Помогите, пожалуйста!

    • Алина, как считаете сами - можно помочь по такому полному описанию проблемы? :) Мысль одна - неверный путь к вложениям. Других вариантов при таких исходных данных просто нет.

  2. Slava:

    Здравствуйте. Заинтересовал такой вот вопрос - при отправке средствами CDO прописывается параметр со ссылкой на сайт "http://schemas.microsoft.com/cdo/configuration/". Насколько я понял, этот сайт выступает как прокси сервер? Стало быть и тут мелкомягкие шпионят? Сканируют все письма или я параноик?

    • Это паранойя :) Здесь не идет речь о подключении через эти строки вообще к любому сайту. Это лишь ссылка на конфигурационную модель CDO. Можете даже попробовать отключить интернет от ПК и выполнить все строки ДО отправки письма - ошибок подключения не будет. Ошибка возникнет лишь в момент отправки. Никакие личные данные эти строки не собирают.

  3. Kirill Dukan:

    Добрый день. Написал макрос на отправку писем с картинками в теле письма. Макрос работает автоматически четко и без сбоев, но при прочтении письма через телефонный месенджер картинки не отображаются. Самое парадоксальное, что при прогонке макроса до Display и отправке в ручную, картинки в теле письма отображаю корректно. Есть подозрения, что Outlook изменяет формат картинки, но как с этим бороться и что делать не понятно.

    Sub Mail()
    Dim OutApp As Object 'To call Outlook Application
    Dim OutMail As Object 'To work with a new Outlook message
    Dim TempFilePath As String 'Path to store objects

    TempFilePath = Environ$("temp") & "\"

    Set OutApp = CreateObject("outlook.application") 'Create a new Microsoft Outlook session
    Set OutMail = OutApp.CreateItem(0) 'Create a new message

    With OutMail

    .Subject = ThisWorkbook.Sheets(1).Cells(2, 2) 'So called (by myself) head of letter.
    .To = ThisWorkbook.Sheets(1).Cells(2, 5).Value 'Who will receive our message.
    .Attachments.Add "J:\All Departments\Sales Reports\private\PDCA\Sales & CC flow report.xlsx"
    .Attachments.Add "J:\All Departments\Sales Reports\private\PDCA\Sales & CC flow report by dealers.xlsx"

    'First text part of the message.
    .HTMLBody = "" & "" _
    & "Dear colleagues,Please, find in attach report with current Sales and CC dealer by dealer."

    '== Insert an object 1 ==
    Call Get_Txt("Details") 'Time to create the image as a JPG file
    .Attachments.Add TempFilePath & "Details.jpg", 0, 0
    'Let us combine object 1 with a body of message
    .HTMLBody = .HTMLBody & "" & "<img src=Details.jpg'" & ""

    '== Insert an object 2 ==
    Call Get_Pic("Graphics") 'Time to create the image as a JPG file
    .Attachments.Add TempFilePath & "Graphics.jpg", 0, 0
    'Let us combine object 2 with a body of message
    .HTMLBody = .HTMLBody & "" & "<img src=Graphics.jpg'" & ""

    .HTMLBody = .HTMLBody & "Kind Regards,Sales Planning & Analysis Team"

    .Send 'Choose .Send if you want message to be sended automatically without displaing

    End With

    Set OutApp = Nothing
    Set OutMail = Nothing

    With Application 'Turning graphical options back
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
    End With

    Windows("MACROS AUTOMAILING Sale&CC FOR TFO DO NOT OPEN!.xlsm").Activate
    Application.Quit

    End Sub

    Sub Get_Pic(NameFile As String)

    Dim PlaceX As Shape

    ThisWorkbook.Worksheets(2).Activate 'Selecting sheet with future screenshot

    Set PlaceX = ThisWorkbook.Worksheets(2).Shapes(1) 'Selecting exact place to catch
    PlaceX.CopyPicture

    With ThisWorkbook.Worksheets(2).ChartObjects.Add(PlaceX.Left, PlaceX.Top, PlaceX.Width, PlaceX.Height)
    .Activate
    .Chart.Paste
    .Chart.Export Environ$("temp") & "\" & NameFile & ".jpg", "JPG"
    End With

    Worksheets(2).ChartObjects(Worksheets(2).ChartObjects.Count).Delete

    Set PlaceX = Nothing

    End Sub

    Sub Get_Txt(NameFile As String)

    Dim PlaceY As Range

    ThisWorkbook.Worksheets(1).Activate 'Selecting sheet with future screenshot

    Set PlaceY = ThisWorkbook.Worksheets(2).Range("A3:J29") 'Selecting exact place to catch
    PlaceY.CopyPicture

    With ThisWorkbook.Worksheets(2).ChartObjects.Add(PlaceY.Left, PlaceY.Top, PlaceY.Width, PlaceY.Height)
    .Activate
    .Chart.Paste
    .Chart.Export Environ$("temp") & "\" & NameFile & ".jpg", "JPG"
    End With

    Worksheets(2).ChartObjects(Worksheets(2).ChartObjects.Count).Delete

    Set PlaceY = Nothing

    End Sub

  4. Kirill Dukan:

    Проблема решилась. Добавил .Display перед .Send

    Спасибо всем за помощь)

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Логин
Наши партнеры
Перейти
Перейти
Счетчики
Анализ сайта

Яндекс.Метрика
© 2016 Excel для всех  Войти