Sample code for 30+ languages & platforms
Delphi DLL

Send Email to Distribution List

See more SMTP Examples

Sends the same email to a list of 1000 email addresses in 50 sends where each email has 20 recipients.

Note: Chilkat is not intended nor designed for mass emailing. A solution such as this might be used for a corporate emailing to employees, or an emailing to newsletter subscribers.

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, MailMan, BinData, StringTable, Email, StringBuilder;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
mailman: HCkMailMan;
email: HCkEmail;
bdMime: HCkBinData;
distList: HCkStringTable;
sbRecipients: HCkStringBuilder;
i: Integer;
szDistList: Integer;
j: Integer;

begin
success := False;

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

mailman := CkMailMan_Create();

CkMailMan_putSmtpHost(mailman,'smtp.mymailserver.com');
CkMailMan_putSmtpPort(mailman,465);
CkMailMan_putSmtpSsl(mailman,True);
CkMailMan_putSmtpUsername(mailman,'myUsername');
CkMailMan_putSmtpPassword(mailman,'myPassword');

// Create a new email object
email := CkEmail_Create();
CkEmail_putSubject(email,'This is a test');
CkEmail_putBody(email,'This is a test');
CkEmail_putFrom(email,'Senders Name <sender@example.com>');
CkEmail_AddTo(email,'Subscribers','subscribers@example.com');

bdMime := CkBinData_Create();
CkMailMan_RenderToMimeBd(mailman,email,bdMime);

// Load a file containing one email address per line.
distList := CkStringTable_Create();
success := CkStringTable_AppendFromFile(distList,1000,'utf-8','qa_data/distList.txt');
if (success = False) then
  begin
    Memo1.Lines.Add(CkStringTable__lastErrorText(distList));
    Exit;
  end;

sbRecipients := CkStringBuilder_Create();

i := 0;
szDistList := CkStringTable_getCount(distList);
j := 0;
while i < szDistList do
  begin

    // Build a list of comma-separated recipients.
    if (j > 0) then
      begin
        CkStringBuilder_Append(sbRecipients,',');
      end;
    CkStringBuilder_Append(sbRecipients,CkStringTable__stringAt(distList,i));

    i := i + 1;
    j := j + 1;

    // If we have 20 recipients, or we have the final recipient in the final chunk, then send.
    if ((j = 20) or (i = szDistList)) then
      begin
        success := CkMailMan_SendMimeBd(mailman,'sender@example.com',CkStringBuilder__getAsString(sbRecipients),bdMime);
        if (success <> True) then
          begin
            Memo1.Lines.Add(CkMailMan__lastErrorText(mailman));
            Exit;
          end;
        j := 0;
        CkStringBuilder_Clear(sbRecipients);
      end;
  end;

success := CkMailMan_CloseSmtpConnection(mailman);
if (success <> True) then
  begin
    Memo1.Lines.Add('Connection to SMTP server not closed cleanly.');
  end;

Memo1.Lines.Add('Email sent to distirbution list.');

CkMailMan_Dispose(mailman);
CkEmail_Dispose(email);
CkBinData_Dispose(bdMime);
CkStringTable_Dispose(distList);
CkStringBuilder_Dispose(sbRecipients);

end;