All Site Activity

  • Slonmamont-elgg added a new discussion topic Theme Sandbox Plugin in the group Elgg Technical Support
    How does THeme Sandbox plugin work? I dont see any settings or pages associated with it...
  • slyhne commented on the plugin Podcasts
    You could find feeds here: https://castos.com/
  • slyhne commented on the plugin Podcasts
    If it looks like this, then yes https://media.rss.com/missingmolly/feed.xml
  • Mrs. Paige Roberts commented on the plugin Podcasts
    just an rss feed?
  • Mrs. Paige Roberts commented on the blog Elgg 6.3.4 release
    site crash yet again after auto update  there’s no error coming, it just wipes the work i did out i have done this site 8 times i'm pretty much finished or i need to stop updates all together.
  • slyhne uploaded a new plugin: GDPR
  • slyhne uploaded a new plugin: Podcasts
  • slyhne released a new version of the plugin IP address tracker plugin
  • Jerome Bakker commented on the blog Elgg 6.3.4 release
    it just crashed my last version Any more information? Please report any bugs to https://github.com/Elgg/Elgg/issues
  • Slonmamont-elgg replied on the discussion topic Laminas - Simfony Amason SES email
    Thanks, Nikolai, looks like a new plugin to intercept the email process...  I also found a realtively easy fix ... Remove this line: 'Content-Transfer-Encoding' =>... view reply
  • ihayredinov replied on the discussion topic LLM to the rescue
    Ah, Sonnet should be ok for the job if you want to save some tokens. I have tried to minimize the inference and "thinking" that's needed. There are lot of AST rules as well as very detailed instructions on how to rewrite code to match... view reply
  • ihayredinov added a new discussion topic LLM to the rescue in the group General Discussion
    Hi there, I am doing an experiment with Claude to see if I can upgrade one of my old client installations to latest Elgg and a modern stack, as things have not been looking good with security of PHP 7 on the server, and it got stuck on Elgg 2.x for...
    • Ah, Sonnet should be ok for the job if you want to save some tokens. I have tried to minimize the inference and "thinking" that's needed. There are lot of AST rules as well as very detailed instructions on how to rewrite code to match newer Elgg version requirements. 

  • Nikolai Shcherbin replied on the discussion topic Laminas - Simfony Amason SES email
    To bypass Laminas email transport in Elgg and integrate direct Amazon SES via custom Symfony DI container override, follow this exact implementation flow. This replaces Elgg's default Laminas mailer with your custom transport factory,... view reply
  • Slonmamont-elgg added a new discussion topic Laminas - Simfony Amason SES email in the group Elgg Technical Support
    I upgraded to 6.3.4 (from 6.2) hoping to get rid off Laminas adding double headers to the emails that Amazon rejects. Installed Amazon SES bridge and followed the instrucitons how to use it but Elgg keeps using Laminas. Is there a way to get...
    • To bypass Laminas email transport in Elgg and integrate direct Amazon SES via custom Symfony DI container override, follow this exact implementation flow. This replaces Elgg's default Laminas mailer with your custom transport factory, enabling amazonses config while avoiding Symfony Mailer Bridge conflicts.

      Core Files Setup

      elgg-services.php (in your plugin's root or core override path):

      • Add DI binding: 'email.transport' => \DI\create(\MyPlugin\Core\Notifications\Email\Transport\EmailTransport::class)->constructor(\DI\get('config'), \DI\get('events')).
      • Purpose: Overrides Elgg's Laminas transport factory with your custom EmailTransport class, injecting Elgg's Config and EventsService. This hooks into Elgg's mailer pipeline without touching core Laminas code.

      Bootstrap.php (plugin's main boot file):

      • Add: _elgg_services()->set('mailer', elgg()->{'email.transport'}->build());.
      • Purpose: Manually builds and registers the mailer service post-DI, ensuring Elgg's elgg_send_email() uses your transport instead of Laminas default. Runs early in boot sequence.

      Transport Factory Class

      EmailTransport.php (namespace MyPlugin\Core\Notifications\Email\Transport):

      • Create class implementing Laminas TransportInterface factory pattern.
      • Constructor takes Elgg Config and EventsService.
      • build() method: Reads $config->{'email.transport'} (set to 'amazonses' in admin), constructs transport per switch (Sendmail/SMTP/SparkPost/Mailgun/SendGrid/AmazonSes), triggers events->triggerResults('transport', 'system:email') for plugins to modify.
      • Purpose: Centralized factory decouples config from transport impl, supports multiple providers, extensible via events. For SES: instantiates AmazonSesEmailTransport.

      Amazon SES Transport Impl

      AmazonSesEmailTransport.php (namespace MyPlugin\Notifications\Email, implements Laminas\Mail\Transport\TransportInterface):

      • Constructor: Stores SES region, access_key_id, secret_access_key from config.
      • send(Laminas\Mail\Message $message): Parses Laminas message parts (text/HTML/attachments), builds SimpleEmailServiceEnvelope, sends via SimpleEmailService::sendEmail(). Logs SES errors via elgg_log(), rethrows as Laminas RuntimeException.
      • Purpose: Direct SES API transport compatible with Elgg's Laminas Message API, bypasses SMTP bridges (no double headers). Handles multipart MIME parsing natively.

      SES Low-Level Classes

      SimpleEmailService.php (namespace MyPlugin\Notifications\Email\AmazonSes):

      • AWS SigV4 signer + GuzzleHttp\Client for SES REST API calls.
      • Methods: sendEmail($envelope) (main), listIdentities(), verifyEmailIdentity(), etc. Builds canonical requests, signs with HMAC-SHA256, handles XML responses.
      • Purpose: Pure PHP SES client (no SDK deps), manages auth/requests. Requires guzzlehttp/guzzle composer dep.

      SimpleEmailServiceEnvelope.php (same namespace):

      • Builds SES SendEmail/SendRawEmail params from Laminas message data.
      • Supports To/Cc/Bcc/ReplyTo/attachments/HTML/text, validates required fields, builds raw base64 MIME for attachments.
      • Purpose: Converts Laminas Message to SES envelope format, handles MIME boundaries/encoding.

      SimpleEmailServiceError.php (same namespace):

      • Error handler with SES-specific codes/messages (e.g., MessageRejected, Throttling).
      • Purpose: Structured exception mapping for debugging.

      Final Result & Config

      • Outcome: Elgg mailer fully bypasses Laminas transport (no double headers), uses direct SES API via your factory. Amazon SES Bridge plugin becomes redundant—uninstall it. Symfony Mailer not involved (custom DI override).
      • Admin Config (via Elgg email settings or plugin):
      $CONFIG->{'email.transport'} = 'amazonses';
      $CONFIG->{'email.amazonses_region'} = 'us-east-1';
      $CONFIG->{'email.amazonses_access_key_id'} = 'YOUR_KEY';
      $CONFIG->{'email.amazonses_secret_access_key'} = 'YOUR_SECRET';
      

      Deploy in plugin (autoload PSR-4 namespaces), clear caches, test elgg_send_email(). Handles attachments/multipart, events-extensible.

       

    • Thanks, Nikolai, looks like a new plugin to intercept the email process... 

      I also found a realtively easy fix ...

      Remove this line:

      'Content-Transfer-Encoding' => '8bit',

      from /var/www/html/vendor/elgg/elgg/engine/classes/Elgg/EmailService.php
      tested and works fine exept that it coould be refreshed on the next Elgg update...

  • Mrs. Paige Roberts commented on the blog Elgg 6.3.4 release
    it just crashed my last version
  • coreys079 created a page faq
  • coreys079 created a page about
  • Dave ONchE commented on a page titled Elgg/starter project
    You need to give more information on what you have tried and what errors you are getting. For instance, you said: "At one point i thought i had it figured, but i kept getting an internal server error. Can't seem to get this figured out....
  • Nikolai Shcherbin released a new version of the plugin IndieWeb