21.10.2009, 15:26 | #1 |
Участник
|
Отправка письма при помощи SysEmailBatch. Проблема с прикреплением файла
Создаю письмо при помощи класса SysEmailBatch. Прикрепляю файл. Письмо приходит но без вложения. Посмотрел отладчиком. В методе run класса SysEmailBatch есть проверка WinApiServer::fileExists(attachmentfileName) и она не проходит. В методе fileExists есть код:
X++: handle = fileCreate.call(bname, #GENERIC_READ, 0, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0); if (handle == #INVALID_HANDLE_VALUE) { lastError = WinAPIServer::getLastError(); switch (lastError) { case #FILE_NOT_EXIST: return false; // This error is generated for filenames pointing to a folder without trailing '\'. E.g. "c:\tmp" case #ACCESS_DENIED: if (!_acceptFolder) return false; break; // This error is generated for filenames pointing to a folder with trailing '\'. E.g. "c:\tmp\" case #PATH_NOT_EXIST: return false; } } Путь указываю в таком виде "\\Mowaxdb3\AXPublic\TempAttachmentMail\1.xls". Путь беру из таблицы т.ч. проблем со слэшами не должно быть. Но пробовал и писать в коде "\\\\Mowaxdb3\\AXPublic\\TempAttachmentMail\\1.xls". Мне кажется есть какая - то хитрость с написанием пути к файлу вложения. Коллеги может кто - то пользуется этим алгоритмом для отправки писем с вложениями и сталкивался с подобной проблемой. |
|
21.10.2009, 15:55 | #2 |
Ищущий знания...
|
что то не нашел я кода приведенного вами.
я отправлял письмо с вложением при помощи класса SysEmailBatch следующим образом: X++: sysEMailBatch.parmEmailAddr(Email); sysEMailBatch.parmMessageBody(txtBody); sysEMailBatch.parmPriority(1); sysEMailBatch.parmSenderAddr(emplTable.Email); sysEMailBatch.parmSendername(emplTable.Name); sysEMailBatch.parmSubject(strFmt(" %1", emplTable.Name) + strFmt("'%1'", CompanyInfo::find().Name)); sysEMailBatch.parmAttachmentfileName(fileNameServ); sysEMailBatch.run();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.10.2009, 15:57 | #3 |
Ищущий знания...
|
в методе run() класса SysEmailBatch, кроме всего прочего, внизу есть код:
X++: if (attachmentfileName) { if (attachmentData) { binData = new BinData(); binData.setData(attachmentData); binData.saveFile(attachmentfileName); } mailer.attachments().add(attachmentfileName); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.10.2009, 15:59 | #4 |
Ищущий знания...
|
пока писал подумалось, а какая у Вас версия ахи?
у меня трешка. а то может в более поздних версиях уже все по другому
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.10.2009, 16:07 | #5 |
Участник
|
Возможно у нас разные версии. У меня 4.0
Вот мой код отправки письма X++: (SendEmailCollectionLetter.FilePath); SysEmailBatch.parmEmailAddr(CustEmail); SysEmailBatch.parmMessageBody(messageBody); sysEmailBatch.parmPriority(EmailPriority::Normal); SysEmailBatch.parmSubject(Tema); SysEmailBatch.parmSenderAddr(SysUserInfo.Email); SysEmailBatch.parmSendRetry(true); SysEmailBatch.parmTraceable(false); SysEmailBatch.run(); |
|
21.10.2009, 16:10 | #6 |
Участник
|
У меня этот кусок выглядит так:
X++: if (attachmentfileName) { //not in batch mode if (!attachmentData) { fileIOPermission = new FileIOPermission(attachmentfileName,'r'); fileIOPermission.assert(); //BP Deviation Documented if(WinApiServer::fileExists(attachmentfileName) && //BP Deviation Documented (WinApiServer::fileSize(attachmentfileName) < (maxAttachmentSize * 1000000)) && SysEmailTable::isFromAttachmentsFolder(attachmentfileName)) { binData = new BinData(); //BP Deviation Documented binData.loadFile(attachmentfileName); attachmentData = binData.getData(); } CodeAccessPermission::revertAssert(); } |
|
21.10.2009, 16:15 | #7 |
Administrator
|
на всякий случай - контрольный вопрос - отправка осуществляется на клиенте или на сервере?
Если на сервере - то есть ли права у той учетной записи, от имени которой запущена служба аоса на чтение указанной Вами папки?
__________________
Возможно сделать все. Вопрос времени |
|
21.10.2009, 16:26 | #8 |
Ищущий знания...
|
Цитата:
Путь выглядит след образом: Цитата:
C:\DOCUME~1\...~1\LOCALS~1\Temp\01.xls
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.10.2009, 16:33 | #9 |
Участник
|
Отправка осуществляется на клиенте. Права на чтение каталога у учетной записи есть.
|
|
21.10.2009, 16:45 | #10 |
Member
|
Я отправлял почту через SysEmailTable::sendMail(...), правда. Насколько я понимаю, это некая "фича" из оболасти security.
Суть в том, что к письму прикрепляются только файлы, которые лежат в каталоге, путь к которому указан в Администрировнаие\Настройки\Параметры электронной почты, хм... последнее поле... затрудняюсь даже предположить как это перевели на русский (Allow embedded data and attached files from).
__________________
С уважением, glibs® |
|
21.10.2009, 16:55 | #11 |
Administrator
|
"Разрешить внедренные данные и вложенные файлы от"
__________________
Возможно сделать все. Вопрос времени |
|
22.10.2009, 10:21 | #12 |
Участник
|
Колеги, всем спасибо за помощь. Кажется разобрался. Я создаю письмо при помощи класса SysEmailBatch, а в свойствах этого класса указано, что он создается на сервере. А файл я создаю на клиенте. Поэтому и возникает неувязка, что программа не может найти этот файл и соответственно прикрепить к письму.
|
|