Использование VBA и Excel для отправки данных через POP3 в виде писем

Автор Ingvar, 18.04.2011, 09:37

« назад - далее »

Ingvar

Добрый день.

Интересует отчетность и возможность работы с интерфейсами pop3, imap VB в экселе.
Какие библиотеки есть для этого?
Какие функции есть.
Хотелось бы пример отправки писем через протоколы с тестом или срезами данных находящихся в Excel.
Буду благодарен за различные примеры и варианты использования.

Ingvar

Добрый день.

Идей нет?
Через cdo не отравляются.
Через встроенный клиент по умолчанию отправляются но нужен вариант именно без клиента отправки почты.

Ingvar

Вот этот код работает только на локальном почтовом сервере



Sub SaveAccountData()    ' запускать один раз - для записи в реестр Windows параметров почтового аккаунта
   SaveSetting Application.Name, "mail", "smtpserver", "smtp.mail.ru"    ' Ваш SMTPServer
   SaveSetting Application.Name, "mail", "sendusername", "vasya_pupkin@mail.ru"    ' Ваша учетная запись
   SaveSetting Application.Name, "mail", "sendpassword", "pup123456"    ' Ваш  пароль
End Sub

Sub Main()    ' Пример использования функции Send_Mail
   txt = "Это письмо сформировано макросом" & vbNewLine & _
         "без использования внешних программ и подключения дополнительных библиотек"
   If Send_Mail("ivan_ivanov@mail.ru", "vasya_pupkin@mail.ru", "проверка отправки почты", txt) Then
       MsgBox "Письмо успешно отправлено", vbInformation
   Else
       MsgBox "Не удалось отправить письмо", vbExclamation
   End If
End Sub


Function Send_Mail(ByVal MailTo As String, ByVal MailFrom As String, _
                  ByVal MailSubject As String, ByVal MailText As String, _
                  Optional ByVal MailAttachment As String = "") As Boolean
   ' функция для отправки почты без использования внешних почтовых программ
   ' ----------------------------------------------------------------------
   ' в качестве параметров получает:
   ' MailTo - адрес получателя письма
   ' MailFrom - адрес отправителя письма
   ' MailSubject - тема письма
   ' MailText - текст письма
   ' MailAttachment - полный путь к файлу вложения (необязательный параметр)
   ' ----------------------------------------------------------------------
   ' возвращает TRUE, если отправка почты произошла успешно, и FALSE в обратном случае

   Const cdoConfigURL = "http://schemas.microsoft.com/cdo/configuration/"
   On Error Resume Next: Err.Clear

   smtpserver = GetSetting(Application.Name, "mail", "smtpserver", "")
   sendusername = GetSetting(Application.Name, "mail", "sendusername", "")
   sendpassword = GetSetting(Application.Name, "mail", "sendpassword", "")
   If Len(smtpserver) = 0 Or Len(sendusername) = 0 Or Len(sendpassword) = 0 Then Exit Function

   Set cdoConfig = CreateObject("CDO.Configuration")
   With cdoConfig.Fields
       .Item(cdoConfigURL & "sendusing") = 2
       .Item(cdoConfigURL & "smtpauthenticate") = 1
       .Item(cdoConfigURL & "smtpserver") = smtpserver
       .Item(cdoConfigURL & "sendusername") = sendusername
       .Item(cdoConfigURL & "sendpassword") = sendpassword
       .Update
   End With

   Set cdoMessage = CreateObject("CDO.Message")
   With cdoMessage
       Set .Configuration = cdoConfig
       .BodyPart.Charset = "koi8-r"
       .From = MailFrom:
       .To = MailTo
       .Subject = MailSubject
       .TextBody = MailText
       If Len(MailAttachment) > 0 Then .AddAttachment MailAttachment
       .Send
   End With
   Set cdoMessage = Nothing: Set cdoConfig = Nothing

   '    If Err.Number = -2147220973 Then MsgBox ("Отсутствует связь с интернетом")
   '    If Err.Number = -2147220975 Then MsgBox ("SMTP сервер ответил отказом")
   '    If Err.Number = 0 Then MsgBox ("Письмо отправлено")
   Send_Mail = Err = 0
End Function


Как понять что блокирует доступ  во внешний нет через прокси иду.
И если нет возможности отправить напрямую через прокси то что делать? Какие есть варианты?

PS Я вот тут задумался исходя из спецификации протокола pop3 и smtp может написать свою приблуду для Excel&Access
кто подскажет в чём и как это лучше сдеать???

PSS Когда-то в стародавние времена програмировал на Asm,C++,Pascal(в т.ч. Delphi) =) я думаю с горем пополам(если взять в расчет время отсутствия необходимости в програмировании :))))  ) (ну окромя asm слишком много вариантов появилось команд и специфики по управлению процемм не осилю и не вижу необходимости)   Так вот в виде чего лучше написать данную приблуду?
Возможно есть исходники для C++ C Builder/Delphi  что собрать какой либо модуль/обьект с управлением получения и отправки данных.

Ingvar

Хотя возможно и не надо это делать %))))
Вот что я нашел на: http://www.freevbcode.com/ShowCode.asp?ID=109

Краткое описание:

vbSendMail.dll Version 3.65-- Easy E-mail Sending in VB, with Attachments

Author: Dean Dusenbery
Category: Network/Internet
Type: Classes
Difficulty: Advanced

Version Compatibility: Visual Basic 6 

More information: MOST RECENT VERSION UPGRADES (See documentation for full list):

    * v 3.65 09/10/2003:Add MaxRecipients Property,Improved compatibility on SMTP login authentication,removed extra blank line at beginning of message body, updated top-level domain list used in verifying whether an email address is valid, minor bug fixes.
    * v 3.54 03/23/2002:Minor bug fixes, including one incompabitbility with some Windows XP systems.
    * v 3.52 01/27/2002:Support for servers (like Yahoo.com) that require POP3 authentication before sending. Minor bug fixes and logic enhancements.
    * v 3.51 07/23/2001: Added support for automatically detecting the SMTP host through name server MX lookup. Added support for sending embedded images within HTML mail. Minor bug fixes and enhancements.

This project was originally developed by FreeVBCode.com, but Dean Dusenbery has taken ownership of it since version 2.0. He has done numerous version upgrades since that time. These upgrades represent a major improvement to the previous version. Thanks to Dean, the component is clearly of commericial quality, and probably one of the best available, commericial or non-commerical. FreeVBCode.com, along with all users of this component extend their eternal gratitude.

If you've ever wanted to send simple e-mail messages with Visual Basic, and you've tried struggling with third party .OCXs or Microsoft's unwieldy MAPI or CDO libraries, the vbSendMail.dll is for you. This simple to use component supports multiple file attachments and multiple copies of the same e-mail.

Sending an e-mail with this .dll is as simple as the following:

'Module Level Declaration (WithEvents optional but recommended)
Private WithEvents poSendMail as vbSendMail.clsSendMail
Private Sub cmdSend_Click()
'Assumes you have a form with text boxes named as below

set poSendMail = new vbSendMail.clsSendMail
poSendMail.SMTPHost = txtServer.Text
poSendMail.From = txtFrom.Text
poSendMail.FromDisplayName = txtFromName.Text
poSendMail.Recipient = txtTo.Text
poSendMail.RecipientDisplayName = txtToName.Text
poSendMail.ReplyToAddress = txtFrom.Text
poSendMail.Subject = txtSubject.Text
poSendMail.Attachment = txtFileName.text 'attached file name
poSendMail.Message = txtMsg.Text
poSendMail.Send
set poSendMail = nothing
End Sub

For multiple file attachments, an example would be:

poSendMail.Attachment = txtFileName1.text & ";" & txtFileName2.text

Note that this is only a small example of the component's capabilities and options, and you can use it for simple purposes, as described above, or use any number of its advanced features, as described in the documentation.

Two sample clients with .vbgs and detailed documentation are included.

Instructions: Click the link below to download the code. Select 'Save' from the IE popup dialog. Once downloaded, open the .zip file from your local drive using WinZip or a comparable program to view the contents.

Сейчас читаю и попробую прикрутить... о результатах отпишусь (всяко лучше на первое время... но сам хочу написать хотябы мааааааленькую приблуду).

Что вы думаете?

Ingvar

))) Диалог с самим сабой :)
Конечно хорошо поговорить с умным человеком но для получения наилучшего результата хочеться обсудить данный вопрос со всеми ;))))
Не верю что никто не задавался автоматизацией отправок по почте и приеме сообщений с обработкой их макросами.

PS Что то библиотека не прикручиватьеся :\  добавил вроде как а методы и классы из неё не тянутся.
Кто настраивал данную библиотеку?

GWolf

Цитата: Ingvar от 19.04.2011, 17:18
))) Диалог с самим сабой :)
Конечно хорошо поговорить с умным человеком но для получения наилучшего результата хочеться обсудить данный вопрос со всеми ;))))
Не верю что никто не задавался автоматизацией отправок по почте и приеме сообщений с обработкой их макросами.

Солидарен с Вами ув. Ingvar.
В свое время, я тоже озадачился отправкой сообщения из макроса, но, помучившись решения не нашел. Оставил проблему до лучших времен. Учитывая, что я не прогер.  :'( Жду вот, может кто поднимет тему вновь.
Кажется дождался.  :D
Путей к вершине - множество. Этот один из многих!

Ingvar

Цитата: GWolf от 20.04.2011, 07:35
Цитата: Ingvar от 19.04.2011, 17:18
))) Диалог с самим сабой :)
Конечно хорошо поговорить с умным человеком но для получения наилучшего результата хочеться обсудить данный вопрос со всеми ;))))
Не верю что никто не задавался автоматизацией отправок по почте и приеме сообщений с обработкой их макросами.

Солидарен с Вами ув. Ingvar.
В свое время, я тоже озадачился отправкой сообщения из макроса, но, помучившись решения не нашел. Оставил проблему до лучших времен. Учитывая, что я не прогер.  :'( Жду вот, может кто поднимет тему вновь.
Кажется дождался.  :D
Ага осталось еще найти пару тройку людей(програмистов)  и собрать инструмент по отправке почты макросами :)))
В своё время я делал связку Access+Excel+Outlook но к сожалению времена меняются :))) и сейчас не всегда стоит даже Excel ))) а что говорить об всех трех програмах :)))
Поэтому хочеться что-то универсальное :) но что можно встроить в Access/Excel  и я бы даже подумал о том чтобы встроить и в другие офисные пакеты ;) для большей универсальности.
PS Всетаки хочу инструмент код которого я знаю )
PSS Временно конечно можно заюзать локальный сервер ;) создав ящик аля авто-отчеты или т.п. ;)
PSSS Временно если получиться все настроить можно воспользоваться готовой библиотекой... только...
PSSSS Главное чтобы временное не стало постоянным.

ЗЫ Кстати если в код добавить строчки:
порт и использование аутентификации можно отправлять выше описанным кодом через CDO используя серверы Google,Yandex и т.п. требующие SSL.


Set cdoConfig = CreateObject("CDO.Configuration")
    With cdoConfig.Fields
        .Item(cdoConfigURL & "sendusing") = 2
        .Item(cdoConfigURL & "smtpserver") = SMTPserver
        .Item(cdoConfigURL & "smtpserverport") = 465         'порт для SSL: 465
        .Item(cdoConfigURL & "smtpauthenticate") = 1
        .Item(cdoConfigURL & "sendusername") = sendusername
        .Item(cdoConfigURL & "sendpassword") = sendpassword
        .Item(cdoConfigURL & "smtpusessl") = 1                  'использовать аутентификацию: да
        .Update
    End With


Andrey Lenets


Ingvar

Цитата: Andrey Lenets от 20.04.2011, 12:56
CDO и не ломать себе голову!  :D
ИМХО
Дык я тоже в общем то за это :) Но через внешние не оправляется. Скорей всего прокси блокирует.
Хотя я наверное создам на локальной серваке почтовый ящик аля АВТОПИСЬМА ;) или т.п.
Но есть зуд попрограмировать )) тем более спецификации поп и смтп смотрел они в общем то несложные )))

Ingvar

В общем сделал на локальном сервере отдельный ящик. и через CDO отправляю с него...

Но вопрос пока актуален на чем и как лучше написать модуль для экселя, акцесса по работе с почтой .
Исходники кодов с комментарием приветствуются )

ExcelFin

как-то не комильфо это - внутри эксела с почтой работать. Если уж "зуд", тогда лучше по-моему на vbscript что-то сваять (пересылка через CDO, обработка данных через Excel.Application, либо ADO). Это хоть в задания windows потом можно вставить. А макросом эксел снаружи управлять затруднительно.
http://www.excelfin.ru - для тех, кто не пользуется калькулятором

Ingvar

Ну почему же для части задач можно и через CDO.
например:
Есть книга с макросами которая формирует отчет при этом макросы используют возможности Access.
Отчет сформирован и этим же маросом его можно выделить в отделную книгу дооформить как надо и сразу отправить по почте нужным людям :))
Список адресов можно не прописывать в макросе, а прописать в листе Excel - типа в настройках...

Хотя если чесно хочется еще и другой вариант :) например мне каждый день приходят с 14-15 адресов отчеты )
разные но однотипные ))
Хочется их получать сводить и обрабатывать :))) но я пока не вижу другого варианта кроме как access+марокс на управление почтой(отправка+получение). Но данный вариант мне не очень нравиться :))) в силу определенных моментов. В будущем я часть данных отчетов думаю просто перетащить на получение данных в Oracle )))) к чему уже почва готовиться ))).
А пока потерплю ~120 писем в день ;)))



Andrey Lenets

Цитата: ExcelFin от 05.05.2011, 10:21
как-то не комильфо это - внутри эксела с почтой работать. Если уж "зуд", тогда лучше по-моему на vbscript что-то сваять (пересылка через CDO, обработка данных через Excel.Application, либо ADO). Это хоть в задания windows потом можно вставить. А макросом эксел снаружи управлять затруднительно.
вы забыли в конце добавить ИМХО!  :P
легко и не принужденно эксель отправляет почту и смс! одновременно подключается к любому файлу или БД, формирует отчёты, строит графики... и всё в одном флаконе! Можно даже без участия пользователя, можно в фоновом режиме! В чём проблема в задание WIN вставить ваш обработчик в экселе? При желании можно, в макрос передавать параметры из внешнего файла или запрашивать через интерфейс пользователя, тогда модуль становиться автономным  8)

Удачи!  ;)

ExcelFin

Цитироватьлегко и не принужденно эксель отправляет почту и смс! одновременно подключается к любому файлу или БД, формирует отчёты, строит графики... и всё в одном флаконе! Можно даже без участия пользователя, можно в фоновом режиме! В чём проблема в задание WIN вставить ваш обработчик в экселе? При желании можно, в макрос передавать параметры из внешнего файла или запрашивать через интерфейс пользователя, тогда модуль становиться автономным
да "можно и зайца научить курить"  ;) Только это все равно что танк использовать вместо такси. По-моему.

Почтовые приложения желательно разрабатывать, ориентируясь на почтовый сервер. Ну хотя бы потому, что клиентский компьютер может просто выключен быть в нужное время. С почтовым сервером могут быть свои проблемы: во-первых, он вообще скорее всего не виндовый ;) , во-вторых, вероятно там эксела нет и никто его туда ставить не будет.

А так конечно пределов возможного нет - знаю чувака, который шахматы на 1с написал (не шутка).
Удачи тож  :)
http://www.excelfin.ru - для тех, кто не пользуется калькулятором

GWolf

Цитата: Ingvar от 18.04.2011, 09:37
Добрый день.

Интересует отчетность и возможность работы с интерфейсами pop3, imap VB в экселе.
Какие библиотеки есть для этого?
Какие функции есть.
Хотелось бы пример отправки писем через протоколы с тестом или срезами данных находящихся в Excel.
Буду благодарен за различные примеры и варианты использования.


Добрый день!
Рискну напомнить с чего все началось и слова автора:
Цитировать...различные примеры и варианты использования.
!
А курить МИНЗДРАВ вообще не советует!
Я не офф-топлю, а призываю знающих людей, а они уже объявились, помочь, а не учить зайца курить! Извините. Сам с удовольствием готов воспринять чужой опыт!
С наилучшими пожеланиями GWolf.
Путей к вершине - множество. Этот один из многих!