Uploaded image for project: 'In-Portal CMS'
  1. In-Portal CMS
  2. INP-1223

Asynchronous e-mail sending by default

    XMLWordPrintable

    Details

    • Change Log Group:
      Changed
    • Change Log Message:
      The emails are sent out from CRON in an asynchronous fashion by default. New "Email Delivery" setting allows to revert to old behavior.
    • Story Points:
      1
    • Copy Issue Key:
    • Patch Instructions:

      Patches must be submitted through Phabricator.

    • BC Break Details:
      Hide

      Method signature changed:

      • "MailingListHelper::processQueue" (removed required "&$messages" parameter)
      • "kEmail::send" (removed optional "$immediate_send" parameter)

      Reborn methods:

      • "EmailTemplateEventHandler::OnProcessEmailQueue" ("email-template:OnProcessEmailQueue" event) into "EmailQueueEventHandler::OnProcessAjax" ("email-queue:OnProcessAjax" event) and "\MailingListHelper::getMessages"
      • "MailingListEventHandler::OnProcessEmailQueue" ("mailing-list:OnProcessEmailQueue" event) into "EmailQueueEventHandler::OnProcess" ("email-queue:OnProcess" event)
      • "MailingListEventHandler::_ensureDefault" into "MailingListHelper::getSetting"

      Solution

      1. for "kEmail::send" method:
        1. add optional "$immediate_send" parameter back, but with "null" default value
        2. when specified use it as-as during "\kEmailSendingHelper::Deliver" method call
      2. restore "EmailTemplateEventHandler::OnProcessEmailQueue" method, but:
        1. indicate, that it's deprecated now
        2. replace it's body with new code
      3. for "MailingListHelper::processQueue" method:
        1. restore "$messages" parameter by make it optional
        2. when "$messages" parameter isn't specified set it's value from "\MailingListHelper::getMessages" method
      4. restore "\MailingListEventHandler::OnProcessEmailQueue" method, but:
        1. indicate, that it's deprecated now
        2. replace it's body with new code
      5. restore "MailingListEventHandler::_ensureDefault" method, but:
        1. indicate, that it's deprecated now
        2. replace it's body with new code
      Show
      Method signature changed: "MailingListHelper::processQueue" (removed required "&$messages" parameter) "kEmail::send" (removed optional "$immediate_send" parameter) Reborn methods: "EmailTemplateEventHandler::OnProcessEmailQueue" ("email-template:OnProcessEmailQueue" event) into "EmailQueueEventHandler::OnProcessAjax" ("email-queue:OnProcessAjax" event) and "\MailingListHelper::getMessages" "MailingListEventHandler::OnProcessEmailQueue" ("mailing-list:OnProcessEmailQueue" event) into "EmailQueueEventHandler::OnProcess" ("email-queue:OnProcess" event) "MailingListEventHandler::_ensureDefault" into "MailingListHelper::getSetting" Solution for "kEmail::send" method: add optional "$immediate_send" parameter back, but with "null" default value when specified use it as-as during "\kEmailSendingHelper::Deliver" method call restore "EmailTemplateEventHandler::OnProcessEmailQueue" method, but: indicate, that it's deprecated now replace it's body with new code for "MailingListHelper::processQueue" method: restore "$messages" parameter by make it optional when "$messages" parameter isn't specified set it's value from "\MailingListHelper::getMessages" method restore "\MailingListEventHandler::OnProcessEmailQueue" method, but: indicate, that it's deprecated now replace it's body with new code restore "MailingListEventHandler::_ensureDefault" method, but: indicate, that it's deprecated now replace it's body with new code

      Description

      In-Portal support 2 ways of sending e-mails:

      • immediate - e-mail is sent immediately
      • queued - e-mail is put into queue and then all queued e-mail are sent within next 30 minutes

      By default all e-mails are sent immediately and this creates following problems:

      1. page, which caused e-mail sending, is frozen until e-mail is completely sent
      2. any fatal errors, that might happen during parsing e-mail template text result in user getting white screen

      I'm proposing to:

      • send all e-mails asynchronously (e.g. put them into queue) with option to override this on per e-mail basis
      • don't wait 30 minutes to send an e-mail, but rather send e-mail as soon as possible

        Attachments

        1. asynchronous_email_sending.patch
          25 kB
          Erik Snarski [Intechnic]
        2. delayed_email_sending_feat_530.patch
          27 kB
          Alex
        3. delayed_email_sending_feat.patch
          26 kB
          Alex

          Issue Links

            Activity

              People

              • Assignee:
                alex Alex
                Reporter:
                alex Alex
                Developer:
                Erik Snarski [Intechnic]
                Reviewer:
                Alex
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: