acs-mail-lite-callback-procs.tcl

Callback procs for acs-mail-lite

Location:
packages/acs-mail-lite/tcl/acs-mail-lite-callback-procs.tcl
Created:
2005-06-15
Author:
Malte Sussdorff <sussdorff@sussdorff.de>
CVS Identification:
$Id: acs-mail-lite-callback-procs.tcl,v 1.30.2.2 2021/02/22 15:05:53 antoniop Exp $

Procedures in this file

Detailed information

callback::acs_mail_lite::email_form_elements::contract (private)

 callback::acs_mail_lite::email_form_elements::contract \
    -varname varname
Switches:
-varname
(required)

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.

callback::acs_mail_lite::email_inbound::contract (private)

 callback::acs_mail_lite::email_inbound::contract \
    -headers_array_name headers_array_name \
    -parts_array_name parts_array_name [ -package_id package_id ] \
    [ -object_id object_id ] [ -party_id party_id ] [ -other other ] \
    [ -datetime_cs datetime_cs ]

Callback that is executed for inbound e-mails that are queued. package_id, object_id, party_id, other, and datetime_cs are populated only when information provided via a signed unique_id via acs_mail_lite::unique_id_create

Switches:
-headers_array_name
(required)
-parts_array_name
(required)
-package_id
(optional)
-object_id
(optional)
-party_id
(optional)
-other
(optional)
-datetime_cs
(optional)

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.

callback::acs_mail_lite::email_inbound::impl::acs-mail-lite (private)

 callback::acs_mail_lite::email_inbound::impl::acs-mail-lite \
    -headers_array_name headers_array_name \
    -parts_array_name parts_array_name [ -package_id package_id ] \
    [ -object_id object_id ] [ -party_id party_id ] [ -other other ] \
    [ -datetime_cs datetime_cs ]

Example Implementation of acs_mail_lite::email_inbound. This is where documentation for callback goes.

Switches:
-headers_array_name
(required)
An array with all email headers.
-parts_array_name
(required)
An array with info on files and bodies.
-package_id
(optional)
The package_id of package that sent the original email.
-object_id
(optional)
-party_id
(optional)
-other
(optional)
-datetime_cs
(optional)
Not all inbound email are expected to be replies.
Created:
2017-10-17
See Also:

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.

callback::acs_mail_lite::files::contract (private)

 callback::acs_mail_lite::files::contract -varname varname \
    -recipient_ids recipient_ids
Switches:
-varname
(required)
-recipient_ids
(required)

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.

callback::acs_mail_lite::incoming_email::contract (private)

 callback::acs_mail_lite::incoming_email::contract -array array \
    [ -package_id package_id ]

Callback that is executed for incoming e-mails if the email is *NOT* like $object_id@servername

Switches:
-array
(required)
-package_id
(optional)

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.

callback::acs_mail_lite::incoming_email::impl::acs-mail-lite (private, deprecated)

 callback::acs_mail_lite::incoming_email::impl::acs-mail-lite \
    -array array -package_id package_id
Deprecated. Invoking this procedure generates a warning.

Implementation of the interface acs_mail_lite::incoming_email for acs-mail-lite. This proc takes care of emails bounced back from mailer daemons. The required syntax for the To header is as follows: EnvelopPrefix-user_id-signature-package_id@myhost.com. This email was set for the Return-Path header of the original email. The signature is created by calculating the SHA value of the original Message-Id header. Thus an email is valid if the signature is correct and the user is known. If this is the case we record the bounce.

Switches:
-array
(required)
An array with all headers, files and bodies. To access the array you need to use upvar.
-package_id
(required)
The package instance that registered the prefix
Returns:
nothing
Error:
Author:
Nima Mazloumi <nima.mazloumi@gmx.de>
Created:
2005-07-15
See Also:

Partial Call Graph (max 5 caller/called nodes):
%3 acs_mail_lite::parse_bounce_address acs_mail_lite::parse_bounce_address (public, deprecated) acs_mail_lite::parse_email_address acs_mail_lite::parse_email_address (private) acs_mail_lite::record_bounce acs_mail_lite::record_bounce (public, deprecated) ad_log_deprecated ad_log_deprecated (public) callback::acs_mail_lite::incoming_email::impl::acs-mail-lite callback::acs_mail_lite::incoming_email::impl::acs-mail-lite callback::acs_mail_lite::incoming_email::impl::acs-mail-lite->acs_mail_lite::parse_bounce_address callback::acs_mail_lite::incoming_email::impl::acs-mail-lite->acs_mail_lite::parse_email_address callback::acs_mail_lite::incoming_email::impl::acs-mail-lite->acs_mail_lite::record_bounce callback::acs_mail_lite::incoming_email::impl::acs-mail-lite->ad_log_deprecated

Testcases:
No testcase defined.

callback::acs_mail_lite::incoming_object_email::contract (private)

 callback::acs_mail_lite::incoming_object_email::contract -array array \
    -object_id object_id

Callback that is executed for incoming e-mails if the email is like $object_id@servername

Switches:
-array
(required)
-object_id
(required)

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.

callback::acs_mail_lite::send::contract (private)

 callback::acs_mail_lite::send::contract -package_id package_id \
    -message_id message_id -from_addr from_addr -to_addr to_addr \
    -body body [ -mime_type mime_type ] [ -subject subject ] \
    [ -cc_addr cc_addr ] [ -bcc_addr bcc_addr ] [ -file_ids file_ids ] \
    [ -filesystem_files filesystem_files ] \
    [ -delete_filesystem_files_p delete_filesystem_files_p ] \
    [ -object_id object_id ] [ -status status ] [ -errorMsg errorMsg ]

Callback for executing code after an email has been send using the send mechanism.

Switches:
-package_id
(required)
Package ID of the sending package
-message_id
(required)
the generated message_id for this mail
-from_addr
(required)
email of the sender
-to_addr
(required)
list of emails to whom did we send this email
-body
(required)
Text body of the email
-mime_type
(defaults to "text/plain") (optional)
Mime type of the email body
-subject
(optional)
of the email
-cc_addr
(optional)
list of emails to whom did we send this email in CC
-bcc_addr
(optional)
list of emails to whom did we send this email in BCC
-file_ids
(optional)
List of file ids sent as attachments.
-filesystem_files
(optional)
-delete_filesystem_files_p
(optional)
-object_id
(optional)
The ID of the object that is responsible for sending the mail in the first place
-status
(defaults to "ok") (optional)
Status of the send operation ("ok" or "error")
-errorMsg
(optional)
Error Details

Partial Call Graph (max 5 caller/called nodes):
%3

Testcases:
No testcase defined.
[ hide source ] | [ make this the default ]

Content File Source

ad_library {

    Callback procs for acs-mail-lite

    @author Malte Sussdorff (sussdorff@sussdorff.de)
    @creation-date 2005-06-15
    @cvs-id $Id: acs-mail-lite-callback-procs.tcl,v 1.30.2.2 2021/02/22 15:05:53 antoniop Exp $
}

d_proc -public -callback acs_mail_lite::send {
    -package_id:required
    -message_id:required
    -from_addr:required
    -to_addr:required
    -body:required
    {-mime_type "text/plain"}
    {-subject}
    {-cc_addr}
    {-bcc_addr}
    {-file_ids}
    {-filesystem_files}
    {-delete_filesystem_files_p}
    {-object_id}
    {-status ok}
    {-errorMsg ""}
} {

    Callback for executing code after an email has been send using the send mechanism.

    @param package_id Package ID of the sending package
    @param message_id the generated message_id for this mail
    @param from_addr email of the sender
    @param to_addr list of emails to whom did we send this email
    @param body Text body of the email
    @param mime_type Mime type of the email body
    @param subject of the email
    @param cc_addr list of emails to whom did we send this email in CC
    @param bcc_addr list of emails to whom did we send this email in BCC
    @param file_ids List of file ids sent as attachments.
    @param object_id The ID of the object that is responsible for sending the mail in the first place
    @param status Status of the send operation ("ok" or "error")
    @param errorMsg Error Details
} -

d_proc -public -callback acs_mail_lite::incoming_email {
    -array:required
    -package_id
} {
    Callback that is executed for incoming e-mails if the email is *NOT* like $object_id@servername
} -

d_proc -public -callback acs_mail_lite::incoming_object_email {
    -array:required
    -object_id:required
} {
    Callback that is executed for incoming e-mails if the email is like $object_id@servername
} -

d_proc -public -callback acs_mail_lite::email_form_elements {
    -varname:required
} {
} -

d_proc -public -callback acs_mail_lite::files {
    -varname:required
    -recipient_ids:required
} {
} -

d_proc -deprecated -callback acs_mail_lite::incoming_email -impl acs-mail-lite {
    -array:required
    -package_id:required
} {
    Implementation of the interface acs_mail_lite::incoming_email for acs-mail-lite. This proc
    takes care of emails bounced back from mailer daemons. The required syntax for the To header
    is as follows: EnvelopPrefix-user_id-signature-package_id@myhost.com. This email was set for
    the Return-Path header of the original email. The signature is created by calculating the SHA
    value of the original Message-Id header. Thus an email is valid if the signature is correct and
    the user is known. If this is the case we record the bounce.

    @author Nima Mazloumi (nima.mazloumi@gmx.de)
    @creation-date 2005-07-15

    @param array        An array with all headers, files and bodies. To access the array you need to use upvar.
    @param package_id   The package instance that registered the prefix
    @return             nothing
    @error
} {
    upvar $array email

    # for email_queue, header info is already parsed
    if { [info exists email(aml_to_addrs)] } {
        set to $email(aml_to_addrs)
    } else {
        set to [acs_mail_lite::parse_email_address -email $email(to)]
    }
    ns_log Debug "acs_mail_lite::incoming_email -impl acs-mail-lite called. Recipient $to"

    if { ![info exists email(aml_user_id)] } {
        #
        #  GN: acs_mail_lite::parse_bounce_address is deprecated.
        #
        #    Should
        #    we use here acs_mail_lite::inbound_email_context, or should
        #    acs_mail_lite::incoming_email (and load_mails) be also deprecated
        #    and only
        #      - acs_mail_lite::maildir_check_incoming and
        #      - acs_mail_lite::imap_check_incoming
        #    should be called?
        #
        # Traditional call parses here. Queue case is pre-parsed.
        lassign [acs_mail_lite::parse_bounce_address -bounce_address $to] user_id package_id signature
    } else {
        set user_id $email(aml_user_id)
        set package_id $email(aml_package_id)
        # signature could come from a number of headers. Pre-parsing
        # makes signature obsolete here.
        set signature ""
    }
    # The above adaptions make this proc usable with newer versions of
    # code in the legacy paradigm.
    # Sadly, this bounces all cases with a user_id so it is not
    # usable for the new inbound email callback scheme.
    # If no user_id found or signature invalid, ignore message
    if {$user_id eq ""} {
      ns_log Debug "acs_mail_lite::incoming_email impl acs-mail-lite: No equivalent user found for $to"
    } else {
        ns_log Debug "acs_mail_lite::incoming_email impl acs-mail-lite: Bounce checking $to$user_id"
        acs_mail_lite::record_bounce -user_id $user_id
    }
}

d_proc -public -callback acs_mail_lite::email_inbound {
    -headers_array_name:required
    -parts_array_name:required
    {-package_id ""}
    {-object_id ""}
    {-party_id ""}
    {-other ""}
    {-datetime_cs ""}
} {
    Callback that is executed for inbound e-mails that are queued.
    package_id, object_id, party_id, other, and datetime_cs are populated
    only when information provided via a signed unique_id via
    acs_mail_lite::unique_id_create
} -


d_proc -public -callback acs_mail_lite::email_inbound -impl acs-mail-lite {
    -headers_array_name:required
    -parts_array_name:required
    {-package_id ""}
    {-object_id ""}
    {-party_id ""}
    {-other ""}
    {-datetime_cs ""}
} {
    Example Implementation of acs_mail_lite::email_inbound.
    This is where documentation for callback goes.

    @creation-date 2017-10-17

    @param headers_array_name  An array with all email headers.
    @param parts_array_name    An array with info on files and bodies.
    @see acs_mail_lite::inbound_queue_pull_one

    @param package_id   The package_id of package that sent the original email.
    @param object_id
    @param party_id
    @param other
    @param datetime_cs

    Not all inbound email are expected to be replies.
} {
    upvar $headers_array_name headers_arr
    upvar $parts_array_name parts_arr
    set no_errors_p 1
    # ------------------- Do Not change code above this line in your copy ---
    # Use this callback implementation as a template for other packages.
    # Be sure to change 'impl acs-mail-lite' to a reference relevant to
    # package implementation is used in.
    # For example: -impl super-package-now-with-email
    #
    # This proc is called whenever an inbound email is pulled from the queue.
    #
    # System-wide bounces, vacation notices and other noise have already been
    # filtered out.
    #
    # A package developer should just need to confirm input for their specific
    # package.
    #
    # When supplied, package_id, object_id and party_id, other and datetime_cs
    # are passed in headers via a signed unique_id.
    # Values default to empty string.

    # headers_arr is an array of header values indexed by header name.
    # header names are in original uppercase and lowercase, which may
    # have some significance in filtering cases. Although case should
    # should not be relied on for obtaining a value.
    # Some header indexes are created by ACS Mail Lite procs during
    # processing. For example these indexes may be populated via
    # a unique id header created using acs_mail_lite::unique_id_create :
    #
    # aml_package_id contains package_id
    #
    # aml_object_id contains object_id
    #
    # aml_party_id contains party_id (usually same as user_id)
    #
    # aml_other contains other data useful as input
    #
    # aml_datetime_cs contains approx time in seconds since epoch when sent.
    #
    #
    # Other header names, and a description of their values, includes:
    #
    # aml_received_cs approx time in seconds since epoch when email received.
    # aml_subject     contains subject value.
    # aml_to          contents of 'to' header
    # aml_to_addrs    email address of 'to' header
    # aml_from        contents of 'from' header
    # aml_from_addrs  email address of 'from' header

    # For other created headers, see: acs_mail_lite::inbound_queue_pull_one
    # Header indexes may not exist for all cases.
    #

    # parts_arr  is an array that contains all the information about attached
    # or inline files and body contents.
    # For details, see acs_mail_lite::inbound_queue_pull_one
    #

    ns_log Debug "acs_mail_lite::email_inbound -impl acs-mail-lite called. Sender $headers_arr(aml_from_addrs)"

    # Important: If your implementation has an error,
    # set no_errors_p to 0, so that the email remains
    # in the queue for later examination, even though it is also
    # marked as 'processed' so it will not be re-processed later.
    #

    # ------------------- Do Not change code below this line in your copy ---
    return $no_errors_p
}


# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: