Displaying HTML-formatted messages (Part 1)

Quickly display e-mail with inline pictures Summary: Discusses displaying HTML-formatted e-mail messages using ASP, including handling embedded (inline) objects.

Tutorial map:

Part 1 - Quickly display e-mail with inline pictures
Part 2 - Using temporary filenames for embedded objects
Part 3 - Removing temporary files after use
Part 4 - Advanced topics

HTML messages often contain embedded pictures, sounds, scripts, style-sheets, etc. Usually HTML message refers them by URLs but quite often these objects are just attached to the message (they called inline objects). In order to correctly render HTML content, these objects must be saved to disk first.

GetBodyWithEmbeddedObjectsEx method of MailBee.Message object saves the message's embedded objects into temporary location (by default, the current user's temporary folder) and modifies URLs of these objects in HTML source to match their new locations. GetBodyWithEmbeddedObjectsEx returns modified HTML body text, original Message.BodyText property value is not affected.

GetBodyWithEmbeddedObjectsEx method takes into account the fact that files are saved under physical path (e.g. "c:\inetpub\wwwroot\test\data"), but correponding URL looks like "http://www.server.com/test/data", i.e. some physical path must be mapped to corresponding virtual path in order to be visible to the clients accessing the site.

GetBodyWithEmbeddedObjectsEx method supports several physical-to-virtual path mappings. DIRECT mode is the simplest case: some physical root is mapped to corresponding virtual root, and physical paths relative to physical root directly repeat virtual paths relative to virtual root. I.e. "c:\inetpub\wwwroot\test\data\dir1\picture.gif" is mapped into "http://www.server.com/test/data/dir1/picture.gif".

TempDirectoryPath parameter sets physical path to the location where temporary files will be stored.

VirtualPath parameter is a virtual path to the location specified by TempDirectoryPath physical path.

PathBuildingMode parameter sets physical-to-virtual mapping mode. To enable DIRECT mode, set PathBuildingMode=1.

Rest of parameters are not important for now, so leave them with the default values.

Note: TempDirectoryPath folder must have full-control permissions for the IIS account MailBee is running on (usually IUSR_<YOUR_SERVER_NAME>).

The code below prints HTML message to the user, saving all necessary files into physical location "c:\test_project\files" accessible from the web as "http://www.server.com/test/files"


Code example:

Dim objPOP3, objMsg
Set objPOP3 = Server.CreateObject("MailBee.POP3")
objPOP3.LicenseKey = "put your license key here"

' Connect to POP3 server
If objPOP3.Connect("mail.server.com", 110, "user", "pass") Then

  ' Mailbox not empty?
  If objPOP3.MessageCount > 0 Then

    ' Get a message
    Set objMsg = objPOP3.RetrieveSingleMessage(1)

    ' Save embedded images and display message body
    Response.Write _
      objMsg.GetBodyWithEmbeddedObjectsEx("c:\test_project\files", _
      "http://www.server.com/test/files", , 1)
  End If

  objPOP3.Disconnect
Else
  Response.Write objPOP3.ErrDesc
End If

See Also:

Part 2 (Using temporary filenames for embedded objects)

GetBodyWithEmbeddedObjectsEx Method


Copyright © 2002-2024, AfterLogic Corporation. All rights reserved.