PeopleTools 8.4x added an option in the PeopleCode function SendMail() for specifying the content-type. In PeopleBooks, what is immediately highlighted is the ability to format your emails using HTML by setting the content-type to text/html. What probably isn’t well known is that it is also possible to set the content-type to other MIME types such as multipart/related.

text/html alone will allow you to format the text of your message. But if you need to display an image such as a logo, <img> tags inside your html will need to link to images stored in a web server somewhere. Sometimes, this is not ideal. With multipart/related, you can embed images in your email messages.

The PeopleCode to send multipart/related message is the following:


SendMail(0, &mail_to, &MAIL_CC, &MAIL_BCC, &MAIL_SUBJECT, &MAIL_BODY, "", "", %SMTPSender, ";", "Content-Type: multipart/related; boundary=""ps-MIME-boundary-0""");

Now, your message body (&MAIL_BODY) will contain an html part and image part(s). The following is an example of the &MAIL_BODY of a message. (Note there is no line-break before –ps-MIME-boundary-0)


--ps-MIME-boundary-0
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
 
<img src='cid:pslogo@unique.com'>This text is after the <b>logo</b>.
<p>This is another paragraph</p>
 
<img src='cid:pslogo@unique.com'>This text between 2 logos.<img
src='cid:anotherlogo@unique.com'>
 
--ps-MIME-boundary-0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Id: <pslogo@unique.com>
 
/9j/4AAQSkZJRgABAQEAZABkAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/2wBDAAUDBAQEAwUE
BAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/
2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
Hh4eHh4eHh4eHh7/wAARCAApADIDASIAAhEBAxEB/8QAGwAAAgMBAQEAAAAAAAAAAAAAAAcFBggD
AQT/xAAxEAABAwMCBAQEBgMAAAAAAAABAgMEBQYRAAcSEyExCBRBYSIyUXEVFiNCUoEXkfH/xAAb
AQACAwADAAAAAAAAAAAAAAACAwAFBgEEB//EACoRAAECBQMBCAMAAAAAAAAAAAECEQADBBIxBiFR
BRMUIjJBYXHRFYGh/9oADAMBAAIRAxEAPwC/eJHfu7Ns9yIls0Kg0qpx3KWme4ZAc5gAU7×4KVAA
BLeex9dVGZ4pr6rdx0ymWHZtKnrqMJD7cZ9S1vBwcQcTkLSCAUqx0HTVa8c8o03fmmShHVIL9rrj
JbSOuXPNNA++CvP9aV1h06/rY3Hsz8uUxv8AMr1PVIgxpSMBSVrf+YEj9oJ6nWpp6KnNMmYUh7X3
Oxzn4YQgqLtDhuXxaX3TrykNN2zSG6PTZiYc1lxK+cpY4gscfFhJJQvHwnGOudSDni3uKJfU2PJt
mlSLZi1ZUIyGVLS/yytYQrqoji4UFRGMHBHTWdtxU1D8YvhdUYQzO/MiTKQnsh0mUVAe2c65/h9W
uC86vb9Gp0mbJl13mDloKuHhW6Pix2+fOfY67X4+kKXKBj63/scXqjYtgb93DcW3+41wyaPS2pNr
JcVEbbDgQ6EhRHHlRP7fQjXmzm7G8+4FPbqjdkUFmmuSmOCTzHEJcjlakvlOVnK04TjOB376UWyz
rDdkb70ORIZRJdiTCy2pYCnFIQ8VcI9cYGmV4DqjfMizBDqMSKLSZbWKc+gDmF3mq40q65759NVN
TIlS5cxSUjYjPuAdveGsoNd6xpwduvfRo0aooOMp+Jlxql+Kfb64JzDppsaCPMuhpSkpAceODgd+
vbVR3LvyNI3/AKLufSKXNRHpkFMePGejLPmMc0cXwZ4R+p269taH8Sb9orspNPuWe/HfW6HoTcVI
U8taQR8p6cPxHOSB/eNZxlWzdCbfdrrrc6BSmQOB+dJKSr+KUJ7kn6f90c3qK0lKQNgm0tli/ILZ
j0HTGnqCqoxPqWC1KZN72nDWhKklZfLHbDQp9y4tx1S9LiQ9a9RYl3HV26pFbDSlDgXzVAA4+LPO
HX2OdXnaxV02ruvc0dD7lFU/VFKedeBaStDbjqvmI+Q/Ud8jUrVq5dtcojTFSqD8yDR2UqCVrCS3
xnCCT0Kz1GM5x/vXywoU+4K8y3MV+tJeELmurUf1uHCSo5J7gE/c6ZVdeXUSOwShnYO/DfTRd9M0
DKoZ6qqpnpISF+EBwHG2S5YEKYjjc5iAaeuEViotUW3ay+iqiSuRIiRXCy4XeJSkZCfiSc8JGexx
p8+Cq6LibYlWTWLKqVHYbSuW1KdYW01kqALYSpAwTknufXpqbtvbXcuoUiHb9arbVCokNPByaerD
jw9SpQ6nOfU49tMCxdqKDZ1YTVqVNqXmeAod5j2Uug/yH366Wieky7TL3OSSXflsRmNQ1smeFy+8
JKR5EIQCkAeUFfhLtxcIYGjRo0EYqElvJt9eFT3EiXfbKYE0tx0tBiXghpSc9QD0I65++dcKXtPd
t1Vhiq7l1sSGWDlqAwcNp9sABIH2GT9dPTRpXYpd40KdT1yJCZKLQUptCgkX28BWR+mMLO4dlbTr
Fzt1tfmGEgN82I0QGXeAYSSMfQAaXtl7U3R/kFAq8NuNR6dU3pqXgsK8wVEcOPbCR399aO0ahkpJ
eAkak6hJkqk33AptD72hiPDxsSPXb4DGjRo02KGDRo0akSP/2Q==
 
--ps-MIME-boundary-0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Id: <anotherlogo@unique.com>
 
R0lGODlhMAAwAPeIAAAAABsXES8bDikcFDQdDzohEzQqRUglFFQrFVk0F0kqIUQzO1YuJFg5J2c3
F3U7F2o4JUU1S01APmtEHHpEGH9YG21CJXZKInxULVVBRmVNTXlTTHdZZ4ZJF4xUHZFPGJRYGohL
JYRKNopWJJNbI49jGp1gDptjHI1jKZpkJphnMqNdGqRaIadoFqxyF7BuG7J2F6RsJ6RrNap0Kat4
M7F7KrF9M4VZSZZfQIRkXYxnZJt1Ypt+c6×9QsISF9cNFdUUGNQvINk8KuQRFuolGvoyFMlONNdM
MddQNtp5St9+UbGCHq2BM7aDLLmHNLiJRbiNUb6QQb+UUMCON8WVO8eaRsSZVcidcM2iScynWNKk
StSqV9y0Wc+ub9OnYNi1Z9e5eeC4XuKgaeGveuK8Y+S8ddzAeOjCa+rIdPLOevTQfbympcOjlsGl
o9C6qOK7i97ChNDDv+TJhuHKk+3ThuvWlffYivfel+nYp+rdvPDZsfvknfjmpPnvsP7xrv32uOTV
wvPqw/Xr1f75x/z52O3w6/785v//+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIgALAAAAAAwADAA
AAj+ABEhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJE
iBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAh
QoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQI
ESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJE
iBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBD+IUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQ
IUKECBEigIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKE
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
hAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgR
IkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSI
ECFChAgRIkSIECFChAgRIkT+iBAhQoQIESJEABEhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAh
QoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQI
ESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJE
iBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAh
QoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBBBIUKECBEiRIgQIUKE
CBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEigIgQIUKECBEiRIgQIUKECBEiRIgQBQQAOw==
 
--ps-MIME-boundary-0--

The first part of the message has the text/html content-type. This will contain the formatted message itself. The other parts contain the image data. The gibberish looking lines above are the image data encoded in base64. You could encode your logo using a base64 online tool. Each image part has a corresponding Content-Id. The images are referenced by the text/html part by specifying cid:{content-id} in the <img> src attributes.

The following screenshot shows how the above message looks like in a client like Outlook Express:

Got Mail from PS

One final note: even if you use multipart/related as the content-type of your message, the attachment functionality in SendMail() will continue to work. Following screenshot shows a message with attachments:

Rich email with Attachment