On Sun, 14 Jan 2024, Bo Berglund via lazarus wrote:

On Sat, 13 Jan 2024 17:03:55 +0100 (CET), Michael Van Canneyt via lazarus
<lazarus@lists.lazarus-ide.org> wrote:

You could also use Synapse. I always prefer synapse over Indy.


So I have now verified that I cannot use Indy10 for email sending anymore :( ...

I have used Indy since a very long time like 20 years or so when dealing with
Internet accesses. So I am not used to other ways.

Now I have looked around for valid examples which will work like my send
function but using Synapse but the result is confusing.

I have found your pdf document "Sending mails using Lazarus.pdf".

But I am not clear as to how to map the Indy properties to Synapse...
And the example's uses clause is not shown so I don't know what to put there...

It says so in the text: 'the smtpsend unit'.


In fact I have looked for Synapse and in OnLine Package Manager I find
Synapse_40.1, which I have installed via OLPM. But when looking through the
packages in Lazarus I cannot find any match to synapse at all.
What have I done wrong?

Nothing.

The synapse package is not installed in the IDE, it does not
install any components on the component palette.

The Synapse package just offers classes which you must create in code.

But once you compiled the package, you can specify it as a dependency.

This is explained in my article, in the first paragraphs.


Inside the pdf I found a link to http://synapse.ararat.cz/ but there seems to be
only files from more than 10 years ago, how could they solve the recently
encountered ssl problem?

The latest code is on sourceforge:

https://sourceforge.net/p/synalist/code/HEAD/tree/trunk/

You can see it referenced on:

http://synapse.ararat.cz/doku.php/download

The maintainer is considering switching to git(lab|hub), but this will take
some time.

However, the package in lazarus should be up-to-date for your needs, I think.

Could you (or someone else reading this) suggest a new SendSvnMessage function
that will replace the following (snippets) but using Synapse (and say from where
I can get synapse):

The following program compiles:

With the aid of my article, you should be able to extend the code to work with 
attachments etc.

----
program sm;

{$mode objfpc}
{$h+}

uses
  ssl_openssl, smtpSend, mimepart, mimemess, sysutils, classes;

type
  { TSvnUser } //Data from SVN user config is put here
  TSvnUser = class
  public
    LoginName,
    FullName,
    Email: string;
  end;
  TSvnUsers = Array of TSVNUser;


  { TSvnMessage }
  TSvnMessage = class
  private
    FSMTP: TSMTPSend;
    FMailMessage: TMimeMess;
    FSender : String;
    FMailServer: string;
    FMailLogin: string;
    FMailPwd: string;
    FMailPort: word;
    FMailUseSSL: boolean;
    FMailTimeout: integer;
    FSvnUsers: TSvnUsers; //A list of users (TSvnUser) and data
    function SendSvnMessage: boolean;
    procedure preparemessage;
  end;

  Procedure Log(Msg : string);


  begin
    writeln(msg)
  end;

  Procedure MailError(Msg : String);

  begin
    Raise Exception.Create(Msg);
  end;

  procedure LogException(Msg : string);

  begin
    Writeln('Exception occurred : ',Msg);
  end;

function TSvnMessage.SendSvnMessage: boolean;


var
  sSubject: string;
  i: integer;
begin
  Result := false;
  try
    PrepareMessage;
    //Set up the SMTP transfer properties
    FSMTP.TargetPort := IntToStr(FMailPort);
    FSMTP.TargetHost := FMailServer;
    FSMTP.AutoTls:=true;
    FSMTP.Username := FMailLogin;
    FSMTP.Password := FMailPwd;
//    FSMTP.MailAgent := 'SVNMailer';
    FSMTP.Timeout := FMailTimeout;
    // compose the message
    FMailMessage.EncodeMessage;

    //Now send message
    Log('Connecting to mailserver');
    if FSMTP.Login then
    begin
      Log('Sending message');
      if not FSMTP.MailFrom(FSender,0) then
        MailError('Setting mail from')
      else
        begin
        if not FSMTP.MailTo('u...@example.com') then
          MailError('Setting mail to')
        else
          FSMTP.MailData(FMailMessage.Lines);
        end;
      Result := true;
    end;
  except
    on E: Exception do
    begin
      LogException('In SendSvnMessage = ' + E.Message);
    end;
  end;
end;

procedure TSvnMessage.PrepareMessage;
var
        i: integer;
  Usr,
  Msg: string;
  SU: TSvnUser;

begin
  (*if Pos('<html>', FMailMessage.Body.Text) > 0 then
    FMailMessage.ContentType := 'text/html; charset=utf-8'
  else
    FMailMessage.ContentType := 'text/plain; charset=utf-8';*)
  Msg := 'Recipients:';
//  for i := 0 to FSubscription.Count - 1 do
  begin
//    Usr := Lowercase(FSubscription[i]);
//    if Pos('#', Usr) > 0 then Continue;
//    SU := FSvnUsers.UserByLogin[Usr];
    if SU <> NIL then
    begin
      // Add to TO: list. There is also CClist

      FMailMessage.Header.ToList.Add(Format('%s <%s>',[SU.FullName,SU.Email]));
      Msg := Msg + ' ' + Usr;
    end;
  end;
//  Log(Msg);
end;

begin
end.
--
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to