Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отправка писем через VBA с сохранением в отправленных. Как? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отправка писем через VBA с сохранением в отправленных. Как? (Макросы/Sub)
Отправка писем через VBA с сохранением в отправленных. Как?
PATRI0T Дата: Среда, 27.02.2019, 11:16 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
Как отправить письмо с помощью VBA так, чтобы оно сохранилось в отправленных на сервере (яндекс почта).

Читал, как отправлять через CDO, но не подходит, т.к. письмо молча уйдет к адресату и не сохранится.
Догадываюсь, что можно отправлять через Outlook, и там письмо будет создано, но тут другая проблема - в почтовом ящике больше 15К писем, менеджеров 5, и не варик ставить на каждый оутлук и чтобы он качал все с сервера (даже заголовки занимают почему то неприлично много)

Может есть еще какие варианты?

Заранее спасибо.
 
Ответить
СообщениеКак отправить письмо с помощью VBA так, чтобы оно сохранилось в отправленных на сервере (яндекс почта).

Читал, как отправлять через CDO, но не подходит, т.к. письмо молча уйдет к адресату и не сохранится.
Догадываюсь, что можно отправлять через Outlook, и там письмо будет создано, но тут другая проблема - в почтовом ящике больше 15К писем, менеджеров 5, и не варик ставить на каждый оутлук и чтобы он качал все с сервера (даже заголовки занимают почему то неприлично много)

Может есть еще какие варианты?

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

Автор - PATRI0T
Дата добавления - 27.02.2019 в 11:16
Elvira66 Дата: Среда, 27.02.2019, 13:38 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я реализовала через Outlook. На сколько я знаю VBA это только для программ Office
 
Ответить
СообщениеЯ реализовала через Outlook. На сколько я знаю VBA это только для программ Office

Автор - Elvira66
Дата добавления - 27.02.2019 в 13:38
boa Дата: Среда, 27.02.2019, 13:50 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
не варик ставить на каждый оутлук и чтобы он качал все с сервера (даже заголовки занимают почему то неприлично много)

может надо оутлук правильно настроить?
а сам я вот такой функцией отправляю письма
[vba]
Код
Sub testSendMail()
    If SendMailOutlook(strSubject:="Заголовок", _
                       strBody:="Добрый день!", _
                       strSendTo:="Customer@mail.ru", _
                       strCopyTo:="Me_copy@mail.ru", _
                       strAttachFile:="", _
                       blnSend:=False) _
    Then MsgBox "Полетело письмецо!"
End Sub
Private Function SendMailOutlook(ByVal strSubject As String, _
                    ByVal strBody As String, _
                    ByVal strSendTo As String, _
                    Optional ByVal strCopyTo As String = "", _
                    Optional ByVal strAttachFile As String = "", _
                    Optional ByVal blnSend As Boolean = False) As Boolean
'' Author: boa
'' Written: 12.10.2015
'' Edited: 03.12.2015
'  Description: Отправляет письма через MSOutlook
'  blnSend ставим True если надо сразу отправлять письма
    
    Dim OutApp As Object
    Dim OutMail As Object
    
On Error GoTo errHandle
'Создаем новое пустое сообщение
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")   '("Notes.NotesSession")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    
'Заполняем письмо
    With OutMail
        .To = strSendTo
        .cc = strCopyTo
'        .BCC = "test@ru"   'скрытая копия
        .Subject = strSubject
'        .htmlbody = strHTMLBody
        .body = strBody
        If Len(strAttachFile) > 0 Then .Attachments.Add strAttachFile ' сюда полный адрес вложения
        If blnSend Then .Send Else .Save: .Display
    End With
    
    SendMailOutlook = True

ExitFunction:
    Set OutMail = Nothing
    Set OutApp = Nothing
    Application.ScreenUpdating = True
    Exit Function

errHandle:
    MsgBox Err.Number & " " & Err.Description
    SendMailOutlook = False
    GoTo ExitFunction
End Function
[/vba]


 
Ответить
Сообщение
не варик ставить на каждый оутлук и чтобы он качал все с сервера (даже заголовки занимают почему то неприлично много)

может надо оутлук правильно настроить?
а сам я вот такой функцией отправляю письма
[vba]
Код
Sub testSendMail()
    If SendMailOutlook(strSubject:="Заголовок", _
                       strBody:="Добрый день!", _
                       strSendTo:="Customer@mail.ru", _
                       strCopyTo:="Me_copy@mail.ru", _
                       strAttachFile:="", _
                       blnSend:=False) _
    Then MsgBox "Полетело письмецо!"
End Sub
Private Function SendMailOutlook(ByVal strSubject As String, _
                    ByVal strBody As String, _
                    ByVal strSendTo As String, _
                    Optional ByVal strCopyTo As String = "", _
                    Optional ByVal strAttachFile As String = "", _
                    Optional ByVal blnSend As Boolean = False) As Boolean
'' Author: boa
'' Written: 12.10.2015
'' Edited: 03.12.2015
'  Description: Отправляет письма через MSOutlook
'  blnSend ставим True если надо сразу отправлять письма
    
    Dim OutApp As Object
    Dim OutMail As Object
    
On Error GoTo errHandle
'Создаем новое пустое сообщение
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")   '("Notes.NotesSession")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    
'Заполняем письмо
    With OutMail
        .To = strSendTo
        .cc = strCopyTo
'        .BCC = "test@ru"   'скрытая копия
        .Subject = strSubject
'        .htmlbody = strHTMLBody
        .body = strBody
        If Len(strAttachFile) > 0 Then .Attachments.Add strAttachFile ' сюда полный адрес вложения
        If blnSend Then .Send Else .Save: .Display
    End With
    
    SendMailOutlook = True

ExitFunction:
    Set OutMail = Nothing
    Set OutApp = Nothing
    Application.ScreenUpdating = True
    Exit Function

errHandle:
    MsgBox Err.Number & " " & Err.Description
    SendMailOutlook = False
    GoTo ExitFunction
End Function
[/vba]

Автор - boa
Дата добавления - 27.02.2019 в 13:50
PATRI0T Дата: Среда, 27.02.2019, 14:38 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
Спасибо.

Цитата

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


А можете в двух словах сказать, как правильно, или ссылочку...
Там вся переписка и с почтой работает 5-6 человек. Вся работа идет через веб.
Как настроить так, чтобы через аутлук только отправлять письма, но не получать?
 
Ответить
СообщениеСпасибо.

Цитата

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


А можете в двух словах сказать, как правильно, или ссылочку...
Там вся переписка и с почтой работает 5-6 человек. Вся работа идет через веб.
Как настроить так, чтобы через аутлук только отправлять письма, но не получать?

Автор - PATRI0T
Дата добавления - 27.02.2019 в 14:38
boa Дата: Среда, 27.02.2019, 17:09 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
PATRI0T,
наверное как-то так

ну или поищите в настройках
К сообщению приложен файл: 0090225.jpg (49.8 Kb)


 
Ответить
СообщениеPATRI0T,
наверное как-то так

ну или поищите в настройках

Автор - boa
Дата добавления - 27.02.2019 в 17:09
doober Дата: Среда, 27.02.2019, 17:18 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Может есть еще какие варианты?

Всегда есть выход.[vba]
Код
Set cdoMessage = CreateObject("CDO.Message")
    With cdoMessage
.more more кода
         .send
    End With    
    Savemessage cdoMessage, "C:\modified.eml"
Sub Savemessage(message, Filename)
    Set Stream = CreateObject("ADODB.Stream")
    Stream.Open
    Stream.Type = message.GetStream().Type
    Stream.Charset = message.GetStream().Charset
    message.DataSource.SaveToObject Stream, "_Stream"
    Stream.SaveToFile Filename, 2
    Stream.close
    Set Stream = Nothing
End Sub
[/vba]




Сообщение отредактировал doober - Среда, 27.02.2019, 17:20
 
Ответить
Сообщение
Может есть еще какие варианты?

Всегда есть выход.[vba]
Код
Set cdoMessage = CreateObject("CDO.Message")
    With cdoMessage
.more more кода
         .send
    End With    
    Savemessage cdoMessage, "C:\modified.eml"
Sub Savemessage(message, Filename)
    Set Stream = CreateObject("ADODB.Stream")
    Stream.Open
    Stream.Type = message.GetStream().Type
    Stream.Charset = message.GetStream().Charset
    message.DataSource.SaveToObject Stream, "_Stream"
    Stream.SaveToFile Filename, 2
    Stream.close
    Set Stream = Nothing
End Sub
[/vba]

Автор - doober
Дата добавления - 27.02.2019 в 17:18
PATRI0T Дата: Четверг, 28.02.2019, 11:17 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
doober, спасибо, сейчас буду пробовать. Хотя, к моему стыду, я не совсем понял, как это должно работать...
Вижу, что просто сохраняется файл письма на диск.. и вроде всё..

У меня еще один вопрос..
Код для отправки письма, который нашел в интернете, у меня почему то зависает при попытке отправить письмо (отметил стрелочкой, где виснет)

По таймауту вылетает с ошибкой
[vba]
Код
Err -2147220973:  "Нет доступа к Интернет"
[/vba]

? А как можно таймаут уменьшить? а то он надолго вешает весь ексель..

При попытке браузером зайти по адресу https://u.to/zRrLFA пишет следущее..
Цитата
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.


Может это связано?

Код процедуры отправки, взял тут https://u.to/zhrLFA


Сообщение отредактировал PATRI0T - Четверг, 28.02.2019, 11:35
 
Ответить
Сообщениеdoober, спасибо, сейчас буду пробовать. Хотя, к моему стыду, я не совсем понял, как это должно работать...
Вижу, что просто сохраняется файл письма на диск.. и вроде всё..

У меня еще один вопрос..
Код для отправки письма, который нашел в интернете, у меня почему то зависает при попытке отправить письмо (отметил стрелочкой, где виснет)

По таймауту вылетает с ошибкой
[vba]
Код
Err -2147220973:  "Нет доступа к Интернет"
[/vba]

? А как можно таймаут уменьшить? а то он надолго вешает весь ексель..

При попытке браузером зайти по адресу https://u.to/zRrLFA пишет следущее..
Цитата
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.


Может это связано?

Код процедуры отправки, взял тут https://u.to/zhrLFA

Автор - PATRI0T
Дата добавления - 28.02.2019 в 11:17
doober Дата: Четверг, 28.02.2019, 17:09 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
  SMTPserver = "smtp.yandex.ru"    ' SMTPServer: для Mail.ru "smtp.mail.ru"; для Яндекса "smtp.yandex.ru"; для Рамблера "mail.rambler.ru"
    sUsername = "***@yandex.ru"    ' Учетная запись на сервере
    sPass = "***"    ' Пароль к почтовому аккаунту
[/vba]
Эти данные корректны?


 
Ответить
Сообщение[vba]
Код
  SMTPserver = "smtp.yandex.ru"    ' SMTPServer: для Mail.ru "smtp.mail.ru"; для Яндекса "smtp.yandex.ru"; для Рамблера "mail.rambler.ru"
    sUsername = "***@yandex.ru"    ' Учетная запись на сервере
    sPass = "***"    ' Пароль к почтовому аккаунту
[/vba]
Эти данные корректны?

Автор - doober
Дата добавления - 28.02.2019 в 17:09
PATRI0T Дата: Понедельник, 04.03.2019, 10:02 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
да, конечно
Там мои логин\пасс.. Чтобы не светить их на весь интернет закрыл звездочками.

Интернет на работе простой, без всяких прокси
 
Ответить
Сообщениеда, конечно
Там мои логин\пасс.. Чтобы не светить их на весь интернет закрыл звездочками.

Интернет на работе простой, без всяких прокси

Автор - PATRI0T
Дата добавления - 04.03.2019 в 10:02
doober Дата: Понедельник, 04.03.2019, 12:06 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Порт указан?
.Item(CDO_Cnf & "smtpserverport") =


 
Ответить
СообщениеПорт указан?
.Item(CDO_Cnf & "smtpserverport") =

Автор - doober
Дата добавления - 04.03.2019 в 12:06
PATRI0T Дата: Понедельник, 04.03.2019, 15:56 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
точно.. спасибо...
и ведь даже были строчки соответствующие, раскомментировать только надо было... Как я мог не заметить..?!

Действительно, все отправилось.. Спасибо еще раз огромное.
А по таймауту не подскажете? а то это же негоже, что он 5 минут висит...
 
Ответить
Сообщениеточно.. спасибо...
и ведь даже были строчки соответствующие, раскомментировать только надо было... Как я мог не заметить..?!

Действительно, все отправилось.. Спасибо еще раз огромное.
А по таймауту не подскажете? а то это же негоже, что он 5 минут висит...

Автор - PATRI0T
Дата добавления - 04.03.2019 в 15:56
doober Дата: Понедельник, 04.03.2019, 19:09 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Не может висеть 5 минут.
Что то у Вас не так.
Возможно аттач большой по размеру, интернет слабый.
Возможно задержка в коде установлена между отправками писе.
желательно бы все шаги промотеть, а не только процедуру отправки писем


 
Ответить
СообщениеНе может висеть 5 минут.
Что то у Вас не так.
Возможно аттач большой по размеру, интернет слабый.
Возможно задержка в коде установлена между отправками писе.
желательно бы все шаги промотеть, а не только процедуру отправки писем

Автор - doober
Дата добавления - 04.03.2019 в 19:09
PATRI0T Дата: Вторник, 05.03.2019, 10:49 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
спасибо. интернет нормальный, вложение вообще не прикладывал.. (закомментил строку с аттачем)
сейчас не висит, после указания портов. Но до этого зависал.. невозможно было ни отладку остановить, ни екселем пользоваться. Полный блок.
Может быть нужно было сделать DoEvents, но не пробовал еще.

ну и мысль такая.. а вдруг интернет запнется - хочется чтоб он быстро ответил "нет интернета", а не висел 5 минут и только потом сказал.
Поэтому мысль про таймаут..
 
Ответить
Сообщениеспасибо. интернет нормальный, вложение вообще не прикладывал.. (закомментил строку с аттачем)
сейчас не висит, после указания портов. Но до этого зависал.. невозможно было ни отладку остановить, ни екселем пользоваться. Полный блок.
Может быть нужно было сделать DoEvents, но не пробовал еще.

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

Автор - PATRI0T
Дата добавления - 05.03.2019 в 10:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отправка писем через VBA с сохранением в отправленных. Как? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!