Отправка почты. Нужна ли какая либо длл?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Отправка почты. Нужна ли какая либо длл?

Сообщение Don Leno » 05.08.2014 (Вт) 10:48

Код: Выделить всё
Dim o_Mess As Object, v_Conf As String
Set o_Mess = CreateObject("CDO.Message")
v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
With o_Mess
    .To = "КОМУ"
    .From = "ОТ КОГО"
    .Subject = "ТЕМА"
    .TextBody = "ТЕЛО СООБЩЕНИЯ"
With .Configuration.Fields
    .Item(v_Conf & "sendusing") = 2
    .Item(v_Conf & "smtpserver") = "smtp.mail.ru"
    .Item(v_Conf & "smtpauthenticate") = 1
    .Item(v_Conf & "sendusername") = "E-MAIL"
    .Item(v_Conf & "sendpassword") = "Пароль"
    .Item(v_Conf & "smtpserverport") = 25
    .Item(v_Conf & "smtpusessl") = False
    .Item(v_Conf & "smtpconnectiontimeout") = 60
    .Update
End With
    .send
End With

Суть вопроса к этой строчке кода
Код: Выделить всё
Set o_Mess = CreateObject("CDO.Message")
нужна ли какая нибудь внешняя длл чтобы использовать этот объект в своей программе?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение Хакер » 05.08.2014 (Вт) 11:00

Естественно нужна.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение Don Leno » 05.08.2014 (Вт) 11:17

Какая? И достаточно ее будет такскать в папке с программой для работы функции?

alexnn
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 31.07.2014 (Чт) 16:05

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение alexnn » 05.08.2014 (Вт) 13:01

Скорее всего эта библеотека из стандартного набора Windows.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение Don Leno » 05.08.2014 (Вт) 13:27

Вопрос в том какая именно библиотека? Как мне ее найти?

alexnn
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 31.07.2014 (Чт) 16:05

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение alexnn » 05.08.2014 (Вт) 14:31

Запусти в проекте Package and Deployment Wizard (меню "Добавления") и сделай установочную версию проекта (setup файл). В процессе ее создания поставь галочку "Копировать необходимые DLL библиотеки в ту же папку". Потом зайди в эту папку и посмотри, что там появилось.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение Хакер » 05.08.2014 (Вт) 14:38

Don Leno писал(а):Какая?

В общем случае какая угодно. Может быть даже до обеда одна, а после обеда — другая.

Ты хочешь отправлять почту, но не хочешь понимать суть вещей. Технология ActiveX предлагает тебе думать о компонентах, а не о DLL-файлах, внутри которых расположен код этих компонентов. Для тебя же первичен именно класс CDO.Message, а не какой-то там файл.

Поэтому технология предоставляет тебе концепцию, когда для создания экземпляра класса ты даёшь информацию только о классе, экземпляр которого тебе нужен, а не о EXE или DLL, который обеспечит его работу. Ни ты, ни твой программа — не думаете о DLL-файле, только о самом классе.

И сама система берёт на себя задачу: по информации о нужном классе найти расположение нужной DLL. Для этой цели она использует реестр, где содержится информация о соответствии классов и ActiveX-серверов (то есть DLL/OCX/EXE-файлов), обеспечивающих порождение экземпляров и их работу.

Информация попадает туда в момент регистрации ActiveX-сервера. EXE-серверы регистрируют себя сами. DLL-серверы предоставляют экспортируемую функцию, которая может быть вызвана с лёгкостью, например, с помощью утилиты regsvr32. Или она может туда попасть ещё каким-то путём. Главное, чтобы она туда попала.

Регистрация компонента происходит при установке компонента на компьютер.

Поэтому, во-первых, ты не можешь просто взять DLL-файл и «такскать в папке с программой». Это ничего не даст, поскольку система ищет DLL-файл для CDO.Message глядя в реестр, и если в реестре ничего нет, то никакого толку от лежащего рядом файла не будет абсолютно.

Во-вторых, не читая лицензионного соглашения, принимать решение таскать в папке с программой некий DLL-файл — мало того, что бесполезно, но ещё и отличный способ стать преступником. Далеко не каждое ПО имеет лицензию, разрешающую свободно распространять вместе с чужим софтом свои кусочки.

Если тебе необходимо создавать экземпляры класса CDO.Message, значит ты должен позаботиться, чтобы компонент «CDO» был установлен на целевой машине. Установлен ли он на любой машине, или только на некоторых, и если да, то на каких, и с каким софтом он там появился, и можно ли установить его туда, где его нет, самостоятельно — всё это индивидуально для каждого компонента, и в каждом отдельном случае ты должен узнавать это у разработчика и поставщика компонента (у его поддержке, в его хелпе и т.д.).

На своём компьютере ты можешь узнать, какой DLL-файл отвечает за CDO.Message — но это малополезная информация, потому что на другом компьютере может быть установлена другая версия CDO, в которой за это отвечает уже другой DLL-файл. В разных версиях одного компонента, пусть даже это будет внешне абсолютно один и тот же CDO.Message, но изнутри разница между двумя слабо отличающимися версиями может быть разительной. Это могут быть разные DLL-файлы, или разные наборы, которые могут жить в разных местах.

Тебе не нужно думать о файлах, тебе нужно думать о компоненте. Тебе нужно задаваться вопросом не «какие файлы скопировать на целевую машину», а «как на целевую машину установить компонент X».

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

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

На конкретно взятом компьютере найти DLL-библиотеку по имени ActiveX-класса легко, это делается в два шага. Вот например, на моём:
cdo_lib_actxdll_location.png
cdo_lib_actxdll_location.png (46.85 Кб) Просмотров: 1988


Но использовать эту информацию не в глобальном плане нельзя — после обеда может быть выйдет другая версия CDO, которая будет жить в другом файле, который будет лежать в другом месте. А завтра — третья.

Так что нужно рассматривать компонент как чёрный ящик, и для того, чтобы чёрный ящик оказался на чужой машине, где он потребуется нашей программе, его нужно там инсталлировать в соответствии с инструкцией к чёрному ящику. Инструкцию даёт производитель.

В случае CDO производитель — Microsoft.
Документацию нужно искать на сайте MSDN.

Раздел по CDO: http://msdn.microsoft.com/en-us/library ... 10%29.aspx

Информация по установке CDO: http://msdn.microsoft.com/en-us/library ... 10%29.aspx

Там что-то говорится про Microsoft Exchange Server и Outlook. Вот видимо с ними компонент и появляется на компьютерах. Читай, разбирайся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Отправка почты. Нужна ли какая либо длл?

Сообщение Don Leno » 05.08.2014 (Вт) 15:43

Хакер, ты как всегда - прав!))) Спасибо, за столь развернутый ответ. Мне это очень помогло. Буду разбираться с этим и решать что лучше для меня. Может лучше написать свой код для работы с почтой, как альтернатива вызываемому CDO.Message)) Чтобы не нарушать ничьих авторских прав))


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

    TopList