18.11.2010, 14:02 | #1 |
Участник
|
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(); } Подскажите, в чем может быть проблема? |
|
18.11.2010, 15:28 | #2 |
Участник
|
Попробуйте так
X++: mailer.attachments().add(attachmentfileName, "invoice.pdf", "Application/Octet-stream", );
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: kornix (1). |
18.11.2010, 15:48 | #3 |
Читатель
|
Так только для тройки прокатит
Для четверки можно попробовать после X++: mailer.attachments().add(attachmentfileName); X++: mailer.attachments().itemIndex(1).contentType("application/octet-stream"); |
|
18.11.2010, 16:04 | #4 |
Участник
|
Цитата:
Метод Add() получает 1 параметр. Прилагаю все файлы, оригинальный, отправленный Аксаптой, и отправленный Outlook. Эксперимент не помог. Тот же результат. |
|
18.11.2010, 16:18 | #5 |
MCP
|
Кажется, очень похожая проблема обсуждалась тут. Видимо почтовый клиент заменяет в вашем файле символы переноса строки, как пишет AndyD.
|
|
18.11.2010, 16:20 | #6 |
Участник
|
А в четверке используется Dundas mailer или CDO.Message как в 2009-й?
Сами файлы вложений не помогут - причину, почему сам файл не открывается я написал выше. Какой почтовый клиент используете для получения писем?
__________________
Axapta v.3.0 sp5 kr2 |
|
18.11.2010, 16:42 | #7 |
Участник
|
Цитата:
Я в частности использовал почтовый клиент Outlook 2003. Но дело я думаю не в нем, ведь этот же Outlook очень хорошо отобразил файл, отправленный не из Аксапта. Провел эксперимент, отправил на личный ящик mail.ru Получил еще один вариант кривого файла, который совсем не хочет открываться. На всякий пожарный прикладываю его. |
|
18.11.2010, 16:51 | #8 |
Участник
|
Не, я про клиента по другой причине спрашивал
Очевидно, что проблема в самом письме, точнее в заголовке вложения - я хотел вас попросить посмотреть эти заголовки. В Outlook их можно увидеть в свойствах сообщения. Выглядят примерно так PHP код:
__________________
Axapta v.3.0 sp5 kr2 |
|
18.11.2010, 17:00 | #9 |
Участник
|
Цитата:
Сообщение от AndyD
Не, я про клиента по другой причине спрашивал
Очевидно, что проблема в самом письме, точнее в заголовке вложения - я хотел вас попросить посмотреть эти заголовки. В Outlook их можно увидеть в свойствах сообщения. Выглядят примерно так PHP код:
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 |
Участник
|
У меня нет 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"); } X++: mailer.htmlBody("<b>Накладная</b>");
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (5), gl00mie (5), ena_ax (1). |
19.11.2010, 09:11 | #11 |
Участник
|
Цитата:
Сообщение от 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"); } X++: mailer.htmlBody("<b>Накладная</b>"); Жаль, что кроме репутации, на форуме нельзя передать бутылочку холодного пива! :-) В принципе отправляет вложение с текстом и без модификации класса SysMailerAttachments. При этом вставлял текст mailer.body("bodyTest"); и так mailer.htmlBody("<b>Накладная</b>"); В обоих случаях все Ок. Или в первом варианте могут быть проблемы? |
|
19.11.2010, 09:55 | #12 |
Участник
|
В первом варианте вложение и является body, по-этому модификация SysMailerAttachments и не требуется
Но, по-моему, второй вариант более универсален
__________________
Axapta v.3.0 sp5 kr2 |
|
19.11.2010, 10:56 | #13 |
Участник
|
Помниться если использовать html с CDO, были какие-то проблемы с спам фильтрами - сообщения все дружно падали в спам. Проверьте на всякий пожарный...
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|