AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.04.2007, 18:01   #1  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Коллеги, поделитесь опытом.

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

На первый взгляд прорисовываются следующие пути:
1) Заставить почтового клиента сохранять файлы куда-нить в общие папки, дальше все очевидно.
2) Непосредственно из Навыжна общаться с почтовым сервером и тащить аттачменты.

На все тот же первый взгляд первый путь проще, но вот аутлук через стандартные правила я не смог заставить сохранять аттачменты из писем с определенного адреса в конкретное место.
Есть ли простые пути заставить аутлук это делать?
Или, возможно, другой почтовый клиент просто настраивается?
Или проще все-таки пойти по второму пути?
Поделитесь соображениями, пожалуйста, кто решал подобные проблемы.
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 11.04.2007, 18:45   #2  
foxsoft2005 is offline
foxsoft2005
Участник
Аватар для foxsoft2005
 
93 / 10 (1) +
Регистрация: 21.11.2006
Цитата:
Сообщение от Дуд Посмотреть сообщение
Коллеги, поделитесь опытом.

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

На первый взгляд прорисовываются следующие пути:
1) Заставить почтового клиента сохранять файлы куда-нить в общие папки, дальше все очевидно.
2) Непосредственно из Навыжна общаться с почтовым сервером и тащить аттачменты.

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

А чем не нравится вариант получения аттачей прямо из навижена? К примеру - заводим в аутлуке спец папку, в которую падают все письма с нужного адреса (это можно настроить), в навижене получаем этим письма из указанной папки, сохраняем аттачи, например, в путь, который указан в переменной окружения TEMP и обрабатываем их. После удаляем.


Чем такой вариант не комильфо?
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский
Старый 04.05.2007, 23:38   #3  
bittlejuice is offline
bittlejuice
Участник
 
4 / 10 (1) +
Регистрация: 04.05.2007
Используйте CDO.
Как? Читайте MSDN, там все более чем подробно описано.
Старый 21.05.2007, 16:22   #4  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Можно еще проще, без аутглюка, например free библиотека jmail.dll http://www.serverwatch.com/img/downloads/JMailVBS.zip которая умеет почти все что касается почты, берем ее и пишем:

Код:
SMTPServer := 'mail.server.ru';
UserName := 'Яков@server.ru';
Password := 'пароль';
IF GUIALLOWED THEN
  window.OPEN('#1##########################################################');
IF GUIALLOWED THEN
  window.UPDATE(1,STRSUBSTNO(Text048,SMTPServer,UserName));

IF ISCLEAR(MailClient) THEN
  CREATE(MailClient);
CREATE(Mail);
Mail.From := SendTo."E-Mail Address";
Mail.FromName := SendTo.Description;
Mail.Subject := Subject;
Mail.AddRecipient(EmailReceipient);
IF CC <> '' THEN
  Mail.AddRecipientCC(CC);
Mail.AppendHTML(Text);

IF Filename <> '' THEN BEGIN
  IF GUIALLOWED THEN
	window.UPDATE(1,Text003);
  Mail.AddAttachment(Filename,FALSE);
  IF FILE.ERASE(Filename) THEN;
END;

IF GUIALLOWED THEN
  window.UPDATE(1,Text005);

Mail.MailServerUserName := UserName;
Mail.MailServerPassWord := Password;
IF NOT Mail.Send(SMTPServer,FALSE) THEN
  MESSAGE(Mail.ErrorMessage());

IF GUIALLOWED THEN
  window.CLOSE;
С приемом почты тоже самое, и главное можно складировать аттачи так, как хочется, и средствами Nav...
Старый 24.05.2007, 11:39   #5  
ekya is offline
ekya
Участник
 
16 / 10 (1) +
Регистрация: 14.05.2007
Привет.

А как объявить переменные MailClient и Mail?
Библиотеку я уже зарегистрировал
Старый 25.05.2007, 12:08   #6  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Добрый День!

Вот переменные:
Код:
MailClient	Automation	'JMail 4.0 library'.POP3	
Mail	Automation	'JMail 4.0 library'.Message	
Attachments	Automation	'JMail 4.0 library'.Attachments	
Attachment	Automation	'JMail 4.0 library'.Attachment
Старый 30.07.2007, 18:38   #7  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
День добрый.

Никто не сталкивался с проблемой библиотеки jMail когда русские буквы в заголовке и теле письма передаются кракозябрами?
Функции Dos2Win и WIN2DOS из codeunit'a "Localisation Management" не помогают. Почтовый сервер Exchange.

Подразумеваю что это проблема самой библиотеки, либо сервера.
Старый 30.07.2007, 19:11   #8  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Проблема в сервере скорее всего.
Заголовок письма в студию и будем искать...
Старый 31.07.2007, 09:08   #9  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Код:
Microsoft Mail Internet Headers Version 2.0
Received: from xxx.yyy.ru ([192.168.0.40]) by smtp.yyy.ru with Microsoft SMTPSVC(6.0.3790.1830);
	 Tue, 31 Jul 2007 08:29:00 +0400
Subject: =?iso-8859-1?Q?XXX_=EF=EE=E4=EF=E8=F1=E0=ED=E0_=E7=E0=FF=E2=EA=E0_=ED=E0_=EE=EF=EB=E0=F2=F3_PAY
R-HO-0000068?=
Sender: "xxx" <xxx@yyy.ru>
From: "xxx" <xxx@yyy.ru>
Date: Tue, 31 Jul 2007 08:29:22 +0400
To: "=?iso-8859-1?Q?xxx@yyy=2Eru?=" <xxx@yyy.ru>
X-Priority: 3
Content-Transfer-Encoding: Quoted-Printable
MIME-Version: 1.0
X-Mailer: JMail 4.5 by Dimac
Content-Type: text/plain;
	charset="iso-8859-1"
Return-Path: xxx@yyy.ru
Message-ID: <DC1SRV05WuR3hcnqoJO00000016@smtp.yyy.ru>
X-OriginalArrivalTime: 31 Jul 2007 04:29:00.0937 (UTC) FILETIME=[5198C790:01C7D32B]
видимо проблема в строке заголовка
charset="iso-8859-1"

Установка charset="koi8-r" ситуацию не исправило...

UPDATE

Вылечил ситуацию.
Заголовок и тело письма конвертировать в Win не нужно, Charset := 'windows-1251'.
Может кому сгодится...
Старый 03.08.2007, 08:13   #10  
Yermek is offline
Yermek
Участник
 
29 / 10 (1) +
Регистрация: 06.06.2006
Цитата:
Сообщение от .rejector. Посмотреть сообщение
UPDATE

Вылечил ситуацию.
Заголовок и тело письма конвертировать в Win не нужно, Charset := 'windows-1251'.
Может кому сгодится...
Скажите, пожалуйста, где и как этот charset выставляется?
Старый 27.08.2007, 12:44   #11  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Пардон, не видел что меня спросили.

Отвечу расширенно, что бы максимально исключить лишние вопросы.

Я сделал так:

- В одной из настроечных таблиц создал BLOB поле, и импотировал туда библиотеку jMail.dll
- создал codeunit, в тригере OnRun написал код, позволяющий импортировать/экспортировать dll

Код:
OnRun()
// при прямом запуске можно вручную сделать импорт или экспорт jMail.dll
MenuResalt := STRMENU('Import jMail.dll,Export jMail.dll', 1);
Company.FIND('-');
CASE MenuResalt OF
  1 : BEGIN
        FileNamejMail := Company."jMail.dll".IMPORT('jMail.dll', TRUE);
        IF FileNamejMail  '' THEN BEGIN
          Company.MODIFY(TRUE);
          MESSAGE('Готово')
        END
        ELSE
          CLEAR(Company."jMail.dll")
      END;
  2 : BEGIN
        Company.CALCFIELDS(Company."jMail.dll");
        IF Company."jMail.dll".HASVALUE THEN
          Company."jMail.dll".EXPORT(FileNamejMail, TRUE)
        ELSE
          MESSAGE('Выгружать нечего, поле пустое... ')
      END;
END;
В этом же кодюните создал функцию NewMessage

Код:
NewMessage(FromName : Text[30];ToName : Text[30];CCName : Text[30];Subject : Text[60];Body : Text[255];AttachFileName : Text[255];ShowMessage    :Boolean) : Boolean
//NewMessage (FromName,ToName,CCName,Subject,Body,AttachFileName)

IF ISCLEAR(MailClient) THEN
  IF NOT CREATE(MailClient) THEN
    IF NOT Install_jMail THEN
      ERROR('Не возможно установить компонент jMail.dll');

IF GUIALLOWED THEN BEGIN
  window.OPEN('#1###################\'+
              'Сервер #2############\'+
              'Юзер   #3############');
  window.UPDATE(1, Text001);
  window.UPDATE(2, SMTPServer);
  window.UPDATE(3, UserName);
END;

CREATE(Mail);
Mail.Silent := TRUE;
Mail.Logging := TRUE;
Mail.Charset := 'windows-1251';
IF UserSetup.GET(USERID) AND (UserSetup."E-mail"  '') THEN
  Mail.From := UserSetup."E-mail"
ELSE
  Mail.From := '';
Mail.FromName := FromName;
Mail.Subject := Subject;
Mail.AddRecipient(ToName);

IF CCName  '' THEN
  Mail.AddRecipientCC(CCName);
Mail.AppendText(Body);
IF AttachFileName  '' THEN
  Mail.AddAttachment(AttachFileName,FALSE);

Mail.MailServerUserName := MailServerUserName;
Mail.MailServerPassWord := Password;
IF NOT Mail.Send(SMTPServer,FALSE) AND GUIALLOWED THEN
  MESSAGE(Mail.ErrorMessage())
ELSE
  CLEAR(Mail);

IF GUIALLOWED THEN BEGIN
  window.CLOSE;
  IF ShowMessage THEN
    MESSAGE('Пользователю %1 отправлено письмо.\Тема письма:"%2"', ToName, Subject)
END;
Переменные следующие:

Код:
UserName    Text        30
window    Dialog        
MailClient    Automation    'JMail 4.0 library'.Attachment    
Mail    Automation    'JMail 4.0 library'.Message    
Filename    Text        30
Company    Record    Company    
MenuResalt    Integer        
FileNamejMail    Text        250
WinPath    Text        250
UserSetup    Record    User Setup
И последняя функция, в этом кодюните производит выгрузку dll на машину пользователя и её регистрацию

Код:
Install_jMail() : Boolean
//Install_jMail
Company.FIND('-');
Company.CALCFIELDS(Company."jMail.dll");
IF Company."jMail.dll".HASVALUE THEN
  BEGIN
    WinPath := FORMAT(ENVIRON('WINDIR')) + '\System32\jMail.dll';
    Company."jMail.dll".EXPORT(WinPath, FALSE);
    IF SHELL(STRSUBSTNO('regsvr32 "%1"',WinPath)) = 0 THEN
      EXIT(TRUE)
  END;
ЗЫ.
Ещё раз спасибо Forward за наводку на dll'ку

Надеюсь кому-нибудь сгодится.
Старый 27.08.2007, 14:13   #12  
Yermek is offline
Yermek
Участник
 
29 / 10 (1) +
Регистрация: 06.06.2006
2 .rejector. Спасибо за весьма исчерпывающий ответ.
Я ранее использовал для отправки е-мейлов smtpmailx OCX (http://forum.mazzy.ru/index.php?showtopic=2356), там тоже были проблемы с кодировкой и паролем. Я подправлял исходники и генерил новый исправленный OCX, но возникала проблемка с аттачментами...
Надеюсь у jMail.dll все работает более гладко
Старый 28.05.2009, 16:45   #13  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
А можно ли с помощью этой библиотеки отправлять почту на Exchange по протоколу MAPI? А то стоит задача отправки почты из NAS, и я в инете видел решение только путем установки еще и Outlook'а и взаимодействия с ним (и то там очень каверзно все настраивать надо).
Старый 28.05.2009, 16:52   #14  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Нет, по MAPI нельзя.
Вот, почитайте сайт
Старый 28.05.2009, 17:01   #15  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
эх
мне впринципе не нужны (пока) функции добавления в письмо аттачей. Нужно посылать простое письмо-уведомление. Можно это как-то реализовать без установки Outlook'а на той машине, где установлен NAS (тобишь на сервере)?
Старый 28.05.2009, 17:26   #16  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
можно отправлять без outlook-а
можно с аттачами
можно в html виде
технология отработана
docflow nav
Старый 28.05.2009, 17:43   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Sancho Посмотреть сообщение
технология отработана
docflow nav
не, не. так не годится.

если взялся отвечать - ответь по существу.
если твой ответ состоит только в отсылке к платным ресурсам - не надо так делать.
Давай четко отделять советы от рекламы

Не нужно сообщений в стиле:
у нас есть такие приборы,
но мы вам о них не расскажем,
а если вы позвоните/напишете/придете,
то их вам конечно продажем
__________________
полезное на axForum, github, vk, coub.
Старый 28.05.2009, 18:16   #18  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
понял.
исправляюсь

отправлять сообщения можно без использования MS Outlook, посредством использования следующих автомейшнов:
'Microsoft CDO for Windows 2000 Library'.Configuration
'Microsoft CDO for Windows 2000 Library'.Message
'Microsoft ActiveX Data Objects 2.8 Library'.Field
'Microsoft ActiveX Data Objects 2.8 Library'.Fields

в сообщения можно вставлять аттачменты, гиперлинки, можно форматировать по-всякому, поскольку используется html
у нас есть богатый опыт подобной отправки сообщений, о чем можно узнать на приведенном выше сайте.
Старый 29.05.2009, 10:00   #19  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Нашел на mibuso такую тему:
mibuso.com
В частности оттуда:
Цитата:
Define 'objEmailConf' as 'Microsoft CDO For Exchange 2000 Library'.Configuration.
Define 'objEmail' as 'Microsoft CDO For Exchange 2000 Library'.Message.
Define 'flds' as 'Microsoft ActiveX Data Objects 2.5 Library'.Fields.
Define 'fld' as 'Microsoft ActiveX Data Objects 2.5 Library'.Field.

IF ISCLEAR(objEmailConf) THEN CREATE(objEmailConf);
flds := objEmailConf.Fields;

fld := flds.Item('http://schemas.microsoft.com/cdo/configuration/smtpserver');
fld.Value('mail.yourdomain.com');

fld := flds.Item('http://schemas.microsoft.com/cdo/configuration/smtpserverport');
fld.Value(25);

fld := flds.Item('http://schemas.microsoft.com/cdo/configuration/sendusing');
fld.Value(2);

flds.Update();

IF ISCLEAR(objEmail) THEN CREATE(objEmail);
objEmail.Configuration := objEmailConf;
objEmail.From := 'testfrom@yourdomain.com;
objEmail."To" := 'testto@yourdomain.com';
objEmail.Subject := 'test subject';
objEmail.TextBody := 'Test';
objEmail.Send;
Но что-то не могу найти, как по протоколу MAPI отправлять :/
Старый 29.05.2009, 17:22   #20  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
А чем Вам CDO не угодило?
Для MAPI, по-моему, как раз потребуется настроить учетную запись электронной почты. И из этих настроек будет браться SMTP-сервер.
В CDO вы же все настройки можете хранить в Nav'е.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:11.