:: Visual Foxpro, Foxpro for DOS
как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
Ситуация такая: у меня два почтовых ящика (учетных записи), "ЯЩИК1" и "ящик2". Нужно чтобы при создании письма (из Fox-а) письмо создавалось от имени "ящика2". Сейчас независимо от того, какой ящик я указываю (через интерфейс OutLook) как ящик по-умолчанию, почта упорно генерится от "ЯЩИК1". Перерыл "весь" инет. Даже, просто, на уровне VBA вопрос много кто задает, но ответов не нашёл.

Вопрос1: может кто подсказать как это делать
.SendUsingAccount
.SentOnBehalfOfName
не помогают



Вопрос2: на msdn (https://msdn.microsoft.com/ru-ru/vba/outlook-vba/articles/create-a-sendable-item-for-a-specific-account-based-on-the-current-folder-outloo) нашёл в последний момент, вроде как то что нужно, но пример дан на c#. при первом взгляде ничего не понял. Может есть те, кто не особо напрягаясь этот код на FoxPro переведет ?

private void CreateMailItemFromAccount()
{
Outlook.AddressEntry addrEntry = null;
// Get the store for the current folder.
Outlook.Folder folder =
Application.ActiveExplorer().CurrentFolder
as Outlook.Folder;
Outlook.Store store = folder.Store;
Outlook.Accounts accounts =
Application.Session.Accounts;
// Match the delivery store of each account with the
// store for the current folder.
foreach (Outlook.Account account in accounts)
{
if (account.DeliveryStore.StoreID ==
store.StoreID)
{
addrEntry =
account.CurrentUser.AddressEntry;
break;
}
}
// Create MailItem. Account is either the primary
// account or the account with a delivery store
// that matches the store for the current folder.
Outlook.MailItem mail =
Application.CreateItem(
Outlook.OlItemType.olMailItem)
as Outlook.MailItem;
if (addrEntry != null)
{
//Set Sender property.
mail.Sender = addrEntry;
mail.Display(false);
}
}


заранее спасибо.



Исправлено 1 раз(а). Последнее : sb69, 02.07.18 14:46
Ratings: 0 negative/0 positive
Re: как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Для правильного "перевода" нужно сам аутлук иметь установленным
А так - если объектная модель дотнетовского интеропа и активиксового аутлука совпадают, то вся логика тут, и ничего супер-сложного в ней я не вижу
Application - это объект аутлука.

// получаем текущую папку
folder = Application.ActiveExplorer().CurrentFolder
// получаем хранилище для этой папки
store = folder.Store
// получаем список аккаунтов
accounts = Application.Session.Accounts
// пробегаемся по аккаунтам и находим AddressEntry для того, чья папка доставки имеет тот же StoreID
// (грубо говоря Store это pst файл, т.е. файл где хранится вся инфа аккаунта - все его папки и т.п.)
// что и найденное выше StoreID для "текущей папки".
// По сути это AddressEntry для текущего активного аккаунта.
foreach account in accounts
if account.DeliveryStore.StoreID == store.StoreID
addrEntry = account.CurrentUser.AddressEntry;
exit
endif
endfor
...
// Прописываем для только что созданного письма "Отправителя".
mail.Sender = addrEntry;


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
Игорь, спасибо большое.
Код заработал, но вопреки написанному Майкрософтом, переключение на нужный ящик (учетку) не происходит.
Цикл крутит, текущий аккаунт (по папке на которой стоит курсор в Аутлуке) определяет правильно... а письмо как создавалось от "ЯЩИК1" так только от него и создается
#DEFINE MAILITEM 0
*
loOutlook = GETOBJECT('','Outlook.application')
* получаем текущую папку
loFolder = loOutlook.ActiveExplorer().CurrentFolder
* получаем хранилище для этой папки
loStore = loFolder.Store
* получаем список аккаунтов
loAccounts = loOutlook.Session.Accounts
* пробегаемся по аккаунтам и находим AddressEntry для того, чья папка доставки имеет тот же StoreID (грубо говоря Store это pst файл,
* т.е. файл где хранится вся инфа аккаунта - все его папки и т.п.) что и найденное выше StoreID для "текущей папки". По сути это AddressEntry для текущего активного аккаунта.
FOR each account in loAccounts
IF account.DeliveryStore.StoreID = loStore.StoreID
WAIT WINDOW account.UserName
loAddressEntry = account.CurrentUser.AddressEntry
ENDIF
ENDFOR
*
loEmailItem = loOutlook.CreateItem(MAILITEM)
* Прописываем для только что созданного письма "Отправителя".
loEmailItem.Sender = loAddressEntry
loEmailItem.GetInspector.Display
signature = loEmailItem.HTMLbody
WITH loEmailItem
.Display
.Recipients.Add('''.phorum_html_encode('test@yandex.ru').''') && uses the Recipients collection
.Subject = 'test'
.BodyFormat = 2
.HTMLBody = signature
.Save
ENDWITH
Ratings: 0 negative/0 positive
Re: как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Смотришь поле From, Sender или Replay-To?
Учётки настроены на разные smtp сервера, или там вообще не smtp отправка?
"Вручную" послать можешь с нужной учётки? Ну и сравнить заголовки "ручного" и автоматического писем...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
IMAP/SMTP (яндексовские ящики) …
вручную всё работает уже не первый год.
в поле From могу выбрать любой из двух ящиков.

ощущение, что не работает
loEmailItem.Sender = loAddressEntry,

также как и
.SendUsingAccount
.SentOnBehalfOfName


ну и намутил Майкрософт ...
Ratings: 0 negative/0 positive
Re: как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Я про пришедшее письмо - там какие заголовки про отправителя имеются? Просто их много, и они разный смысл имеют. Можно послать с одного, но указать что это пересылка с другого адреса (так Forward работает), можно явно указать что отвечать нужно на третий ящик...
А в общем - увы, без аутлука, да ещё и такой же версии, нереально разобраться что там "не так" идёт.
А вообще по задаче, тем паче что не эксчейндж, зачем аутлук то? Может сразу по smtp и отсылать - даже решения кой какие были...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как при создании письма (из FoxPro) в OutLook выбрать учетную запись (почтовый ящик) от которого отправлять
sb69
Автор

Сообщений: 22
Дата регистрации: 23.06.2018
про почтового smtp-клиента помню

всё что сейчас делаю - попытка автоматизировать и сохранить старую возможность делать вручную …
ну и честно, не ожидал подводных камней от Майкрософт, казалось что всё уже должно быть "прямо как написано" …
Ratings: 0 negative/0 positive


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

On-line: 30 WbrErr  (Гостей: 29)

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