Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создать почтовое сообщение

1.9K
09 декабря 2003 года
Libarus
49 / / 30.10.2003
Уважаемые!
Подскажите, пожалуйста, как создать почтовое сообщение в почтовой программе, по умолчанию установленной в виндах?
Пасиб!
258
09 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Libarus
Уважаемые!
Подскажите, пожалуйста, как создать почтовое сообщение в почтовой программе, по умолчанию установленной в виндах?
Пасиб!



Это делается:
1. через MAPI, здеся почитай: http://forum.codenet.ru/showthread.php?s=&threadid=11786&highlight=MAPI

2. написать свою или использовать чужую библиотеку /класс в которая берет на себя подготовку и отправку сообщения в нужном формате. Как правило они используют сетевую библиотеку низкого уровня mswinsock

P.S. кстати, не обязательно плодить разные топики, я уже чуть в тот не ответил ;-)

1.9K
09 декабря 2003 года
Libarus
49 / / 30.10.2003
Цитата:
Originally posted by SergeySV


Это делается:
1. через MAPI, здеся почитай: http://forum.codenet.ru/showthread.php?s=&threadid=11786&highlight=MAPI

2. написать свою или использовать чужую библиотеку /класс в которая берет на себя подготовку и отправку сообщения в нужном формате. Как правило они используют сетевую библиотеку низкого уровня mswinsock

P.S. кстати, не обязательно плодить разные топики, я уже чуть в тот не ответил ;-)



А как можно из программы на VB создать новое сообщение с аттачментом используя почтовую программу по умолчанию?

258
09 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Libarus


А как можно из программы на VB создать новое сообщение с аттачментом используя почтовую программу по умолчанию?



так через MAPI и будет помойму использоваться программа по умолч. (если я не ошибаюсь, то все должно браться от туда: настройки соединения с сервером, учетные записи, пароли и т.д. )

258
09 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Libarus


А как можно из программы на VB создать новое сообщение с аттачментом используя почтовую программу по умолчанию?



Да, забыл еще уточнить, какой именно смысл ты вкалдываешь в слова - использовать программу по умолчанию...?

как ты ее хочешь использовать? тебе нужно запустить ее и прям на глазах у пользователя отправить письмо?, обратиться к адресной книги этой программы?, обязательно чтобы посланное письмо отразилось в папке Отправленное этой программы?...

1.9K
09 декабря 2003 года
Libarus
49 / / 30.10.2003
Цитата:
Originally posted by SergeySV


Да, забыл еще уточнить, какой именно смысл ты вкалдываешь в слова - использовать программу по умолчанию...?

как ты ее хочешь использовать? тебе нужно запустить ее и прям на глазах у пользователя отправить письмо?, обратиться к адресной книги этой программы?, обязательно чтобы посланное письмо отразилось в папке Отправленное этой программы?...



Скажем так, программа должна:
1 сформировать запрос
1.1 создать из него файл на диске
1.2 создать из него текстовую переменную.
2 открыть почтовую программу на редактирование нового сообщения и в зависимости от 1п. либо приаттачить файл или вложить текст в сообщение.
3 Далее предоставить пользователю выбрать адрес и нажать кнопку отправить.

258
09 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Libarus


Скажем так, программа должна:
1 сформировать запрос
1.1 создать из него файл на диске
1.2 создать из него текстовую переменную.
2 открыть почтовую программу на редактирование нового сообщения и в зависимости от 1п. либо приаттачить файл или вложить текст в сообщение.
3 Далее предоставить пользователю выбрать адрес и нажать кнопку отправить.



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

266
09 декабря 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by SergeySV


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


Я думаю, уважаемому Libarus'у проще будет подключить аутглюковскую библиотеку к проекту и работать с её свойствами, событиями и методами. Хоть Help по ней более-менее, наверняка, полный в Офисе.

1.9K
09 декабря 2003 года
Libarus
49 / / 30.10.2003
Цитата:
Originally posted by mhaturov

Я думаю, уважаемому Libarus'у проще будет подключить аутглюковскую библиотеку к проекту и работать с её свойствами, событиями и методами. Хоть Help по ней более-менее, наверняка, полный в Офисе.



Уважаемый, mhaturov, мне в идеале надо отправить письмо с машины где установлен только access (никакого офиса) и почтовая программа. Причем письмо надо отправить из access по кнопке. Все, больше ничего нет.

Может, всезнающий all поскажет как запустить внешнюю программу на Visual Basic?

В частности почему ругается на ненайден файл в строке Call Shell("mailto:mail@mail.ru", vbNormalFocus) ?

266
09 декабря 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Libarus


Уважаемый, mhaturov, мне в идеале надо отправить письмо с машины где установлен только access (никакого офиса) и почтовая программа. Причем письмо надо отправить из access по кнопке. Все, больше ничего нет.

Может, всезнающий all поскажет как запустить внешнюю программу на Visual Basic?

В частности почему ругается на ненайден файл в строке Call Shell("mailto:mail@mail.ru", vbNormalFocus) ?


Ну, насколько я знаю, Аутглюк работает при помощи определённых библиотек, и то, что отображается на экране компа, только оболочка под эти библиотеки. Поэтому, если у пользователя нет Аутглюка, это вовсе не значит, что на его машину нельзя каким-либо образом установить аутглюковские библиотеки (вручную, как я раньше описывал, или при помощи SetUp'а Вашей программы), и работать с ними, сделав свой интерфейс, (по интерфейсом я понимаю не только то, что пользователь будет видеть какие-либо окна, а ещё и то, что окна пользователю нафиг не нужны. Например, набирает он в текстовом окне текст, указывает, какой файл приаттачить, а дальше аутглюковские библиотеки сами разбираются, что и куда и как отправить. Только настройки им надо передать так, как это делается при настройке клиента (их, например, можно в инишнике хранить, и оттуда читать (ну там pop-сервера и т.д. - без них НИ ОДНИ КЛИЕНТ не заработает))).

258
09 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Libarus


Уважаемый, mhaturov, мне в идеале надо отправить письмо с машины где установлен только access (никакого офиса) и почтовая программа. Причем письмо надо отправить из access по кнопке. Все, больше ничего нет.

Может, всезнающий all поскажет как запустить внешнюю программу на Visual Basic?

В частности почему ругается на ненайден файл в строке Call Shell("mailto:mail@mail.ru", vbNormalFocus) ?



Так в Виндах MAPI по умолчанию идет, вообщем опять же я не вижу проблем в твоей ситуации с ипользованием MAPI.

В прилагаемом твоем варианте ты не сможешь программно приатачить файл -
то раз,
во вторых: Shell так не запустит, надо использовать функцию winAPI, вот ее вариант обертки для использования в VBA (само описание функ. конечно надо разместить в модуле):

функция не моя, выкладываю как есть

Код:
'************ Code Start **********



Private Declare Function apiShellExecute Lib "shell32.dll" _
                                         Alias "ShellExecuteA" _
                                         (ByVal hWnd As Long, _
                                          ByVal lpOperation As String, _
                                          ByVal lpFile As String, _
                                          ByVal lpParameters As String, _
                                          ByVal lpDirectory As String, _
                                          ByVal nShowCmd As Long) _
                                         As Long

'***App Window Constants***
Public Const WIN_NORMAL = 1    'Open Normal
Public Const WIN_MAX = 2    'Open Maximized
Public Const WIN_MIN = 3    'Open Minimized

'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

'***************Usage Examples***********************
'Open a folder: ?ShellExecuteMy("C:\TEMP\",WIN_NORMAL)
'Call Email app: ?ShellExecuteMy("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL: ?ShellExecuteMy("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
' ?ShellExecuteMy("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
' ?ShellExecuteMy("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************

Function ShellExecuteMy(stFile As String, lShowHow As Long)
    Dim lRet As Long, varTaskID    As Variant
    Dim stRet                      As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
                           stFile, vbNullString, vbNullString, lShowHow)

    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                                & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found. Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error: Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    ShellExecuteMy = lRet & _
                     IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********
258
09 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Libarus


Уважаемый, mhaturov, мне в идеале надо отправить письмо с машины где установлен только access (никакого офиса) и почтовая программа. Причем письмо надо отправить из access по кнопке. Все, больше ничего нет.

Может, всезнающий all поскажет как запустить внешнюю программу на Visual Basic?

В частности почему ругается на ненайден файл в строке Call Shell("mailto:mail@mail.ru", vbNormalFocus) ?



Так в Виндах MAPI по умолчанию идет, вообщем опять же я не вижу проблем в твоей ситуации с ипользованием MAPI.

В прилагаемом твоем варианте ты не сможешь программно приатачить файл -
то раз,
во вторых: Shell так не запустит, надо использовать функцию winAPI, вот ее вариант обертки для использования в VBA (само описание функ. конечно надо разместить в модуле):

функция не моя, выкладываю как есть

Код:
'************ Code Start **********



Private Declare Function apiShellExecute Lib "shell32.dll" _
                                         Alias "ShellExecuteA" _
                                         (ByVal hWnd As Long, _
                                          ByVal lpOperation As String, _
                                          ByVal lpFile As String, _
                                          ByVal lpParameters As String, _
                                          ByVal lpDirectory As String, _
                                          ByVal nShowCmd As Long) _
                                         As Long

'***App Window Constants***
Public Const WIN_NORMAL = 1    'Open Normal
Public Const WIN_MAX = 2    'Open Maximized
Public Const WIN_MIN = 3    'Open Minimized

'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

'***************Usage Examples***********************
'Open a folder: ?ShellExecuteMy("C:\TEMP\",WIN_NORMAL)
'Call Email app: ?ShellExecuteMy("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL: ?ShellExecuteMy("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
' ?ShellExecuteMy("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
' ?ShellExecuteMy("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************

Function ShellExecuteMy(stFile As String, lShowHow As Long)
    Dim lRet As Long, varTaskID    As Variant
    Dim stRet                      As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
                           stFile, vbNullString, vbNullString, lShowHow)

    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                                & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found. Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error: Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    ShellExecuteMy = lRet & _
                     IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********
1.9K
10 декабря 2003 года
Libarus
49 / / 30.10.2003
В общем что-то понятно.
Теперь еще один вопрос. В итоге я отправляю письмо таким образом:

 
Код:
ms1 = "mailto:mail@mail.ru?subject=subj&body=bodys"

ShellExecute Me.hwnd, vbNullString, ms1, vbNullString, vbNullString, 1


Можно ли как-нибудь без участия пользователя анализировать произошла ли отправка письма или нет и принимать решение в зависимости от результата?
258
10 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Нет, при такой отправки письма это невозможно.

Такой способ вообще был внедрен Microsoft'ом как раз для случаев когда программа должна просто открыть письмо с заполненным адресом, для заполнения его пользователем и чтобы программисты не ломали себе голову по поводу почтовой программы по умолч. и т.д. для такой простой задачи...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог