Решено Как Сформировать Письмо С Html И Вложениями Из Другого Документа

anna

Lotus team
03.06.2014
400
7
#1
Добрый день!
Как сформировать в LS письмо, чтобы в теле письма был HTML, а в аттачах - вложения (разные типы файлов могут быть) из других документов базы.
Сейчас письмо формируется из NotesStream, Call mimeE.SetContentFromText(stream, {text/html;charset="UTF-8"}, ENC_NONE) - и html формируется нормально. При попытке приаттачить файл (разными способами) - файл получает другое имя, расширение .dat. Если пытаться посылать текстовый файл и устанавливать text/plain, то, вроде, нормально, но с экселем такое уже не проходит даже с корректным контент-тайпом. При попытке пересылать заранее сформированный документ с текстом и аттачем просто путем Send - теряется html.
Буду крайне признательна за совет. Буду крайне признательна за кусок рабочего кода. :email:
 

susinmn

Well-known member
16.10.2007
529
3
#2
Добрый день!
Как сформировать в LS письмо, чтобы в теле письма был HTML, а в аттачах - вложения (разные типы файлов могут быть) из других документов базы.
Сейчас письмо формируется из NotesStream, Call mimeE.SetContentFromText(stream, {text/html;charset="UTF-8"}, ENC_NONE) - и html формируется нормально. При попытке приаттачить файл (разными способами) - файл получает другое имя, расширение .dat. Если пытаться посылать текстовый файл и устанавливать text/plain, то, вроде, нормально, но с экселем такое уже не проходит даже с корректным контент-тайпом. При попытке пересылать заранее сформированный документ с текстом и аттачем просто путем Send - теряется html.
Буду крайне признательна за совет. Буду крайне признательна за кусок рабочего кода. :email:
Код:
Dim filenames() As String
i=-1
n=1
Set rtdoc=doc.GetFirstItem("Files")
If ( rtdoc.Type = RICHTEXT ) Then
If Not Isempty(rtdoc.EmbeddedObjects) Then
Set mime = result.CreateChildEntity( ) 
Forall object In rtdoc.EmbeddedObjects
If (object.Type = EMBED_ATTACHMENT ) Then
filepath =Environ("Temp")+"\"+Cstr(Object.Name)
Call object.ExtractFile(filepath)

tmpSource=Object.Source
i=i+1
NameSource:
If i=0 Then
Redim Preserve filenames(0)
filenames(0)=Object.Source
Else
For j=0 To Ubound(filenames)
If filenames(j)=tmpSource Then
tmpSource=Strleft(Object.Source,".")+Cstr(n)+"."+Strright(Object.Source,".")
n=n+1
Goto NameSource
End If
Next
Redim Preserve filenames(Ubound(filenames)+1)
filenames(Ubound(filenames))=tmpSource
End If

tmp=Evaluate({@ReplaceSubstring(@URLEncode("UTF-8";"}+Cstr(tmpSource)+{");"%";"=")})
filename="=?utf-8?Q?"+tmp(0)+"?="

Set mime = result.CreateChildEntity( )

Set hdr = mime.CreateHeader("Content-Disposition") 
Call hdr.SetHeaderValAndParams(|attachment; filename="|+filename+|"|)
Set hdr = mime.createHeader("Content-ID")
Call hdr.setHeaderVal(filename) 
Set stream = s.CreateStream 
stream.Open filepath, "binary" 
mime.SetContentFromBytes stream, |application/octet-stream; name="|+filename+|"|, ENC_BINARY 
mime.EncodeContent ENC_BASE64 
End If
End Forall		
End If
End If
 

anna

Lotus team
03.06.2014
400
7
#3
Спасибо. Файл приходит, все норм. Остается странность - приходит не один файл, а два, дополнительно пустой ATTцифры.txt
 

anna

Lotus team
03.06.2014
400
7
#4
Про ATT файлы написано следующее:

The ATT00001.txt file is a file generated as an attachment by Microsoft Outlook or Microsoft Exchange Server. The name ATT00001 is a generic file name and you’ll often see these in .htm format, .dat, and other extensions when there is some sort of compatibility issue between the sender and recipients Microsoft email program settings.
It is often the result of a MIME file being sent and because of a compatibility issue when the redundant / additional txt file gets generated and attached. These Microsoft mail systems use Transport Neutral Encapsulation Format (TNEF) to pack and send this information, which is a proprietary format that sometimes leads to problems.
Was this added as a garbage attachment and has no content in it?
This file type is typically going to either be the plain text of the email or blank. If its blank, you will need to check with the sender, as the attachment didn’t send properly and was replaced with this garbage/blank file.
Good luck.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 599
277
#5
вы хотите перевода? :email:
возможно этот файл генерит чунга-чанга (Эксчендж)
 

anna

Lotus team
03.06.2014
400
7
#6
вы хотите перевода? ;)
возможно этот файл генерит чунга-чанга (Эксчендж)
Смысл ясен текста как раз ясен. Неясно, что нужно сделать, чтобы не присоединялся этот лишний аттач.
Включили 8-bit MIME в настройках почтовика, все равно не помогает.
И еще возник вопрос, как, вдобавок к телу письма (которое содержит сформированный текст уведомления в HTML), вложить всякие не приаттаченные, а просто вставленные в Body принскрины и всякое содержимое?

Добавлено:
вы хотите перевода? :(
возможно этот файл генерит чунга-чанга (Эксчендж)
Смысл ясен текста как раз ясен. Неясно, что нужно сделать, чтобы не присоединялся этот лишний аттач.
Включили 8-bit MIME в настройках почтовика, все равно не помогает.
И еще возник вопрос, как, вдобавок к телу письма (которое содержит сформированный текст уведомления в HTML), вложить всякие не приаттаченные, а просто вставленные в Body принскрины и всякое содержимое?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 599
277
#7
Смысл ясен текста как раз ясен. Неясно, что нужно сделать, чтобы не присоединялся этот лишний аттач.
если со всех внешних источников, в чангу приходят подобным образом - то её и надо настаивать
а еще в домине, в настройках рутера, есть пункт - типа отсылать еще и текст
И еще возник вопрос, как, вдобавок к телу письма (которое содержит сформированный текст уведомления в HTML), вложить всякие не приаттаченные, а просто вставленные в Body принскрины и всякое содержимое?
в хтмл есть картинки как base64, data URI называется, НО есть ограничения у старых версий УЁ (IE), а именно он используется как рендерер в аутглюке (старом)
 

anna

Lotus team
03.06.2014
400
7
#8
Если тело письма формируем как HTML, а к нему туда же нужно дописать содержимое из Body, которое хранится как HTML mime (как вариант - как RTF), то это как? Догадываюсь, что делается CreateChildEntity, а далее?
 

anna

Lotus team
03.06.2014
400
7
#9
Итак, проблема решена. Все сделано совсем по-другому - проще и надежнее. В процессе было рассмотрено несколько способо реализации - один вышеприведенный через работу с MimeEntities, другой через дерганье поля Body через веб, а третий - работающий - через конвертацию в MIME
В посылаемый документ вставляется rtf поле другого документа через CopyItem, сопроводительная информация (та, которая в HTML, но типа текст) прогоняется через оформление PassThruHTML = True. Затем документ, который посылаем, кодируется в hTML
Call maildoc.ConvertToMIME( CONVERT_RT_TO_HTML )
и все чудесно посылается со скриншотами, аттачами, оформлением текста, вставленными таблицами итп.
всем спасибо <_<