- Publicity: Public Only All
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
[ 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: