:: Visual Foxpro, Foxpro for DOS
Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Добрый день!

Подскажите, пожалуйста, как указать время отправки письма при использовании CDO. Что-то не нашёл ни одного примера.
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
PaulWist

Сообщений: 14682
Дата регистрации: 01.04.2004
Что надо? Отправить в конкретные 14 час 10 мин??


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Да.
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
PaulWist

Сообщений: 14682
Дата регистрации: 01.04.2004
CDO не умеет, вешай на планировщик.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Я же сам формирую письма, и хотелось бы указывать время отправки. Иначе получается, они отправятся сразу.
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
PaulWist

Сообщений: 14682
Дата регистрации: 01.04.2004
Ну сформируй письма, сложи в таблицу.

На шедулер повесь прогу, которая будет просматривать табличку с письмами и отправлять их.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Нет уж. Возможно, надо формировать письма с помощью другого объекта или самого Outlook?
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
ABB
Автор

Сообщений: 153
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
А если так
Для указания времени отправки письма при использовании CDO (Collaboration Data Objects) в Visual FoxPro, вы можете использовать свойство "Date" объекта "Configuration.Fields" и установить нужное значение времени.

Ниже приведен пример кода:

lcServer = "smtp.example.com" && адрес сервера SMTP
lcRecipient = "example@example.com" && получатель
lcSender = "sender@example.com" && отправитель
lcSubject = "Тестовое письмо" && тема письма
lcBody = "Привет! Это тестовое письмо." && текст письма

loCDO = CreateObject("CDO.Message")
WITH loCDO.Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 && использовать SMTP для отправки
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = lcServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 && порт SMTP сервера
.Update()
ENDWITH

WITH loCDO
.Subject = lcSubject
.TextBody = lcBody
.To = lcRecipient
.From = lcSender

&& Установка времени отправки
lnHour = 10
lnMin = 30
lnSec = 0
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/Date") = DateTime(lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec)

.Send()
ENDWITH

RELEASE loCDO


В приведенном примере используется свойство "Date" объекта "Configuration.Fields" для установки времени отправки письма. Вы можете изменить значения переменных "lnHour", "lnMin" и "lnSec" для указания нужного времени отправки.

Но это ChatGPT
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
sphinx

Сообщений: 31519
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
PaulWist
Ну сформируй письма, сложи в таблицу.
На шедулер повесь прогу, которая будет просматривать табличку с письмами и отправлять их.

+1

Если время в системе совпало с ожидаемым - шлем, иначе сидим, боимся.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Увы,
Цитата:
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/Date") = DateTime(lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec)
не действует.
Но ещё более интересно, как в тело письма поместить красиво оформленный, например, в Word макет. Сами приложения, само собой, позволяют копировать внутрь, что угодно, но программно методов типа Paste, как в Word и Excel, в описании тоже не существует. Если сохранить файл, как HTML, к несчастью, в письмо не попадают картинки.



Исправлено 2 раз(а). Последнее : Аркадий, 15.09.23 17:16
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
ABB
Автор

Сообщений: 153
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Оператор .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/Date") позволяет установить значение для свойства Date в объекте Configuration. Однако, передаваемое значение должно быть объектом DateTime, чтобы это работало.

Проверьте, правильно ли заданы значения lnYear, lnMonth, lnDay, lnHour, lnMin и lnSec, и что они являются правильными значениями для даты и времени.

Возможно, вам также потребуется настроить другие свойства в объекте Configuration, чтобы успешно установить значение для свойства Date.

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

ChatGPT
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
lemenev

Сообщений: 148
Дата регистрации: 23.06.2022
&& Установка времени отправки (Не работает!)
lnYear = 2023
lnMonth = 9
lnDay = 17
lnHour = 10
lnMin = 30
lnSec = 0
lDateTime = DateTime(lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec)
.Configuration.Fields.Item(lcSchema + "Date") = lDateTime

Письмо отправляется в текущий, а не заданный момент.
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
ABB
Автор

Сообщений: 153
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
В Visual FoxPro вы можете использовать объекты CDO (Collaboration Data Objects) для отправки электронной почты с установкой отложенного времени.

Вот пример кода на Visual FoxPro, использующий CDO для установки отложенного времени отправки письма:

lnYear = 2023
lnMonth = 9
lnDay = 17
lnHour = 10
lnMin = 30
lnSec = 0

loCdoConfig = CREATEOBJECT("CDO.Configuration")
loCdoFields = loCdoConfig.Fields
WITH loCdoFields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 && Отправить через SMTP
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "SMTP сервер" && Замените на ваш SMTP сервер
.Update()
ENDWITH

loCdoMessage = CREATEOBJECT("CDO.Message")
WITH loCdoMessage
.Configuration = loCdoConfig
.Subject = "Тема письма"
.HTMLBody = "Текст письма"
.To = "example@example.com"
.Fields.Item("urn:schemas:mailheader:date") = TRANSFORM(DATETIME(lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec), "YYYY-MM-DD HH:MI:SS")
.Fields.Update()
.Send()
ENDWITH

RELEASE loCdoMessage
RELEASE loCdoFields
RELEASE loCdoConfig


В этом примере вы должны заменить "SMTP сервер" на реальный SMTP-сервер, который вы хотите использовать. Также замените "Тема письма" и "example@example.com" на реальные данные вашего письма.

Убедитесь, что на вашем компьютере установлен и настроен Microsoft CDO для отправки электронной почты через SMTP.

Ваш ChatGPT
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
К сожалению, всё равно отправляется сразу. Обычно подобные программы требуют ещё указания часового пояса в дате, не надо ли и тут такого?
Можно ли вообще где-то найти полное описание объекта "CDO.Message"?
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
ABB
Автор

Сообщений: 153
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
После некоторого общения получил следующий ответ:

В объекте "CDO.Message" время отправки почтового сообщения не устанавливается явным образом. Вместо этого время отправки соответствует моменту, когда вызывается метод "Send" для отправки письма.

Когда вы устанавливаете все необходимые свойства сообщения, такие как адрес отправителя, получателя, тему, содержание и другие, и вызываете метод "Send", письмо отправляется немедленно.

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

Объект "CDO.Message" сам по себе не предоставляет возможность задавать специфическое время отправки письма, и время отправки будет определяться моментом вызова метода "Send".

Увы
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Может быть, известно, каким свойством Outlook установить время отправки, если пользоваться непосредственно им? Тоже не нашёл примеров использования и описания всех свойств.
Или возможно ли в CDO.Message так составить HTMLBody, чтобы картинки (например, логотип организации) вставились в тело письма?
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
ABB
Автор

Сообщений: 153
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Для установки времени отправки письма в Visual FoxPro, вы можете использовать методы и свойства COM-объекта Outlook.Application.

Вот пример кода на Visual FoxPro, который устанавливает отложенное время отправки для письма:

lnYear = 2023
lnMonth = 9
lnDay = 17
lnHour = 10
lnMin = 30
lnSec = 0

loOutlook = CREATEOBJECT("Outlook.Application")
loMail = loOutlook.CreateItem(0)

WITH loMail
.Subject = "Тема письма"
.Body = "Текст письма"
.To = "example@example.com"
.DeferredDeliveryTime = DATETIME(lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec)
.Send()
ENDWITH

RELEASE loMail
RELEASE loOutlook


Обратите внимание, что код использует функцию DATETIME для создания объекта DateTime, необходимого для установки времени отправки. Вам также потребуется заменить "Тема письма", "Текст письма" и "example@example.com" на реальные данные вашего письма.

Убедитесь, что у вас установлена и настроена Outlook на вашем компьютере для правильного исполнения кода.
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Спасибо, так работает, и даже удаётся подменить ссылку на файл с картинкой в тексте письма на тег, включающий сам преобразованный в строку файл картинки, типа
<img width="307" height="275" src="data:image/png;base64,iVBORw0KGgoAAAAN ... SsAAAAASUVORK5CYII="/>,
если сохранить WORD как HTML. В этом случае картинка отображается в теле письма.
Хотелось бы ещё попробовать формат RTFBody. Возможно, с ним изображения в письме будут передаваться естественным образом. Однако при отправке RTF-файла получается ошибка то 0х8002000b invalid index, то 0х80010105 the server threw an exception. В примерах RTF-файл как-то конвертируется, но мне не удаётся.

Это примеры Microsoft
Цитата:
Sub GetRTFBodyForMail()
Dim oMail As Outlook.MailItem

Dim strRTF As String

If Application.ActiveInspector.CurrentItem.Class = olMail Then

Set oMail = Application.ActiveInspector.CurrentItem

strRTF = StrConv(oMail.RTFBody, vbUnicode)

Debug.Print strRTF

End If

End Sub

Цитата:
private void GetRTFBodyForMail()
{

if (Application.ActiveInspector().CurrentItem is Outlook.MailItem)

{

Outlook.MailItem mail =

Application.ActiveInspector().CurrentItem as Outlook.MailItem;

byte[] byteArray = mail.RTFBody as byte[];

System.Text.Encoding encoding = new System.Text.ASCIIEncoding();

string RTF = encoding.GetString(byteArray);

Debug.WriteLine(RTF);

}

}
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
ABB
Автор

Сообщений: 153
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Я выступал в этом случае как медиум между вами и ChatGPT
Если у вас есть желание пообщаться с ним напрямую - бот в телеграме t.me
Ratings: 0 negative/0 positive
Re: Как задать время отправки электронного письма
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Аркадий
как указать время отправки письма при использовании CDO
А возможно ли? Ход мысли такой. CDO – это не самостоятельный отдельно работающий сервис, а объект, который создаётся нашей прогой и перестаёт существовать, а значит и работать, как только сделаем release. Поэтому отложить на потом свою работу (отправку письма) не может – он же потом существовать не будет. По .Send он обращается к smtp-серверу, шлёт ему команды и данные для отправки письма, результат возвращает нам. Тут же исчезает (по release).
Другое дело, если бы smtp-сервер, через который шлём, позволял каким-то образом указать ему, что он должен отправить (вернее, начать пытаться отправить) не сразу, а с задержкой. Но есть ли это в smtp-протоколе, не знаю, в RFC 5321 сходу не увидел, может не там смотрел. Ну да, в веб-интерфейсе всяких Яндекс-почт при написании письма есть такой параметр, но это ж совсем другое.
----
Вопросы на тему имейл.
1. Можно ли как-то сделать, чтобы отправленное из программы письмо оставалось на сервере в папке Отправленные? При отправке через CDO это не происходит (пробовал GMail, Яндекс Почта, Mail.ru). Или для этого нужен какой-нибудь imap?

2. Поделитесь, пожалуйста, готовым классом или заготовкой для удобного ввода email-адресов. Предполагаю, что там 2 textboxa. Один для username – с проверкой допустимых символов. Другой для домена – с включенным AutoComplete (чтоб всякие "mail.ru" каждый раз не набирать) и тоже проверкой. Может, какие-то более интересные варианты есть. Просто неохота с нуля велосипед рисовать))
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 17 (Гостей: 17)

© 2000-2024 Fox Club 
Яндекс.Метрика