Тема: Отправить почтовое сообщение по внешней почте

Хочу командой тдмс отправить сообщение адресату по внешней почте. Все создается, но отправляется только по нажатию кнопки отправить. А как сделать чтоб оно отправилось в любом случае?

ниже пример , но без автоматической отправки:

Call SendExtEMail()

Sub SendExtEMail()
        Dim ToWhom, strSubj, strBody
        Set ToWhom = ThisApplication.Users("SYSADMIN")
        strBody = "текст письма"
        strSubj = "текст темы"
        ThisApplication.Utility.SendEMail ToWhom.Mail, strSubj, strBody
End Sub

Re: Отправить почтовое сообщение по внешней почте

Если задача именно "отправить ту почту, которая была создана", то надо воспользоваться методом SendReceiveExtMail()
    Member of TDMS.TDMSUtility
    method SendReceiveExtMail

Re: Отправить почтовое сообщение по внешней почте

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

Re: Отправить почтовое сообщение по внешней почте

Попытаюсь пролить свет на эти вопросы:

В TDMS есть внутренняя и внешняя почта.
Далее я опишу несколько методов посылки внешней почты.

1. Создаем обычное письмо средствами TDMS, и в поле To - указываем внешний адрес

 
set Message = ThisApplication.CreateMessage

Message.To = "Me@pochta.ru"  ' Это внешний адрес
Message.Body = "Привет"
Message.Subject = "  :) "
Message.Send

Теперь это письмо попадет в базу данных TDMS и будет там лежать до тех пор, пока SYSADMIN не войдет в
Меню -> Системные -> Параметры [ вкладка "Внешняя почта"] и нажмет на кнопку "Отправить/получить"
Или пока не вызовет метод ThisApplication.Utility.SendReceiveExtMail (который работает также как и кнопка "Отправить/получить")
После чего письмо уйдет наружу.

Для успешного выполнения, необходимо чтобы были заполненны все поля в настройках POP3 и SMTP серверов.
Потому что этот метод сначала получает внешнюю почту c POP3 сервера (чтобы потом разослать ее внутренним адресатам в TDMS)
А потом отсылает то что в базе через SMTP.

2. Вариант - Можно использовать метод ThisApplication.Utility.SendEMail Tol,  Subj, Body
Этот метод работает через Windows Shell,  вызывается команда "mailto:"
После чего происходит загрузка дефолтовой почтовой программы, и через командную строку в ней заполняются нужные поля, в открывшемся диалоге.
Минус или плюс, такого метода в том, что пользователь должен нажать на кнопку "Отправить" в открывшемся диалоге.

3. Вариант. Если нам надо "втихаря" отослать письмо наружу, и никого об этом не спрашивать и не уговаривать,
можно воспользоваться стандартной службой Windows
Ниже приведен пример


    Set objConf = CreateObject("CDO.Configuration")
    Set objEmail = CreateObject("CDO.Message")
    Set objFlds = objConf.Fields

    With objFlds
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'cdoSendUsingPort это порт
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "MyMail" ' Имя SMTP сервера
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 'Это SMTP аутентификация, тут она у нас нулевая (т.е ее нет)
        .Update
    End With


     Set objEmail.Configuration = objConf
     objEmail.From = "me@pochta.ru"
     objEmail.To = "emu@pochta.ru"
     objEmail.Subject = "subj"
     objEmail.Textbody = "body"
     objEmail.DSNOptions = 14  'Success, failure or delay (cdoDSNSuccessFailOrDelay)
     objEmail.Fields.Update
     objEmail.Send

После чего письмо уйдет куда надо. Если конечно были правильно указанны настройки портов и всего прочего.

Re: Отправить почтовое сообщение по внешней почте

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

   With objFlds
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'cdoSendUsingPort это порт
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "MyMail" ' Имя SMTP сервера
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 'Это SMTP аутентификация, тут она у нас нулевая (т.е ее нет)
        .Update
    End With
...
     objEmail.DSNOptions = 14  'Success, failure or delay (cdoDSNSuccessFailOrDelay)
...

Отправить почтовое сообщение по внешней почте

Re: Отправить почтовое сообщение по внешней почте

Присвойте этому полю 2
  .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  Это не порт сервера

  Порт сервера устанавливается этим полем
  .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 
Если не поможет, значит что то не так с SMTP аутентификацией. Посмотрите какие у вас настройки SMTP аутентификации в OutLook'e и пришлите скриншот. Попробуем разобраться. Пароли, только не забудьте затереть smile
Что касается IP - все зависит от настроек вашего SMTP сервера. Я не знаю, что он в заголовке письма пропишет.
Наш например прописывает локальные IP [127.0.0.1]

Re: Отправить почтовое сообщение по внешней почте

1. Создаем обычное письмо средствами TDMS, и в поле To - указываем внешний адрес

 set Message = ThisApplication.CreateMessageMessage.To = "Me@pochta.ru"  ' Это внешний адресMessage.Body = "Привет"Message.Subject = "   "Message.Send

Теперь это письмо попадет в базу данных TDMS и будет там лежать до тех пор, пока SYSADMIN не войдет в
Меню -> Системные -> Параметры [ вкладка "Внешняя почта"] и нажмет на кнопку "Отправить/получить"
Или пока не вызовет метод ThisApplication.Utility.SendReceiveExtMail (который работает также как и кнопка "Отправить/получить")
После чего письмо уйдет наружу.

Вопрос: может ли обычный пользователь вызвать "ThisApplication.Utility.SendReceiveExtMail" ?
К примеру написать "ThisScript.Permissions = Sysadminpermissions", либо создать команду из одной строки с св-вом "не проверять права"?

Или же в любом случае send-recieve должен выполнить SYSADMIN?

Re: Отправить почтовое сообщение по внешней почте

Anatoly пишет:

Вопрос: может ли обычный пользователь вызвать "ThisApplication.Utility.SendReceiveExtMail" ?

Может. У нас нет, на эту команду проверки прав

Re: Отправить почтовое сообщение по внешней почте

спасибо. третий способ заработал.