Sample code for 30+ languages & platforms
Delphi DLL

Create Email with Non-Standard Binary Body

Creates an email where the only body is a binary WAV file. The technique used in the example could be applied to other binary files, such as PDF, MS-WORD docs, Excel docs, etc.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Email, Mime;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
mime: HCkMime;
strMime: PWideChar;
email: HCkEmail;

begin
success := False;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

mime := CkMime_Create();

success := CkMime_SetBodyFromFile(mime,'VoiceMessage.wav');
if (success = False) then
  begin
    Memo1.Lines.Add(CkMime__lastErrorText(mime));
    Exit;
  end;

// The MIME has this header:
// Content-Disposition: attachment;
// 	 filename="VoiceMessage.wav"
// Content-Transfer-Encoding: base64
// Content-Type: audio/x-wav;
// 	name="VoiceMessage.wav"

// We don't want the content-disposition to be an
// attachment -- otherwise the email object will self-correct
// and put it in a multipart/mixed format...
CkMime_putDisposition(mime,'');
CkMime_putFilename(mime,'');

strMime := CkMime__getMime(mime);
Memo1.Lines.Add(strMime);

// Now load it into an email object:
email := CkEmail_Create();
success := CkEmail_SetFromMimeText(email,strMime);
if (success = False) then
  begin
    Memo1.Lines.Add(CkEmail__lastErrorText(email));
    Exit;
  end;

// Add subject, TO, FROM, etc.
CkEmail_putSubject(email,'This is a test');
CkEmail_putFrom(email,'support@chilkatsoft.com');
success := CkEmail_AddTo(email,'Matt','matt@chilkatsoft.com');

// Your email is ready to send.
// (but for this example, we'll simply save it to a file...)
success := CkEmail_SaveEml(email,'email.eml');
if (success = False) then
  begin
    Memo1.Lines.Add(CkEmail__lastErrorText(email));
    Exit;
  end;

Memo1.Lines.Add('OK!');

CkMime_Dispose(mime);
CkEmail_Dispose(email);

end;