
The SendTo() and SendToEx() methods of TSMTPSend have a Subject parameter:

var
  Email: TStringList;
begin
  Email := TStringList.Create;
  try
    Email.Add('Hello World');
    SMTP.SendTo('me@me.com', 'you@you.com', 'Test Subject', 'smtp.server.com', Email);
  finally
    Email.Free;
  end;
end;

Are you saying that parameter does not work?

If you use the SendToRaw() method instead, its MailData parameter contains the complete raw data for the email, including headers:

var
  Email: TStringList;
begin
  Email := TStringList.Create;
  try
    Email.Add('From: "Me" <me@me.com>');
    Email.Add('To: "You" <you@you.com>');
    Email.Add('Subject: Test Subject'); // <--
    Email.Add('');
    Email.Add('Hello World');
    SMTP.SendToRaw('me@me.com', 'you@you.com', 'smtp.server.com', Email, 'username', 'password');
  finally
    Email.Free;
  end;
end;

In this case, you can use TMimeMess to create the raw email data.  It has a Subject property:

var
  Text: TStringList;
  Email: TMimeMess;
begin
  Email := TMimeMess.Create;
  try
    Email.Header.From := '"Me" <me@me.com>';
    Email.Header.ToList.Add('"You" <you@you.com>');
    Email.Header.Subject := 'Test Subject'; // <--

    Text := TStringList,Create;
    try
      Text.Add('Hello World');
      Email.AddPartText(Text, nil);
    finally
      Text.Free;
    end;

    Email.EncodeMessage;
    SMTP.SendToRaw('me@me.com', 'you@you.com', 'smtp.server.com', Email.Lines, 'username', 'password');
  finally
    Email.Free;
  end;
end;

Read Synapse's documentation for more details:

http://synapse.ararat.cz/doc/help/smtpsend.html
