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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.11.2010, 14:02   #1  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
SysMailer, отправка PDF, приходит пустой файл
Коллеги,

отправляю почтовое сообщение с вложением средствами Аксапты.
В полученном письме, при открытии файла *.pdf,открывается пустой файл.

Если отправить этот pdf средствами Outlook, то в полученном письме файл корректно открывается.

Если отправить текстовый файл, то при получении письма файл также нормально открывается.

Привожу код:
X++:
static void sysmailer(Args _args)
{
    SysMailer mailer = new SysMailer();
    str _fromAddress, _toAddress, _subject, _body, attachmentfileName;
    FileIOPermission fileIOPermission;
    ;
    mailer.SMTPRelayServer("SMTP", 25, "Login", "Pass");
 
    attachmentfileName = "d:\\Axapta\\invoice.pdf";
 
    mailer.fromAddress("[EMAIL="from@mail.ru"]from@mail.ru[/EMAIL]", "Evgeny");
    mailer.subject("Test");
    mailer.priority(1);
    mailer.tos().appendAddress("[EMAIL="to@mail.ru"]to@mail.ru[/EMAIL]");
 
    fileIOPermission = new FileIOPermission(attachmentfileName,'r');
    fileIOPermission.assert();
    CodeAccessPermission::revertAssert();
 
    if( WinApi::fileExists(attachmentfileName))
    {
        mailer.attachments().add(attachmentfileName);
    }
    mailer.sendMail();
}
Оба файла (отправленный через Аксапту и Outlook имеею одинаковый размер).

Подскажите, в чем может быть проблема?
Вложения
Тип файла: pdf Axapta.pdf (803.1 Кб, 183 просмотров)
Тип файла: pdf Outlook.pdf (803.1 Кб, 224 просмотров)
Старый 18.11.2010, 15:28   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробуйте так

X++:
mailer.attachments().add(attachmentfileName, "invoice.pdf", "Application/Octet-stream", );
Лучше было eml-файл приложить - у вас в файле замены символы переноса сток с 0x0A, на 0x0D0A, возможно, это сделал почтовый клиент, когда сохранял вложение
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: kornix (1).
Старый 18.11.2010, 15:48   #3  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от AndyD Посмотреть сообщение
Попробуйте так
Так только для тройки прокатит

Для четверки можно попробовать после
X++:
mailer.attachments().add(attachmentfileName);
дописать
X++:
mailer.attachments().itemIndex(1).contentType("application/octet-stream");
так, в порядке эксперимента...
__________________
Axapta non erubescit
Старый 18.11.2010, 16:04   #4  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
Попробуйте так

X++:
mailer.attachments().add(attachmentfileName, "invoice.pdf", "Application/Octet-stream", );
Лучше было eml-файл приложить - у вас в файле замены символы переноса сток с 0x0A, на 0x0D0A, возможно, это сделал почтовый клиент, когда сохранял вложение
У меня версия 4.0.
Метод Add() получает 1 параметр.
Прилагаю все файлы, оригинальный, отправленный Аксаптой, и отправленный Outlook.


Цитата:
Сообщение от b_nosoff Посмотреть сообщение
Так только для тройки прокатит

Для четверки можно попробовать после
X++:
mailer.attachments().add(attachmentfileName);
дописать
X++:
mailer.attachments().itemIndex(1).contentType("application/octet-stream");
так, в порядке эксперимента...
Эксперимент не помог. Тот же результат.
Вложения
Тип файла: pdf invoice-original.pdf (803.1 Кб, 151 просмотров)
Тип файла: pdf Axapta.pdf (803.1 Кб, 175 просмотров)
Тип файла: pdf from Outlook.pdf (803.1 Кб, 165 просмотров)
Старый 18.11.2010, 16:18   #5  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Кажется, очень похожая проблема обсуждалась тут. Видимо почтовый клиент заменяет в вашем файле символы переноса строки, как пишет AndyD.
Старый 18.11.2010, 16:20   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А в четверке используется Dundas mailer или CDO.Message как в 2009-й?

Сами файлы вложений не помогут - причину, почему сам файл не открывается я написал выше.

Какой почтовый клиент используете для получения писем?
__________________
Axapta v.3.0 sp5 kr2
Старый 18.11.2010, 16:42   #7  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
А в четверке используется Dundas mailer или CDO.Message как в 2009-й?

Сами файлы вложений не помогут - причину, почему сам файл не открывается я написал выше.

Какой почтовый клиент используете для получения писем?
Цель - отправлять ТОРГ-12, всем клиентам. Соответственно задачу надо решать в общем, для любых почтовиков.

Я в частности использовал почтовый клиент Outlook 2003. Но дело я думаю не в нем, ведь этот же Outlook очень хорошо отобразил файл, отправленный не из Аксапта.

Провел эксперимент, отправил на личный ящик mail.ru Получил еще один вариант кривого файла, который совсем не хочет открываться.

На всякий пожарный прикладываю его.
Вложения
Тип файла: pdf from_maiRul.pdf (713 байт, 214 просмотров)
Старый 18.11.2010, 16:51   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не, я про клиента по другой причине спрашивал

Очевидно, что проблема в самом письме, точнее в заголовке вложения - я хотел вас попросить посмотреть эти заголовки. В Outlook их можно увидеть в свойствах сообщения. Выглядят примерно так
PHP код:
--Mark=_20101118134821983IBMx6P
Content
-TypeApplication/Octet-stream;
    
name="invoice.PDF"
Content-Transfer-EncodingBASE64
--Mark=_20101118134821983IBMx6P-- 
Вот то, что у вас между mark - покажите
__________________
Axapta v.3.0 sp5 kr2
Старый 18.11.2010, 17:00   #9  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
Не, я про клиента по другой причине спрашивал

Очевидно, что проблема в самом письме, точнее в заголовке вложения - я хотел вас попросить посмотреть эти заголовки. В Outlook их можно увидеть в свойствах сообщения. Выглядят примерно так
PHP код:
--Mark=_20101118134821983IBMx6P
Content
-TypeApplication/Octet-stream;
    
name="invoice.PDF"
Content-Transfer-EncodingBASE64
--Mark=_20101118134821983IBMx6P-- 
Вот то, что у вас между mark - покажите
сорри, сразу не понял о чем Вы спрашивали...

MIME-Version: 1.0
Content-Type: application/octet-stream;
name="invoice.pdf"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
filename="invoice.pdf"
X-Mailer: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Старый 18.11.2010, 18:23   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
У меня нет 4-ки, пишу на основе 2009-й, но так как в обоих используется CDO.Message, то должно быть похоже

Можно попробовать два варианта

Первый можно использовать при отсылке сообщения с вложением, но без текстового или html-ного содержания
Добавить в класс SysMailer метод Com()
X++:
Com Com()
{
    ;
    return _com;
}
При отсылке сообщения добавьте
X++:
Com com;
;
...    
    mailer.tos().appendAddress("aaa@mail.ru");
    com = mailer.Com();
    com = com.bodyPart();
    com.ContentTransferEncoding("base64");

Второй - если необходимо отправлять письма с текстом и с вложениями
В метод Add() класса SysMailerAttachments внести изменения
X++:
void add(str _url)
{
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
    Com com;
    ;
    permission.assert();

    //BP Deviation Documented
    com =_email.addAttachment(_url);
    com.ContentTransferEncoding("base64");
}
В письмо всегда добавлять текст или html
X++:
mailer.htmlBody("<b>Накладная</b>");
В остальном, ваш код менять не надо
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (5), gl00mie (5), ena_ax (1).
Старый 19.11.2010, 09:11   #11  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
У меня нет 4-ки, пишу на основе 2009-й, но так как в обоих используется CDO.Message, то должно быть похоже

Можно попробовать два варианта

Первый можно использовать при отсылке сообщения с вложением, но без текстового или html-ного содержания
Добавить в класс SysMailer метод Com()
X++:
Com Com()
{
    ;
    return _com;
}
При отсылке сообщения добавьте
X++:
Com com;
;
...    
    mailer.tos().appendAddress("aaa@mail.ru");
    com = mailer.Com();
    com = com.bodyPart();
    com.ContentTransferEncoding("base64");

Второй - если необходимо отправлять письма с текстом и с вложениями
В метод Add() класса SysMailerAttachments внести изменения
X++:
void add(str _url)
{
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
    Com com;
    ;
    permission.assert();
 
    //BP Deviation Documented
    com =_email.addAttachment(_url);
    com.ContentTransferEncoding("base64");
}
В письмо всегда добавлять текст или html
X++:
mailer.htmlBody("<b>Накладная</b>");
В остальном, ваш код менять не надо
Все заработало, спасибо!
Жаль, что кроме репутации, на форуме нельзя передать бутылочку холодного пива! :-)

В принципе отправляет вложение с текстом и без модификации класса SysMailerAttachments.
При этом вставлял текст
mailer.body("bodyTest");
и так
mailer.htmlBody("<b>Накладная</b>");

В обоих случаях все Ок. Или в первом варианте могут быть проблемы?
Старый 19.11.2010, 09:55   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В первом варианте вложение и является body, по-этому модификация SysMailerAttachments и не требуется
Но, по-моему, второй вариант более универсален
__________________
Axapta v.3.0 sp5 kr2
Старый 19.11.2010, 10:56   #13  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Помниться если использовать html с CDO, были какие-то проблемы с спам фильтрами - сообщения все дружно падали в спам. Проверьте на всякий пожарный...
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Печать в PDF и отправка по почте…DAX 4 Daiver DAX: Функционал 2 07.05.2010 13:51
create Pdf invoice report DmitrySincerity DAX: Программирование 1 25.03.2009 17:27
SysMailer и отправка сообщений через Axapta chanchala DAX: Программирование 9 11.02.2009 13:27
отправка писем с помощью SysMailer Lucky13 DAX: Программирование 1 09.03.2007 12:04
Вывод отчета в файл в пакетном режиме Egor_bl DAX: Программирование 16 09.10.2006 19:10

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

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

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