Richview and SMTP (import into a mail message)
Richview and SMTP (import into a mail message)
Hi
Is it possible to import a richview document with graphics and
tables etc... in the BODY of an email (not as an attachment)?
If so, what is the syntax, and what SMTP client component is required? (Would ICS be ok?).
Thanks
Enrico
Is it possible to import a richview document with graphics and
tables etc... in the BODY of an email (not as an attachment)?
If so, what is the syntax, and what SMTP client component is required? (Would ICS be ok?).
Thanks
Enrico
-
- Site Admin
- Posts: 17566
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
How to create formatted e-mail message:
http://www.trichview.com/forums/viewtopic.php?t=11
I think this message can be sent by any SMTP component (as text)
http://www.trichview.com/forums/viewtopic.php?t=11
I think this message can be sent by any SMTP component (as text)
tried dmime .... unsuccessfully
Hi Sergey
I tried the dmime example but it does not work, clearly b/c I am doing something wrong.
I have a Form with a TNMSMTP Ccomponent (D5) and a TrichviewEdit component. This is a hidden form, I want to read the content (with graphics) from the file 'letters' and load it
directlyu in the Body of teh email that is sent to the someone. I tried the code below, sending the email to myself, but i get a long 'text' of garbage, rather than the content in the 'letters' file. What I am doinig wrong? Also, how doI use RV_RegisterHTMLGraphicFormat to be able to have any kind of picture in the letters file? I did not find an example in demos
var
Stream:TStringStream;
s,s1: string;
.........
LoadRVFFromField(RichViewEdit1,dm3.letters,'content');
HTMLImages.Clear;
Stream := TStringStream.Create('');
try
RichViewEdit1.SaveHTMLToStreamEx(Stream, '', 'Web Archive Demo', '', '', '', '',
[rvsoUseCheckpointsNames, rvsoUTF8]);
s := MimeEncodeString(Stream.DataString);
finally
Stream.Free;
end;
for i := 0 to HTMLImages.Count-1 do begin
SetLength(s1, HTMLImages.Stream.Size);
HTMLImages.Stream.Position := 0;
HTMLImages.Stream.ReadBuffer(PChar(s1)^, Length(s1));
s1 := MimeEncodeString(s1);
s:=s+s1;
Finalize(s1);
end;
HTMLImages.Clear;
SMTP1.PostMessage.Body.text:=s;
I tried the dmime example but it does not work, clearly b/c I am doing something wrong.
I have a Form with a TNMSMTP Ccomponent (D5) and a TrichviewEdit component. This is a hidden form, I want to read the content (with graphics) from the file 'letters' and load it
directlyu in the Body of teh email that is sent to the someone. I tried the code below, sending the email to myself, but i get a long 'text' of garbage, rather than the content in the 'letters' file. What I am doinig wrong? Also, how doI use RV_RegisterHTMLGraphicFormat to be able to have any kind of picture in the letters file? I did not find an example in demos
var
Stream:TStringStream;
s,s1: string;
.........
LoadRVFFromField(RichViewEdit1,dm3.letters,'content');
HTMLImages.Clear;
Stream := TStringStream.Create('');
try
RichViewEdit1.SaveHTMLToStreamEx(Stream, '', 'Web Archive Demo', '', '', '', '',
[rvsoUseCheckpointsNames, rvsoUTF8]);
s := MimeEncodeString(Stream.DataString);
finally
Stream.Free;
end;
for i := 0 to HTMLImages.Count-1 do begin
SetLength(s1, HTMLImages.Stream.Size);
HTMLImages.Stream.Position := 0;
HTMLImages.Stream.ReadBuffer(PChar(s1)^, Length(s1));
s1 := MimeEncodeString(s1);
s:=s+s1;
Finalize(s1);
end;
HTMLImages.Clear;
SMTP1.PostMessage.Body.text:=s;
-
- Site Admin
- Posts: 17566
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
1) Message parts MUST look like unreadable garbage, because they are encoded as 'base64'.
Usually, mailers use 'base64' only for binary data (such as images); for the main text they use encodings like 'quoted-printable'.
But it is ok, e-mail clients must be able to decode 'base64'.
2) You cannot just concatenate mime-encoded strings. All other information is very important.
You can see the saved file in Notepad. The message consists of parts. The first part is for the main HTML document, other parts are for images. Each part is started from the header like:
And the whole message is started from
and finished by
All line breaks and indents are very important.
At the very beginning of the message there are lines "from" and "subject", but I guess SMTP1 will add them itself.
3) This demo has wrong comment:
{ Actually, this demo converts all pictures to Jpegs, so only TJpegImage can
occur here. But you can use RV_RegisterHTMLGraphicFormat to allow other
graphic formats in HTML }
Actually, this demo saves all images in formats as they are. It uses OnSaveImage2 event, and images are passed to this event without conversion to jpegs. For the purposes of e-mail saving, you should convert images to jpegs (or png, or gifs). Change the code for this event to (and add CRVData in uses):
Usually, mailers use 'base64' only for binary data (such as images); for the main text they use encodings like 'quoted-printable'.
But it is ok, e-mail clients must be able to decode 'base64'.
2) You cannot just concatenate mime-encoded strings. All other information is very important.
You can see the saved file in Notepad. The message consists of parts. The first part is for the main HTML document, other parts are for images. Each part is started from the header like:
Code: Select all
------=_BOUNDARY_LINE_
Content-Type: image/bmp
Name="image0.bmp"
Content-Transfer-Encoding: base64
Content-ID: <image0.bmp>
Code: Select all
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_BOUNDARY_LINE_"
X-Unsent: 1
This is a multi-part message in MIME format.
Code: Select all
------=_BOUNDARY_LINE_--
At the very beginning of the message there are lines "from" and "subject", but I guess SMTP1 will add them itself.
3) This demo has wrong comment:
{ Actually, this demo converts all pictures to Jpegs, so only TJpegImage can
occur here. But you can use RV_RegisterHTMLGraphicFormat to allow other
graphic formats in HTML }
Actually, this demo saves all images in formats as they are. It uses OnSaveImage2 event, and images are passed to this event without conversion to jpegs. For the purposes of e-mail saving, you should convert images to jpegs (or png, or gifs). Change the code for this event to (and add CRVData in uses):
Code: Select all
procedure TForm1.RichViewEdit1SaveImage2(Sender: TCustomRichView;
Graphic: TGraphic; SaveFormat: TRVSaveFormat; const Path,
ImagePrefix: String; var ImageSaveNo: Integer; var Location: String;
var DoDefault: Boolean);
var gr: TGraphic;
bmp: TBitmap;
begin
if SaveFormat<>rvsfHTML then
exit;
if not (Graphic is TJPEGImage) and not RV_IsHTMLGraphicFormat(Graphic) then begin
bmp := TBitmap.Create;
try
bmp.Assign(Graphic);
except
bmp.Width := Graphic.Width;
bmp.Height := Graphic.Height;
bmp.Canvas.Draw(0,0, Graphic);
end;
gr := TJPEGImage.Create;
gr.Assign(bmp);
bmp.Free;
end
else
gr := Graphic;
Location := Format('image%d.%s', [ImageSaveNo, GraphicExtension(TGraphicClass(gr.ClassType))]);
inc(ImageSaveNo);
with HTMLImages.Add as THTMLImageItem do
begin
gr.SaveToStream(Stream);
Name := Location;
ContentType := GetImageContentType(gr);
end;
Location := 'cid:'+Location;
DoDefault := False;
if gr<>Graphic then
gr.Free;
end;
-
- Site Admin
- Posts: 17566
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
I have made the corrections. Now I can create a file as you do in your example, and it works. But if instead of saving that stream to disk I sent it to the Body of the smtp, I get just incomprehensible text in my emai.
Now I have seen there are Indy and ICS smtp copmponent that claim they can indorporate a FILE in the body of the Message, but the fact is I am using a Richview richedit, with a cust_name code so i cannot save to file first, then mail them unless I save one file for each customer.
Anybody knows of a way to send directly form inside the Richview richedit the content to the Body of the emai message?
Thanks
Now I have seen there are Indy and ICS smtp copmponent that claim they can indorporate a FILE in the body of the Message, but the fact is I am using a Richview richedit, with a cust_name code so i cannot save to file first, then mail them unless I save one file for each customer.
Anybody knows of a way to send directly form inside the Richview richedit the content to the Body of the emai message?
Thanks
-
- Site Admin
- Posts: 17566
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
When receiving this e-mail, compare its source with formatted e-mails sent by other mailers. Try to find the difference.
Send this e-mail to me, I'll try to find what's wrong.
That example already creates a single MIME document from multiple files - HTML and images. You should use either code in this example or Indy/ICS features for creating multipart documents, not both of them, they'd conflict with each other. From the point of view of SMTP components, this document must be a plain text.
Send this e-mail to me, I'll try to find what's wrong.
That example already creates a single MIME document from multiple files - HTML and images. You should use either code in this example or Indy/ICS features for creating multipart documents, not both of them, they'd conflict with each other. From the point of view of SMTP components, this document must be a plain text.
-
- Site Admin
- Posts: 17566
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
-
- Site Admin
- Posts: 17566
- Joined: Sat Aug 27, 2005 10:28 am
- Contact: