[fpc-pascal] Dependency of OpenSSL 1.0.2 still in FPC 3.2.0 on some platforms?

Michael Van Canneyt michael at freepascal.org
Mon May 10 11:40:41 CEST 2021



On Mon, 10 May 2021, Bo Berglund via fpc-pascal wrote:

>
> Not so simple when you read scores of Internet pages on the subject...

99% of what is written on internet is junk or outdated.

OK, maybe it's only 98%.

Check the synapse sources, that's all you need. 
The handling of attachments is well explained on the synapse homepage/wiki.

http://www.ararat.cz/synapse/doku.php/public:howto
http://www.ararat.cz/synapse/doku.php/public:howto:mimeparts

> Where is the actual sending of the email happening?
> And how do I add the attachments?

It is explained in my article. Nothing has changed in this regard.
Didn't you read the section on attachments ?

in the below, aMailData is a record with MailBody, MailHTML strings, and a list of
recipients 'Recipients' and attachment filenames in Attachments.

var
   Msg: TMimeMess;
   Body,Html : TStringList;
   H,PM,P,Rel,Alt : TMimePart;
   Recips : TArray<String>;

begin
     Msg.Header.From := FSMTP.Username;
     Msg.Header.Subject:=aMailData.Subject;
     for S in Recips do
       Msg.Header.ToList.Add(S);
     if (aMailData.MailBody<>'') and (aMailData.MailHTMl<>'') then
       begin
       PM:=Msg.AddPartMultipart('mixed',Nil);
       Rel := Msg.AddPartMultipart('related', P);
       Alt := Msg.AddPartMultipart('alternative', Rel);
       P:=Alt;
       end;
     if aMailData.MailBody<>'' then
       begin
       Body:=TStringList.Create;
       Body.Text:=aMailData.MailBody;
       Body.WriteBOM:=False;
       Msg.AddPartText(Body,P);
     end;
     if aMailData.MailHTMl<>'' then
     begin
       HTML:=TStringList.Create;
       HTML.WriteBOM:=False;
       HTML.Text:=aMailData.MailHTMl;
       H:=Msg.AddPartHTML(HTML,P);
       H.ConvertCharset:=False;
       // H.EncodingCode:=ME_BASE64;
       H.EncodePart;
       H.EncodePartHeader;
     end;
     // Todo : attachments
     // Add all attachments, assume Attachments is a stringlist with
     // filenames
     For I:=0 to aMailData.Attachments.Count-1 do
        Msg.AddPartBinaryFromFile(Attachments[I],PM);
     // Compose message
     Msg.EncodeMessage;
     if not FSMTP.Login then
       Raise EDaemon.CreateFmt(SErrLoginFailed,[Fsmtp.EnhCodeString]);
     //If you successfully pass authorization to the remote server
     If Not FSMTP.AuthDone Then
       Raise EDaemon.CreateFmt(SErrLoginFailed,[Fsmtp.EnhCodeString]);
     //Send MAIL FROM SMTP command to set sender’s e-mail address.
     If Not FSMTP.MailFrom('ourmail at ourcompany', Length(Msg.Lines.text)) then
       Raise EDaemon.CreateFmt(SErrMailFromFailed,[Fsmtp.EnhCodeString]);
     For S in aMailData.Recipients do
       begin
       If Not FSMTP.MailTo(S) Then
         Raise EDaemon.CreateFmt(SMailtoFailed,[Fsmtp.EnhCodeString]);
       if not FSMTP.MailData(Msg.Lines) Then
         Raise EDaemon.CreateFmt(SMailDataFailed,[Fsmtp.EnhCodeString]);
       end;

The above is actual code from a program currently in production. 
This together with the sample from the article should be plenty to create
your own code.

Michael.


More information about the fpc-pascal mailing list