|
|
#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". Мне кажется есть какая - то хитрость с написанием пути к файлу вложения. Коллеги может кто - то пользуется этим алгоритмом для отправки писем с вложениями и сталкивался с подобной проблемой. |
|
|
|
|
#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();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#3 |
|
Ищущий знания...
|
в методе run() класса SysEmailBatch, кроме всего прочего, внизу есть код:
X++: if (attachmentfileName) { if (attachmentData) { binData = new BinData(); binData.setData(attachmentData); binData.saveFile(attachmentfileName); } mailer.attachments().add(attachmentfileName); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#4 |
|
Ищущий знания...
|
пока писал подумалось, а какая у Вас версия ахи?
у меня трешка. а то может в более поздних версиях уже все по другому
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#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(); |
|
|
|
|
#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(); } |
|
|
|
|
#7 |
|
Administrator
|
на всякий случай - контрольный вопрос - отправка осуществляется на клиенте или на сервере?
Если на сервере - то есть ли права у той учетной записи, от имени которой запущена служба аоса на чтение указанной Вами папки?
__________________
Возможно сделать все. Вопрос времени |
|
|
|
|
#8 |
|
Ищущий знания...
|
Цитата:
Путь выглядит след образом: Цитата:
C:\DOCUME~1\...~1\LOCALS~1\Temp\01.xls
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#9 |
|
Участник
|
Отправка осуществляется на клиенте. Права на чтение каталога у учетной записи есть.
|
|
|
|
|
#10 |
|
Member
|
Я отправлял почту через SysEmailTable::sendMail(...), правда. Насколько я понимаю, это некая "фича" из оболасти security.
Суть в том, что к письму прикрепляются только файлы, которые лежат в каталоге, путь к которому указан в Администрировнаие\Настройки\Параметры электронной почты, хм... последнее поле... затрудняюсь даже предположить как это перевели на русский (Allow embedded data and attached files from).
__________________
С уважением, glibs® |
|
|
|
|
#11 |
|
Administrator
|
"Разрешить внедренные данные и вложенные файлы от"
__________________
Возможно сделать все. Вопрос времени |
|
|
|
|
#12 |
|
Участник
|
Колеги, всем спасибо за помощь. Кажется разобрался. Я создаю письмо при помощи класса SysEmailBatch, а в свойствах этого класса указано, что он создается на сервере. А файл я создаю на клиенте. Поэтому и возникает неувязка, что программа не может найти этот файл и соответственно прикрепить к письму.
|
|
|