Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Email BCC Recipients
See more Email Object Examples
Explains the meaning of BCC recipients, how it is different than CC recipients, and how Chilkat handles BCC.Chilkat Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.Email;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
email: TEmail;
numBcc: Integer;
i: Integer;
begin
// In the context of email communication, the BCC (Blind Carbon Copy) field is used to send a copy of an email
// to recipients without revealing their addresses to other recipients. When it comes to the MIME
// header of an email, the BCC email addresses should not be included.
//
// The MIME header is a part of an email message that contains metadata and other information about the email,
// such as the sender, recipient(s), subject, and other details. However, the BCC field is meant to be a confidential field,
// and its purpose is to hide the recipients� email addresses from each other.
//
// Including BCC email addresses in the MIME header would defeat the purpose of using BCC since it would expose
// the hidden recipients� addresses to the other recipients. This violates the intended privacy and confidentiality of the BCC feature.
//
// To maintain the confidentiality of BCC recipients, the BCC field should only be used in the envelope of
// the email during the SMTP (Simple Mail Transfer Protocol) transaction. The SMTP server handles the actual
// delivery of the email to the respective recipients while keeping the BCC information hidden from other recipients.
//
// It is important to ensure that BCC email addresses are not included in the MIME header of an email to
// preserve the privacy and confidentiality of the recipients.
// -----------------------------------------------------------------------------------------
// To discuss how Chilkat handles BCC, let's first create an email with some BCC recipients.
email := TEmail.Create;
email.AddTo('Joe','joe@example.com');
email.AddTo('Mary','mary@example.com');
email.AddCC('Steve','steve@example.com');
email.AddBcc('Jerry','jerry@example.com');
email.AddBcc('Tom','tom@example.com');
email.Subject := 'test';
email.Body := 'test';
// Let's examine the MIME
WriteLn(email.GetMime());
WriteLn('----------------');
// We have the following.
// Notice the BCC addresses are not present. They are not included in the MIME header.
// MIME-Version: 1.0
// Date: Mon, 10 Jul 2023 13:57:22 -0500
// Message-ID: <34606FFCB4A440B20E549A223F2F7BF0EB10EE2C@SLICE>
// Content-Type: text/plain; charset=us-ascii; format=flowed
// Content-Transfer-Encoding: 7bit
// X-Priority: 3 (Normal)
// To: Joe <joe@example.com>, Mary <mary@example.com>
// Cc: Steve <steve@example.com>
// Subject: test
//
// test
// However the BCC address are still stored in the Chilkat email object.
// For example, you can examine the BCC recipients in the email object like this:
numBcc := email.NumBcc;
WriteLn('Num BCC recipients = ' + numBcc);
i := 0;
while i < numBcc do
begin
WriteLn(i);
WriteLn(email.GetBcc(i));
WriteLn(email.GetBccName(i));
WriteLn(email.GetBccAddr(i));
WriteLn('-----');
i := i + 1;
end;
// Output:
// Num BCC recipients = 2
// 0
// Jerry <jerry@example.com>
// Jerry
// jerry@example.com
// -----
// 1
// Tom <tom@example.com>
// Tom
// tom@example.com
// -----
// Thus, when the email is sent, it will also be sent to the BCC recipients,
// but the email received by each of the recipients (i.e. the raw MIME of the email)
// should not and will not include the BCC email addresses. There should be no way
// for the recipients to know that the email was sent to the BCC addresses -- because if
// there is a way to know, then it is not truly BCC.
email.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.