Send mail with excel vba

VBA Code to Send Emails From Excel

In VBA, to send emails from Excel, we can automatically automate our mailing feature to send emails to multiple users at a time. However, to do so, we need to remember that we may do it by outlook, another product of outlook, so we need to enable outlook scripting in VBA. Once done, we use the .Application method to use outlook features.

VBA’s versatility is just amazing. VBA coders love Excel because by using VBA, we not only can work within Excel. Rather, we can also access other Microsoft tools. For example, we can access PowerPoint, Word, and Outlook by using VBAMicrosoft Outlook has a VBA reference that can be used to control Outlook. This makes it easy to automate repetitive activities in Outlook. To use VBA in Outlook, you’ll need to enable the developer feature, just like in Excel.read more. So I was impressed when I heard of sending emails from Excel. Yes, it is true. We can send emails from excel. This article will show you how to send emails from Excel with attachments using VBA CodingVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more.

Table of contents
  • VBA Code to Send Emails From Excel
    • Set Reference to Microsoft Office Library
    • 13 Easy Steps to Send Emails from Excel
      • Step #1
      • Step #2
      • Step #3
      • Step #4
      • Step #5
      • Step #6
      • Step #7
      • Step #8
      • Step #9
      • Step #10
      • Step #11
      • Step #12
      • Step #13
    • Recommended Articles

VBA Send Email from Excel

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Send Email from Excel (wallstreetmojo.com)

Set Reference to Microsoft Office Library

We need to send emails from Outlook. Since Outlook is an external objec, we first need object reference to “Microsoft Outlook 16.0 Object Library.”

  1. 1.     In VBA, Go to Tools > References.

    vba send email references1

  2. Now, we will see the object reference library. In this window, we need to set the reference to “Microsoft Outlook 16.0 Object Library.”

    vba send email references1

  3. After setting the object reference, click on “OK.”

Now, we can access Outlook objects in VBA coding.

13 Easy Steps to Send Emails from Excel

Writing the code to send an email with an attachment from Excel is quite complicated but worth spending some time.

You can download this VBA Send Email Excel Template here – VBA Send Email Excel Template

Follow the below steps to write your first email excel macroA macro in excel is a series of instructions in the form of code that helps automate manual tasks, thereby saving time. Excel executes those instructions in a step-by-step manner on the given data. For example, it can be used to automate repetitive tasks such as summation, cell formatting, information copying, etc. thereby rapidly replacing repetitious operations with a few clicks.
read more
.

Step #1

Start the sub procedure in VBASUB in VBA is a procedure which contains all the code which automatically gives the statement of end sub and the middle portion is used for coding. Sub statement can be both public and private and the name of the subprocedure is mandatory in VBA.read more.

Code:

Sub SendEmail_Example1()

End Sub

vba send email example 1.1

Step #2

Declare the variable Outlook.Application

Code:

Dim EmailApp As Outlook.Application 'To refer to outlook application

vba send email example 1.2

Step #3

The above variable is an object variable. Therefore, we need to create an instance of a new object separately. Below is the code to create a new instance of the external object.

Code:

Set EmailApp = New Outlook.Application 'To launch outlook application

vba send email example 1.3

Step #4

Now, to write the email, we declare one more variable as “Outlook.MailItem”.

Code:

Dim EmailItem As Outlook.MailItem 'To refer new outlook email

vba send email example 1.4

Step #5

To launch a new email, we need to set the reference to our previous variable as “CreateItem.”

Code:

Set EmailItem = EmailApp.CreateItem(olMailItem) 'To launch new outlook email

vba send email example 1.5

Now, the variable “EmailApp” will launch outlook. In the variable “EmailItem,” we can start writing the email.

Step #6

We need to be aware of our items while writing an email. First, we need to decide to whom we are sending the email. So for this, we need to access the “TO” property.

vba send email example 1.6

Step #7

Enter the email ID of the receiver in double quotes.

Code:

EmailItem.To = "[email protected]"

vba send email example 1.7

Step #8

After addressing the main receiver, if you would like to CC anyone in the email, we can use the “CC” property.

Code:

EmailItem.CC = "[email protected]"

vba send email example 1.8

Step #9

After the CC, we can set the BCC email ID as well.

Code:

EmailItem.BCC = "[email protected]"

vba send email example 1.9

Step #10

We need to include the subject of the email we are sending.

Code:

EmailItem.Subject = "Test Email From Excel VBA"

example 1.10

Step #11

We need to write the email body using HTML body type.

Code:

EmailItem.HTMLBody = "Hi," & vbNewLine & vbNewLine & "This is my first email from Excel" & _
                     vbNewLine & vbNewLine & _
                     "Regards," & vbNewLine & _
                     "VBA Coder" 'VbNewLine is the VBA Constant to insert a new line

example 1.11

Step #12

We are working on if we want to add an attachment to the current workbook. Then, we need to use the attachments property. First, declare a variable source as a string.

Code:

Dim Source As String

example 1.14

Then in this variable, write ThisWorkbook.FullName after Email body.

Code:

Source = ThisWorkbook.FullName

example 1.15

In this VBA Code, ThisWorkbook is used for the current workbook and .FullName is used to get the full name of the worksheet.

Then, write the following code to attach the file.

Code:

EmailItem.Attachments.Add Source

example 1.16

Step #13

Finally, we need to send the email to the mentioned email IDs. We can do this by using the “Send” method.

Code:

EmailItem.Send

example 1.17

We have completed the coding part.

Code:

Sub SendEmail_Example1()

Dim EmailApp As Outlook.Application
Dim Source As String
Set EmailApp = New Outlook.Application

Dim EmailItem As Outlook.MailItem
Set EmailItem = EmailApp.CreateItem(olMailItem)

EmailItem.To = "[email protected]"
EmailItem.CC = "[email protected]"
EmailItem.BCC = "[email protected]"
EmailItem.Subject = "Test Email From Excel VBA"
EmailItem.HTMLBody = "Hi," & vbNewLine & vbNewLine & "This is my first email from Excel" & _
vbNewLine & vbNewLine & _
"Regards," & vbNewLine & _
"VBA Coder"
Source = ThisWorkbook.FullName
EmailItem.Attachments.Add Source

EmailItem.Send

End Sub

Run the above code. It will send the email with the mentioned body with the current workbook as the attachment.

Recommended Articles

This article has been a guide to VBA Send Email from Excel. Here, we learn how to write VBA code to send emails from Excel with attachments along with an example and downloadable Excel template. You can learn more about VBA from the following articles: –

  • VBA TimeValue Function
  • Dictionary in VBA
  • Create Progress Bar in VBA
  • GetOpenFilename VBA

Хитрости »

1 Май 2011              386213 просмотров


Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов. Не надо отсылать письма на указанные в статье 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 986 скачиваний)

При использовании этих кодов есть один недостаток: очень часто при программной отправке писем 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

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

Данная статья описывает три способа отправки писем с помощью VBA в Excel. Вы можете скачать файл с примером отправки email с помощью VBA в Excel.

Отправить письмо в Excel с помощью VBA

Один из самых простых способов для автоматизации отправки почты с Excel заключается в вызове функции Create («ObjectOutlook.Application»). Данная функция возвращающает ссылку на ActiveX объект (в данном случает приложение Outlook), которое затем используется для создания и отправки электронной почты.

Чтобы проверить данный способ в работе, скопируйте и вставьте код ниже в VB редактор.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Sub Send_Email_Using_VBA()
Dim Email_Subject, Email_Send_From, Email_Send_To, _
Email_Cc, Email_Bcc, Email_Body As String
Dim Mail_Object, Mail_Single As Variant
Email_Subject = «Попытка отправить письмо с помощью VBA»
Email_Send_From = «exceltipmail@gmail.com»
Email_Send_To = » exceltipmail@gmail.com «
Email_Cc = » exceltipmail@gmail.com «
Email_Bcc = » exceltipmail@gmail.com «
Email_Body = «Поздравляем!!!! Ваше письмо успешно отправлено !!!!»
On Error GoTo debugs
Set Mail_Object = CreateObject(«Outlook.Application»)
Set Mail_Single = Mail_Object.CreateItem(0)
With Mail_Single
.Subject = Email_Subject
.To = Email_Send_To
.cc = Email_Cc
.BCC = Email_Bcc
.Body = Email_Body
.send
End With
debugs:
If Err.Description &lt;&gt; «» Then MsgBox Err.Description
End Sub

В качестве напоминания: Когда вы пытаетесь отправить письмо вышеуказанным способом, система безопасности будет выдавать каждый раз предупреждающее окно, в котором будет говориться о том, что Программа пытается отправить сообщение от вашего имени… и возможности обойти этот шаг нет.

предупреждение об отправке письма

К счастью, существует еще два способа, с помощью которых данный вопрос может быть решен: первый – через использование CDO, второй – имитирующий использование событий нажатий клавиш клавиатуры.

Отправить письмо в Excel с помощью CDO

Что такое CDO? CDO является библиотекой объектов, которая предоставляет интерфейс Messaging Application Programming Interface (MAPI). CDO позволяет манипулировать обменом данных, и отправлять и получать сообщения.

Использование CDO может быть предпочтительно в случаях, когда вы хотите предотвратить появление вплывающих окон безопасности Программа пытается отправить сообщение от вашего имени… и следовательно, предотвратить задержку отправки сообщения.

В нашем примере мы используем функцию CreateObject («CDO.Message»). Важно отметить, что необходимо правильно установить конфигурацию SMTP сервера, чтобы не допустить появления ошибок Run-time error 2147220973(80040213) или sendUsing configuration value is invalid. Пример ниже настроен на отправку сообщений через почту Google (Gmail). Для других почтовых серверов, вам потребуется ввести свои значения SMTP-сервера и SMTP-порта.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Sub CDO_Mail_Small_Text_2()
Dim iMsg As Object
Dim iConf As Object
Dim strbody As String
Dim Flds As Variant
Set iMsg = CreateObject(«CDO.Message»)
Set iConf = CreateObject(«CDO.Configuration»)
iConf.Load -1
Set Flds = iConf.Fields
With Flds
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpusessl») = True
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = 1
.Item(«https://schemas.microsoft.com/cdo/configuration/sendusername») = «Полный адрес вашего GMail ящика»
.Item(«https://schemas.microsoft.com/cdo/configuration/sendpassword») = «GMail пароль»
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpserver») = «smtp.gmail.com»
.Item(«https://schemas.microsoft.com/cdo/configuration/sendusing») = 2
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpserverport») = 465
.Update
End With
strbody = «Поздравляем!!!! Ваше письмо успешно отправлено !!!!»
With iMsg
Set .Configuration = iConf
.To = «Почтовый адрес получателя»
.CC = «»
.BCC = «»
.From = «»«ВашеИмя»» &lt;Reply@something.nl&gt;»
.Subject = «Попытка отправить письмо с помощью CDO»
.TextBody = strbody
.Send
End With
End Sub

Обратите внимание, чтобы воспользоваться данным методом вам необходимо подключить библиотеку CDO в редакторе макросов Tool –> References.

Отправить письмо с помощью CDO

Отправить письмо в Excel с помощью Send Keys

Другой способ отправки email с помощью Excel – использование команды ShellExecute, которая выполняет любую программу в VBA. Команда ShellExecute используется для загрузки документа с соответствующей программой. По сути, вы создаете объект String (текстовые данные) и передаете его в качестве параметра для функции ShellExecute. Остальная часть операций выполняется в окнах. Автоматически определяется, какая программа связана с данным типом документа и используется для загрузки документа. Вы можете использовать функцию ShellExecute, чтобы открыть Internet Explorer, Word, Paint и множество других приложений. В коде ниже используется задержка в три секунды, чтобы убедиться, что отправляемое письмо корректно и для возможности предотвратить отправку, если вы вдруг нашли какие-нибудь недочеты.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Sub Send_Email_Using_Keys()
Dim Mail_Object As String
Dim Email_Subject, Email_Send_To, Email_Cc, Email_Bcc, Email_Body As String
Email_Subject = «Попытка отправить письмо с помощью SendKeys»
Email_Send_To = «exceltipmail@gmail.com «
Email_Cc = «exceltipmail@gmail.com «
Email_Bcc = «exceltipmail@gmail.com «
Email_Body = «Поздравляем!!!! Ваше письмо успешно отправлено !!!!»
Mail_Object = «mailto:» & Email_Send_To & «?subject=» & Email_Subject & «&body=» & Email_Body & «&cc=» & Email_Cc & «&bcc=» & Email_Bcc
On Error GoTo debugs
ShellExecute 0&, vbNullString, Mail_Object, vbNullString, vbNullString, vbNormalFocus
Application.Wait (Now + TimeValue(«0:00:03»))
Application.SendKeys «^({ENTER})»
Application.SendKeys («{ENTER}»)
debugs:
If Err.Description <> «» Then MsgBox Err.Description
End Sub

Cкачать файл с примером отправки email с помощью VBA в Excel

To send emails from Microsoft Excel only requires a few simple scripts. Add this functionality to your spreadsheets, and you can accomplish much more in Excel.

Excel macros can do many of the same things VBA scripts can, without the need for as much programming knowledge. VBA lets you implement more advanced routines, like creating a spreadsheet report with all of your PC information.

Prefer to watch this tutorial as a video? We’ve got you covered!

Why Send Email From Excel?

There are a lot of reasons why you might want to send an email from inside Microsoft Excel.

Maybe you have staff who update documents or spreadsheets every week, and you’d like to receive an email notification when they do. Or you might have a spreadsheet of contacts, and you want to send one email to all of them at once.

You’re probably thinking that scripting an email broadcast from Excel is going to be complicated. That’s not the case at all. The technique in this article makes use of a feature that’s been available in Excel VBA for a long time, Collaboration Data Objects (CDO).

Excel VBAProject References Menu with Microsoft CDO for Windows 2000 Library Selected

CDO is a messaging component used in Windows since very early generations of the OS. It used to be called CDONTS, and then with the advent of Windows 2000 and XP, was replaced with «CDO for Windows 2000.» This component is already included in your VBA installation within Microsoft Word or Excel and is ready for use.

Using the component makes sending emails from within Windows products with VBA extremely easy. In this example, you’ll use the CDO component in Excel to send out an email that will deliver the results from a specific Excel cell.

Step 1: Prepare Your Gmail Account

To send email from Microsoft Excel, we’ll be using Gmail, though you can customize the macro below to work with other email clients. Note that Gmail no longer permits third-party app access, meaning you’ll first have to enable Gmail’s 2-step authentication.

From your Google account’s Security page, under Signing in to Google, click App passwords. On the App passwords screen, find the Select app drop-down menu and select Mail. From Select device, select Windows Computer. Then click GENERATE.

Gmail-App-Passwords-1

Jot down the 16-character app password; you’ll need it when you configure the macro.

Step 2: Create a VBA Macro

Tip: Before you start, save the Excel file you’ll be working with as a Macro-Enabled Workbook, i.e. in the XLSM format.

First, we’ll need the Excel Developer tab. If you don’t see it, here’s how to enable it:

  1. Go to File > Options.
  2. Under Customize the Ribbon > Main Tabs, check the Developer option.
  3. Click OK to save your changes.

Excel Customize Ribbon Menu

Inside Excel’s Developer tab, click on Insert in the Controls box, and then select a command button.

Excel Developer Insert Command Button Menu

Draw it into the sheet and then create a new macro for it by clicking on Macros in the Developer ribbon.

Excel-CommandButton-Macro-Menu-1

When you click the Create button, it’ll open the VBA editor.

Add the reference to the CDO library by navigating to Tools > References in the editor.

Excel VBA Editor Tools References Menu

Scroll down the list until you find Microsoft CDO for Windows 2000 Library. Mark the checkbox and click OK.

Excel VBA Editor References Menu

When you click OK, make note of the name of the function where you’re pasting the script. You’ll need it later.

Step 3: Configure Your Macro

Now you’re ready to create the mail objects and set up all the fields necessary to send an email. Keep in mind that while many of the fields are optional, the From and To fields are required. Paste all the code snippets below into your Module1 (Code) window.

This is what the complete code looks like:

 Sub Send_Emails()
   Dim NewMail As CDO.Message
   Dim mailConfig As CDO.Configuration
   Dim fields As Variant
   Dim msConfigURL As String
   On Error GoTo Err:

   'early binding
   Set NewMail = New CDO.Message
   Set mailConfig = New CDO.Configuration

   'load all default configurations
   mailConfig.Load -1

   Set fields = mailConfig.fields

   'Set All Email Properties
   With NewMail
       .From = "username@gmail.com"
       .To = "username@gmail.com"
       .CC = ""
       .BCC = ""
       .Subject = "Send Email From an Excel Spreadsheet"
       .TextBody = "This is the body of your email. And here is some added data:" & Str(Sheet1.Cells(2, 1))
       .Addattachment "c:dataemail.xlsx" 'Optional file attachment; remove if not needed.
       .Addattachment "c:dataemail.pdf" 'Duplicate the line for a second attachment.
   End With

   msConfigURL = "http://schemas.microsoft.com/cdo/configuration"

   With fields
       .Item(msConfigURL & "/smtpusessl") = True 'Enable SSL Authentication
       .Item(msConfigURL & "/smtpauthenticate") = 1 'SMTP authentication Enabled
       .Item(msConfigURL & "/smtpserver") = "smtp.gmail.com" 'Set the SMTP server details
       .Item(msConfigURL & "/smtpserverport") = 465 'Set the SMTP port Details
       .Item(msConfigURL & "/sendusing") = 2 'Send using default setting
       .Item(msConfigURL & "/sendusername") = "username@gmail.com" 'Your gmail address
       .Item(msConfigURL & "/sendpassword") = "password" 'Your password or App Password
       .Update 'Update the configuration fields
   End With
   NewMail.Configuration = mailConfig
   NewMail.Send

      MsgBox "Your email has been sent", vbInformation

Exit_Err:
   'Release object memory
   Set NewMail = Nothing
   Set mailConfig = Nothing
   End

Err:
   Select Case Err.Number
   Case -2147220973 'Could be because of Internet Connection
       MsgBox "Check your internet connection." & vbNewLine & Err.Number & ": " & Err.Description
   Case -2147220975 'Incorrect credentials User ID or password
       MsgBox "Check your login credentials and try again." & vbNewLine & Err.Number & ": " & Err.Description
   Case Else 'Report other errors
       MsgBox "Error encountered while sending email." & vbNewLine & Err.Number & ": " & Err.Description
   End Select

   Resume Exit_Err

End Sub

And these are the sections and fields you need to customize:

  • With NewMail: This section contains all the parameters for sending your email, including the body of your email. The .From field needs to contain your Gmail address, but you’re free to set the other fields however you want. For the body, you can piece together components of the message by using the & string to insert data from any of the Microsoft Excel sheets right into the email message, just like shown above. You can also attach one or more files.
  • With fields: This is where you configure your SMTP settings for your Gmail account. Leave the smtpserver and smtpserverport fields as is when copying the code. Enter your Gmail username and the 16-digit app password into the respective fields.

Step 4: Test Your Macro

In the VBA editor, go to Run > Run Sub/User Form or press F5 to test the macro. If your email fails to go through, you should see an error message. Otherwise, you’ll see a confirmation that your email was sent successfully.

Excel-Send-Email-Macro-VBA-Email-Has-Been-Sent-1

If you receive an error that reads The transport failed to connect to the server, make sure you’ve entered the correct username, password, SMTP server, and port number in the lines of code listed underneath With fields.

Step 5: Connect the Command Button to Your Script

To connect your command button to this script, go into the code editor and double-click on Sheet1 to view the VBA code for that worksheet. Select your button, e.g. CommandButton1, from the drop-down on the left and define the action on the right; Click works. Then type the name of the function where you pasted the script above; in our example it’s Send_Emails.

Excel Send Emails Macro for Command Button

When you go back to your sheet now, click the button to send the email.

Here’s an example of what the message should look like in your inbox:

Send Email With Excel VBA Macro Successful

Take It Further and Automate the Whole Process

It’s all well and good to be able to send email from Excel at the touch of a button. However, you might want to use this functionality regularly, in which case it makes sense to automate the process. To do so, you’ll need to make a change to the macro. Head to the Visual Basic Editor and copy and paste the entirety of the code you’ve put together so far.

Next, double-click ThisWorkbook from the VBAProject hierarchy.

From the two dropdown fields at the top of the code window, select Workbook and select Open from the Methods dropdown.

Paste the email script above into Sub Workbook_Open().

This will run the macro whenever you open up the Excel file.

Excel Send Email When Workbook Opens

Next, open up Task Scheduler. You’re going to use this tool to ask Windows to open up the spreadsheet automatically at regular intervals, at which point your macro will run, sending the email.

Windows 11 Task Scheduler

From the Action menu, select Create Basic Task… and work your way through the wizard until you reach the Action screen.

Select Start a program and click Next. Use the Browse button to find Microsoft Excel’s location on your computer, or copy and paste the path into the Program/script field. Then, enter the path to your Microsoft Excel document into the Add arguments field. Complete the wizard, and your scheduling will be in place.

It’s worth running a test by scheduling the action for a couple of minutes in the future, then amending the task once you can confirm that it’s working.

Note: You may have to adjust your Trust Center settings to ensure that the macro runs properly.

To do so, open the spreadsheet and navigate to File > Options > Trust Center. From here, click Trust Center Settings…, and on the next screen set the radio dial to Never show information about blocked content.

Make Microsoft Excel Work for You

Microsoft Excel is an incredibly powerful tool, but learning how to get the most out of it can be a little intimidating. If you want to truly master the software, you’ll need to be comfortable with VBA, and that’s no small task.

However, the results speak for themselves. With a little VBA experience under your belt, you’ll soon be able to make Microsoft Excel perform basic tasks automatically, giving you more time to concentrate on more pressing matters.

Dear Readers,

In this article, we are going to learn how to send an email automatically by Excel Excel VBA. While executing the Excel Macro, sometimes you may need to send some Details or Results directly to your email ID or any other ID using Excel Macro. If you have some report or details which you want to send in a mail without log-in to your email account.
This you are going to achieve by using CDO Object.

What is CDO (Collaboration Data Objects)??

.
This Object is basically used for Active Messaging, Enables user to Access Global Server Objects and Address List For more about this read this Microsoft Help.

In Microsoft Excel, to use this Object you need to Add CDO Reference.

Add CDO Reference

Add CDO Reference

Note: Without adding this reference you can Run the below Code. For running this Code, you can use below line to create Object runtime:


Set myMail = CreateObject("CDO.Message")

In this article, i will explain you 2 simple methods, to send an email by Excel VBA.

1. Excel VBA: Send email from Gmail



Sub SendEmailUsingGmail()
    
    On Error GoTo Err
    
    Dim NewMail As Object
    Dim mailConfig As Object
    Dim fields As Variant
    Dim msConfigURL As String
    
    Set NewMail = CreateObject("CDO.Message")
    Set mailConfig = CreateObject("CDO.Configuration")
    
    ' load all default configurations
    mailConfig.Load -1
    
    Set fields = mailConfig.fields
    
'Set All Email Properties
    
    With NewMail
        .Subject = "Test Mail from LearnExcelMacro.com"
        .From = "email@gmail.com"
        .To = "email2@gmail.com;email3@gmail.com"
        .CC = "email4@gmail.com"
        .BCC = ""
        .textbody = ""
    End With
    
    msConfigURL = "http://schemas.microsoft.com/cdo/configuration"
    
    With fields
        'Enable SSL Authentication
        .Item(msConfigURL & "/smtpusessl") = True
        
        'Make SMTP authentication Enabled=true (1)
        .Item(msConfigURL & "/smtpauthenticate") = 1
        
        'Set the SMTP server and port Details
        'To get these details you can get on Settings Page of your Gmail Account
        .Item(msConfigURL & "/smtpserver") = "smtp.gmail.com"
        .Item(msConfigURL & "/smtpserverport") = 465
        .Item(msConfigURL & "/sendusing") = 2
        
        'Set your credentials of your Gmail Account
        .Item(msConfigURL & "/sendusername") = "email@gmail.com"
        .Item(msConfigURL & "/sendpassword") = "********"
        
        'Update the configuration fields
        .Update
        
    End With
    NewMail.Configuration = mailConfig
    NewMail.Send
    MsgBox ("Mail has been Sent")
    
Exit_Err:
    
    Set NewMail = Nothing
    Set mailConfig = Nothing
    End
    
Err:
    Select Case Err.Number
    
    Case -2147220973  'Could be because of Internet Connection
        MsgBox " Could be no Internet Connection !!  -- " & Err.Description
        
    Case -2147220975  'Incorrect credentials User ID or password
        MsgBox "Incorrect Credentials !!  -- " & Err.Description
        
    Case Else   'Rest other errors
        MsgBox "Error occured while sending the email !!  -- " & Err.Description
    End Select
    
    Resume Exit_Err
    
End Sub

2. Excel VBA: Send email from Yahoo



Sub SendEmailUsingYahoo()
    
    On Error GoTo Err
    
    Dim NewMail As Object
    Dim mailConfig As Object
    Dim fields As Variant
    Dim msConfigURL As String
    
    Set NewMail = CreateObject("CDO.Message")
    Set mailConfig = CreateObject("CDO.Configuration")
    
    ' load all default configurations
    mailConfig.Load -1
    
    Set fields = mailConfig.fields
    
'Set All Email Properties
    
    With NewMail
        .Subject = "Test Mail from LearnExcelMacro.com"
        .From = "email@yahoo.co.in"
        .To = "email1@gmail.com;email2@yahoo.com"
        .CC = "email@email.com"
        .BCC = ""
        .textbody = ""
    End With
    
    msConfigURL = "http://schemas.microsoft.com/cdo/configuration"
    
    With fields
        'Enable SSL Authentication
        .Item(msConfigURL & "/smtpusessl") = True
        
        'Make SMTP authentication Enabled=true (1)
        .Item(msConfigURL & "/smtpauthenticate") = 1
        
        'Set the SMTP server and port Details
        'To get these details you can get on Settings Page of your yahoo Account
        .Item(msConfigURL & "/smtpserver") = "smtp.mail.yahoo.com"
        .Item(msConfigURL & "/smtpserverport") = 465
        .Item(msConfigURL & "/sendusing") = 2
        
        'Set your credentials of your yahoo Account
        .Item(msConfigURL & "/sendusername") = "email@yahoo.co.in"
        .Item(msConfigURL & "/sendpassword") = "******"
        
        'Update the configuration fields
        .Update
        
    End With
    NewMail.Configuration = mailConfig
    NewMail.Send
    MsgBox ("Mail has been Sent")
    
Exit_Err:
    
    Set NewMail = Nothing
    Set mailConfig = Nothing
    End
    
Err:
    Select Case Err.Number
    
    Case -2147220973  'Could be because of Internet Connection
        MsgBox " Could be no Internet Connection !!  -- " & Err.Description
        
    Case -2147220975  'Incorrect credentials User ID or password
        MsgBox "Incorrect Credentials !!  -- " & Err.Description
        
    Case Else   'Rest other errors
        MsgBox "Error occured while sending the email !!  -- " & Err.Description
    End Select
    
    Resume Exit_Err
    
End Sub
 

Excel VBA to Send Email with HTML Body

For sending HTML Body you just need to Change the Email Properties which you are setting above



With NewMail
  .Subject = "Test Mail from LearnExcelMacro.com"
  .From = "email@yahoo.com"
  .To = "email2@gmail.com;email3@yahoo.com"
  .CC = "email@email.com"
  .BCC = ""
  .HTMLBody = "Write your complete HTML Page"
End With

Excel VBA to Send Email with an Attachment


With NewMail
  .Subject = "Test Mail from LearnExcelMacro.com"
  .From = "vishwamitra01@yahoo.com"
  .To = "vishwamitra02@gmail.com;info@learnexcelmacro.com"
  .CC = "vishwamitra01@gmail.com"
  .BCC = ""
  .HTMLBody = "Write your complete HTML Page"

' For multiple Attachment you can add below lines as many times

  .AddAttachment "C:ExcelMacro-help.xls"
  .AddAttachment "C:ExcelMacro-help2.xls"
End With

Понравилась статья? Поделить с друзьями:
  • Sem tools для excel
  • Sentence for the word defendant
  • Send mail using word
  • Sentence for the word decide
  • Sem tools excel полная версия