@@ -536,7 +536,7 @@
@param from of email
@param headers of email, a block of text containing all headers and values
@param header_arr_name, the name of an array containing headers.
- @param check_subject_p Set to 1 to check email subject.
+ @param check_subject_p Set to 1 to check email subject.
} {
set ag_p 0
set an_p 0
@@ -556,10 +556,10 @@
# Do NOT use x-auto-response-suppress
# per: https://stackoverflow.com/questions/1027395/detecting-outlook-autoreply-out-of-office-emails
- # header cases:
+ # header cases:
# {*x-autoresponder*} {*autoresponder*} {*autoreply*}
- # {*x-autorespond*} {*auto_reply*}
- # from:
+ # {*x-autorespond*} {*auto_reply*}
+ # from:
# https://github.com/jpmckinney/multi_mail/wiki/Detecting-autoresponders
# redundant cases are removed from list.
# auto reply = ar
@@ -571,11 +571,11 @@
{x-autorespond} \
]
# Theses were in auto_reply, but are not specific to replies:
- # {auto-generated}
- # {auto-notified}
+ # {auto-generated}
+ # {auto-notified}
# See section on auto_gen types. (auto-submitted and the like)
-
+
if { $header_arr_name ne "" } {
upvar 1 $header_arr_name h_arr
} else {
@@ -638,7 +638,7 @@
# Also per RFC 5436 section 2.7.1 consider:
# auto-submitted = as
-
+
set as_idx [lsearch -glob -nocase $hn_list {auto-submitted}]
if { $as_idx > 1 } {
set as_p 1
@@ -647,9 +647,9 @@
# also check for auto-generated
set ag_p [string match -nocase $h_arr(${as_h}) {auto-generated}]
}
-
+
ns_log Dev "acs_mail_lite::email_type.1017 as_p ${as_p} an_p ${an_p} ag_p ${ag_p}"
# If one of the headers contains {list-id} then email
@@ -700,8 +700,8 @@
}
-
+
if { !$ar_p
&& [info exists h_arr(internaldate.year)]
&& $from ne ""
@@ -741,7 +741,7 @@
# If the difference between date and local time is less than 10s
# and either from is "" or subject matches "return*to*sender"
- # More likely also from machine
+ # More likely also from machine
# if size is more than a few thousand characters in a short time.
# This is meant to detect more general cases
@@ -782,7 +782,7 @@
}
if { $is_stale_p } {
set cs2_list [list ]
- # Really?
+ # Really?
# We just added dti_cs to si_party_id_cs(party_id)
# This happens when scanning email is delayed some
ns_log Warning "acs_mail_lite::email_type.655 \
@@ -793,23 +793,23 @@
set cs2_list_len [llength $cs2_list]
if { $cs2_list_len > $max_ct } {
# si_max_ct_per_cycle reached for party_id
-
+
# Flag as low priority if over count for cycle
- # That is, add party_id to
- # acs_mail_lite::sched_parameters -lpri_party_ids
+ # That is, add party_id to
+ # acs_mail_lite::sched_parameters -lpri_party_ids
# if it is not already
# Already checked at beginning of this check
lappend lpri_pids_list $party_id
acs_mail_lite::sched_parameters \
-lpri_party_ids $lpri_pids_list
-
+
}
}
nsv_set acs_mail_lite si_party_id_cs(${party_id}) $cs2_list
}
}
}
-
+
# RFC 822 header required: DATE
set dt_idx [lsearch -glob -nocase $hn_list {date}]
# If there is no date. Flag it.
@@ -818,7 +818,7 @@
} else {
# Need to check received timestamp vs. when OpenACS
# or a system hosted same as OpenACS sent it.
-
+
set dt_h [lindex $hn_list $dt_idx]
# Cannot use optional ns_imap parsedate here. May not exist.
# RFC 5322 section 3.3: multiple spaces in date is acceptable
@@ -832,43 +832,43 @@
set diff 1000
if { $dte_cs ne "" && $dti_cs ne "" } {
set diff [expr { abs( $dte_cs - $dti_cs ) } ]
- }
+ }
# If too fast, set ts_p 1
if { $diff < 11 } {
set ts_p 1
}
-
+
# check from host against acs_mail_lite's host
# From: header must show same OpenACS domain for bounce
# and subsequently verified not a user or system recognized
- # user/admin address.
-
+ # user/admin address.
+
# Examples of unrecognized addresses include mailer-daemon@..
set host [dict get [acs_mail_lite::imap_conn_set] host]
if { $ts_p && [string -nocase "*${host}*" $from_host] } {
if { $from_email eq [ad_outgoing_sender] || !$pe_p } {
- # This is a stray one.
+ # This is a stray one.
set ag_p 1
}
-
+
}
-
+
# Another possibility is return-path "<>"
# and Message ID unique-char-ref@bounce-domain
-
- # Examples might be a bounced email from
+
+ # Examples might be a bounced email from
# a nonstandard web form on site
- # or
+ # or
# a loop where 'from' is
# a verified user or system recognized address
# and reply is within 10 seconds
# and a non-standard acs-mail-lite reply-to address
-
-
+
+
}
}
-
+
# Delivery Status Notifications, see RFC 3464
# https://tools.ietf.org/html/rfc3464
# Note: original-envelope-id is not same as message-id.
@@ -932,7 +932,7 @@
if { !$ar_p && $check_subject_p } {
# catch nonstandard cases
# subject flags
-
+
# If 'from' not set. Set here.
if { $from eq "" } {
set fr_idx [lsearch -glob -nocase $hn_list {from}]
@@ -948,18 +948,18 @@
set h_arr(aml_subject) [ns_quotehtml $subject]
}
}
-
+
set ps1 [string match -nocase {*out of*office*} $subject]
set ps2 [string match -nocase {*automated response*} $subject]
set ps3 [string match -nocase {*autoreply*} $subject]
set ps4 [string match {*NDN*} $subject]
set ps5 [string match {*\[QuickML\] Error*} $subject]
- # RFC 3834 states to NOT rely on 'Auto: ' in subject for detection.
+ # RFC 3834 states to NOT rely on 'Auto: ' in subject for detection.
#set ps6 \[string match {Auto: *} $subject\]
-
+
# from flags = pf
set pf1 [string match -nocase {*mailer*daemon*} $from]
-
+
set ar_p [expr { $ps1 || $ps2 || $ps3 || $ps4 || $ps5 || $pf1 } ]
}
@@ -973,7 +973,7 @@
# a bounce also flags maybe auto_reply, in_reply_to, auto_gen
# an auto_reply also flags maybe auto_reply, auto_gen, in_reply_to
# an auto_gen does NOT include an 'in_reply_to'
- # an in_reply_to does NOT include 'auto_gen'.
+ # an in_reply_to does NOT include 'auto_gen'.
if { $dsn_p || $or_idx > -1 } {
set type "bounce"
} elseif { $ar_p
@@ -1026,7 +1026,7 @@
# h_arr(aml_email_id)
# h_arr(aml_to_addrs) to_email_addrs
# h_arr(aml_from_addrs) from_email_addrs
- # h_arr(aml_priority) priority
+ # h_arr(aml_priority) priority
# h_arr(aml_subject) email subject (normalized index reference).
# h_arr(aml_msg_id) email message-id or msg-id's cross-reference
# see acs_mail_lite_msg_id_map.msg_id
@@ -1037,22 +1037,22 @@
# p_arr($section_id,nv_list) acs_mail_lite_part_nv_pairs
# p_arr(section_id_list) list of section_ids
#
- #
+ #
# where index is section_id based on section_ref, and
# where top most section_ref is a natural number as
# there may be more than one tree.
- #
+ #
# Specifically,
# for p_arr, content is p_arr($section_id,content)
# c_type is p_arr($section_id,c_type)
# filename is p_arr($section_id,filename)
# c_filepathname is p_arr($section_id,c_filepathname)
- #
+ #
-
+
if { !$error_p } {
-
+
# email goes into queue tables:
# This data is expected to be available at same moment
@@ -1070,7 +1070,7 @@
set received_cs ""
# sub set of header names
foreach h_name $h_names_list {
- set h_value $h_arr(${h_name})
+ set h_value $h_arr(${h_name})
switch -nocase -- $h_name {
x-openacs-from -
aml_from_addrs -
@@ -1115,27 +1115,27 @@
set size_chars $h_arr(ams_size_chars)
}
}
- aml_received_cs {
+ aml_received_cs {
set received_cs $h_value
}
aml_priority {
set priority $h_value
}
}
-
+
if { $priority eq "" } {
set priority [dict get \
[acs_mail_lite::sched_parameters] mpri_max]
}
db_dml acs_mail_lite_ie_headers_w1 {
- insert into acs_mail_lite_ie_headers
+ insert into acs_mail_lite_ie_headers
(aml_email_id,h_name,h_value)
values (:id,:h_name,:h_value)
}
}
-
- # acs_mail_lite_from_external
+
+ # acs_mail_lite_from_external
set false 0
#set processed_p 0
#set release_p 0
@@ -1173,7 +1173,7 @@
set $p ""
if { [info exists p_arr(${section_id},${p}) ] } {
set $p $p_arr(${section_id},${p})
- }
+ }
}
db_dml acs_mail_lite_ie_parts_w1 {
insert into acs_mail_lite_ie_parts
@@ -1183,7 +1183,7 @@
filename,
content,
c_filepathname)
- values
+ values
(:id,
:section_id,
:c_type,
@@ -1208,8 +1208,8 @@
}
}
}
-
+
} on_error {
ns_log Error "acs_mail_lite::inbound_queue_insert \
Unable to insert email. Headers: '[array get h_arr]' Error: ${errmsg}"
@@ -1225,7 +1225,7 @@
Identifies and processes highest priority inbound email.
} {
-
+
# Get scheduling parameters
set start_cs [clock seconds]
# The value of si_dur_per_cycle_s is used
@@ -1250,7 +1250,7 @@
# ols = ordered lists
set chunk_ols [db_list acs_mail_lite_from_external_rN {
select aml_email_id from acs_mail_lite_from_external
- where processed_p <>'1'
+ where processed_p <>'1'
and release_p <>'1'
order by priority
limit :email_max_ct } ]
@@ -1269,19 +1269,19 @@
-h_array_name h_arr \
-p_array_name p_arr \
-aml_email_id $aml_email_id
-
+
set processed_p 0
set bounced_p [acs_mail_lite::bounce_ministry]
if { !$bounced_p } {
# following from acs_mail_lite::load_mail
set pot_object_id [lindex [split $h_arr(aml_to_addrs) "@"] 0]
##code OpenACS Developers:
- # object_id@domain is unconventional
+ # object_id@domain is unconventional
# and may break if someone
# uses an email beginning with a number.
# Also, 'from' header could be spoofed..
- # This practice should be deprecated in favor of signed
+ # This practice should be deprecated in favor of signed
# acs_mail_lite::unqiue_id_create.
# For emails originating elsewhere, another authentication
# method, such as a pre-signed unique-id in message
@@ -1300,13 +1300,13 @@
}
if { !$processed_p } {
# Execute all callbacks for this email
-
+
# Forums uses callbacks via notifications
- # See callback
- # acs_mail_lite::incoming_email -imp notifications
+ # See callback
+ # acs_mail_lite::incoming_email -imp notifications
# in notifications/tcl/notification-callback-procs.tcl
# and
- # notification::reply::get
+ # notification::reply::get
# in forums/tcl/forum-reply-procs.tcl
# which is defined in file:
# notifications/tcl/notification-reply-procs.tcl
@@ -1328,7 +1328,7 @@
-party_id $h_arr(aml_party_id) \
-other $h_arr(aml_other) \
-datetime_cs $h_arr(aml_datetime_cs)]
-
+
if {"0" in $status} {
set error_p 1
}
@@ -1349,7 +1349,7 @@
incr i
}
-
+
}
return 1
@@ -1365,45 +1365,45 @@
{-legacy_array_name ""}
} {
Puts email referenced by aml_email_id from the inbound queue into array
- of h_array_name and p_array_name for use by registered callbacks.
+ of h_array_name and p_array_name for use by registered callbacks.
Arrays are repopulated with values in the same manner that
acs_mail_lite::inbounde_queue_insert receives them. See below for details.
-
- When complete, marks the email in the queue as processed,
+
+ When complete, marks the email in the queue as processed,
if mark_processed_p is 1.
-
+
Array content corresponds to these tables:
h_arr($name) $value acs_mail_lite_ie_headers
-
+
Some indexes match fields of table acs_mail_lite_from_external:
h_arr(aml_email_id) assigned by acs_mail_lite::inbound_queue_insert
h_arr(aml_to) to email including any label
h_arr(aml_to_addrs) to_email_addrs
h_arr(aml_from) from email including any label
h_arr(aml_from_addrs) from_email_addrs
- h_arr(aml_priority) priority
+ h_arr(aml_priority) priority
h_arr(aml_subject) email subject (normalized index reference).
h_arr(aml_msg_id) email message-id or msg-id's cross-reference
see acs_mail_lite_msg_id_map.msg_id
h_arr(aml_size_chars) size_chars
-
+
Some headers are transferred from the email generation process.
See acs_mail_lite::unique_id_create for details:
h_arr(aml_package_id)
h_arr(aml_party_id)
h_arr(aml_object_id)
h_arr(aml_other)
-
+
Some headers are internally generated during input:
-
+
h_arr(aml_type) Type of email from acs_mail_lite::email_type
- h_arr(aml_received_cs) Time received in seconds since Tcl epoch
- h_arr(aml_datetime_cs) Time unique_id generatd in seconds since Tcl epoch
+ h_arr(aml_received_cs) Time received in seconds since Tcl epoch
+ h_arr(aml_datetime_cs) Time unique_id generatd in seconds since Tcl epoch
h_arr(aml_processed_p) processed_p
h_arr(aml_priority) a priority number assigned to email.
@@ -1412,12 +1412,12 @@
p_arr($section_ref,) acs_mail_lite_ie_parts (content of a part)
p_arr($section_ref,nv_list) acs_mail_lite_part_nv_pairs
p_arr(section_ref_list) list of section_refs
-
-
+
+
where index is section_ref based on section_ref, and
where top most section_ref is a natural number as
there may be more than one tree.
-
+
Specifically, for p_arr array:
content is p_arr($section_ref,content)
@@ -1431,12 +1431,12 @@
c_filepathname is the filepathname within the system.
Each section may have headers:
-
+
To avoid any header-name collision with content, c_type etc,
headers are supplied in a name_value_list only:
- list of headers by section is p_arr($section_ref,name_value_list)
- list of section_refs is p_arr(section_ref_list)
+ list of headers by section is p_arr($section_ref,name_value_list)
+ list of section_refs is p_arr(section_ref_list)
For direct compatibility with legacy email systems that used:
@@ -1473,7 +1473,7 @@
h_arr(aml_size_chars) \
h_arr(aml_received_cs) \
h_arr(aml_processed_p) \
- h_arr(aml_release_p)
+ h_arr(aml_release_p)
# collect from acs_mail_lite_ie_headers
set h_lists [db_list_of_lists acs_mail_lite_ie_headers_r1 {
@@ -1499,7 +1499,7 @@
if { $tol > -1 } {
set tol_ref [lindex $h_names_ul $tol_idx]
lappend l_headers_ul $tol $h_arr(${tol_ref})
- }
+ }
}
if { $h_arr(received_cs) ne "" } {
lappend l_headers_ul received [clock format $h_arr(received_cs) ]
@@ -1548,7 +1548,7 @@
# Legacy approach replaces nested parts with flat list
# from parse_email:
- # The bodies consists of a list with two elements:
+ # The bodies consists of a list with two elements:
# content-type and content.
# The files consists of a list with three elements:
# content-type, filename and content.
@@ -1563,18 +1563,18 @@
$p_arr(${section_ref},content) ]
# check for local filename
if { $p_arr(${section_ref},c_filepathname) ne "" } {
- # Since this is saved as a file and already decoded,
+ # Since this is saved as a file and already decoded,
# guess content_type from file
# instead of assuming content type is same
# as type used in email transport.
set content_type [ns_guesstype $p_arr(${section_ref},c_filepathname)]
-
+
lappend files_list [list \
$content_type \
$default_encoding \
$p_arr(${section_ref},filename) \
$p_arr(${section_ref},c_filepathname) ]
-
+
}
}
set l_arr(bodies) $bodies_list
@@ -1589,10 +1589,10 @@
Delete email from queue that have been flagged 'release'.
This does not affect email via imap or other connections.
-
+
} {
# To flag 'release', set acs_mail_lite_from_external.release_p 1
-
+
set aml_ids_list [db_list acs_mail_lite_from_external_rn {
select aml_email_id from acs_mail_lite_from_external
where release_p='1' }]
@@ -1631,12 +1631,12 @@
Headers and values are not alphanumeric case sensitive.
- Inbound filters are dynamically updated via
+ Inbound filters are dynamically updated via
acs_mail_lite::sched_parameters.
Instead of rejecting, an email can be filtered to low priority
by using acs_mail_lite::inbound_prioritize parameters
-
+
@see acs_mail_lite::sched_parameters
@see acs_mail_lite::inbound_prioritize
} {
@@ -1645,7 +1645,7 @@
set headers_list [array names h_arr]
set p_lists [acs_mail_lite::sched_parameters]
-
+
# For details on these filters, see tables:
# acs_mail_lite_ui.reject_on_hit
# .reject_on_miss
@@ -1668,7 +1668,7 @@
if { [string match -nocase $vh_arr(${h}) $h_arr(${h})] } {
set reject_p 1
}
-
+
incr i
}
@@ -1691,10 +1691,10 @@
if { ![string match -nocase $vm_arr(${h}) $h_arr(${h})] } {
set reject_p 1
}
-
+
incr i
- }
-
+ }
+
return $reject_p
}
@@ -1709,12 +1709,12 @@
If you are not sure if this will do what you want, try setting
reprocess_old_p to '1'.
@see acs_mail_lite::sched_parameters
-
+
} {
db_dml acs_mail_lite_email_uid_map_d {
update acs_mail_lite_email_uid_id_map {
delete from acs_mail_lite_email_uid_id_map
-
+
}
}
return 1
@@ -1774,11 +1774,11 @@
section_id
} {
Returns section_ref represented by section_id.
- Section_id is an integer.
+ Section_id is an integer.
Section_ref has format of counting numbers separated by dot.
First used here by ns_imap body and adopted for general email part refs.
- Defaults to empty string (top level reference and a log warning)
+ Defaults to empty string (top level reference and a log warning)
if not found.
} {
set section_ref ""
@@ -1787,9 +1787,9 @@
if { $section_id eq "-1" } {
set exists_p 1
} else {
-
+
set exists_p [db_0or1row acs_mail_lite_ie_section_ref_map_r_id1 {
- select section_ref
+ select section_ref
from acs_mail_lite_ie_section_ref_map
where section_id=:section_id
} ]
@@ -1806,20 +1806,20 @@
} {
Returns section_id representing a section_ref.
Section_ref has format of counting numbers separated by dot.
- Section_id is an integer.
+ Section_id is an integer.
First used here by ns_imap body and adopted for general email part refs.
} {
set section_id ""
if { [regexp -- {^[0-9\.]*$} $section_ref ] } {
-
+
if { $section_ref eq "" } {
set section_id -1
} else {
set ckey aml_section_ref_
append ckey $section_ref
set exists_p [db_0or1row -cache_key $ckey \
acs_mail_lite_ie_section_ref_map_r1 {
- select section_id
+ select section_id
from acs_mail_lite_ie_section_ref_map
where section_ref=:section_ref
} ]
@@ -1845,8 +1845,8 @@
{-other ""}
} {
Returns a unique_id for an outbound email header message-id.
- Signs unique_id when package_id, party_id, object_id, and/or other info are supplied. party_id is not supplied if its value is empty string or 0.
- package_id not supplied when it is the default acs-mail-lite package_id.
+ Signs unique_id when package_id, party_id, object_id, and/or other info are supplied. party_id is not supplied if its value is empty string or 0.
+ package_id not supplied when it is the default acs-mail-lite package_id.
If unique_id is empty string, creates a unique_id then processes it.
} {
@@ -1868,15 +1868,15 @@
}
set bounce_domain [acs_mail_lite::address_domain]
- if { [string range $unique_id $last_at_idx+1 end-1] ne $bounce_domain } {
+ if { [string range $unique_id $last_at_idx+1 end-1] ne $bounce_domain } {
# Use bounce's address_domain instead
# because message-id may also be used as originator
set unique_id [string range $unique_id 0 $last_at_idx]
append unique_id $bounce_domain
}
set aml_package_id [apm_package_id_from_key "acs-mail-lite"]
- if { ( $package_id ne "" && $package_id ne $aml_package_id )
+ if { ( $package_id ne "" && $package_id ne $aml_package_id )
|| ( $party_id ne "" && $party_id ne "0" )
|| $object_id ne ""
|| $other ne ""
@@ -1888,7 +1888,7 @@
set uid_list [split $uid "."]
if { [llength $uid_list] == 3 } {
# Assume this is a unique id from mime::uniqueID
-
+
# Replace clock seconds of uniqueID with a random integer
# since cs is used to build signature, which defeats purpose.
set uid_partial [lindex $uid_list 0]
@@ -1897,7 +1897,7 @@
# It will be 10 for a while..
# so use eleven 9's
# Some cycles are saved by using a constant
- append uid_partial "." [randomRange 99999999999]
+ append uid_partial "." [randomRange 99999999999]
append uid_partial "." [lindex $uid_list 2]
set uid $uid_partial
@@ -1918,10 +1918,10 @@
}
set signed_unique_id [join $signed_unique_id_list $delim]
- # Since signature is part of uniqueness of unique_id,
+ # Since signature is part of uniqueness of unique_id,
# use uid + signature for msg_id
set msg_id $uid
- append msg_id "-" $signed_unique_id
+ append msg_id "-" $signed_unique_id
set datetime_cs [clock seconds]
db_dml acs_mail_lite_send_msg_id_map_w1 {
@@ -1931,14 +1931,14 @@
}
set unique_id "<"
append unique_id $msg_id "@" $domain ">"
- }
+ }
return $unique_id
}
ad_proc -private acs_mail_lite::unique_id_parse {
-message_id:required
} {
- Parses a message-id compatible reference
+ Parses a message-id compatible reference
created by acs_mail_lite::unique_id_create.
Returns package_id, party_id, object_id, other, datetime_cs in a name value list.
@@ -1954,18 +1954,18 @@
lassign $return_list package_id party_id object_id other datetime_cs
set last_at_idx [string last "@" $message_id]
-
+
set domain [string range $message_id $last_at_idx+1 end]
set unique_part [string range $message_id 0 $last_at_idx-1]
set first_dash_idx [string first "-" $unique_part]
-
+
if { $first_dash_idx > -1 } {
# message-id is signed.
ns_log Dev "acs_mail_lite::unique_id_parse message_id '${message_id}'"
set unique_id [string range $unique_part 0 $first_dash_idx-1]
set signature [string range $unique_part $first_dash_idx+1 end]
set sign_list [split $signature "-+"]
-
+
if { [llength $sign_list] == 3 } {
# signature is in good form
# Use the signature's delimiter instead of param IncomingMaxAge
@@ -1974,7 +1974,7 @@
#set max_age /parameter::get -parameter "IncomingMaxAge" \
# -package_id $aml_package_id /
#ns_log Dev "acs_mail_lite::unique_id_parse max_age '${max_age}'"
- # if max_age is "" or "0" delim is "-".
+ # if max_age is "" or "0" delim is "-".
# See acs_mail_lite::unique_id_create
if { [string first "-" $signature] } {
# A max_age of 0 or '' expires instantly.
@@ -2018,8 +2018,8 @@
} else {
set date_time_cs ""
}
-
- }
+
+ }
set r_list [list \
package_id $package_id \
party_id $party_id \
@@ -2038,7 +2038,7 @@
Returns openacs data associated with original outbound email in
the header_array_name and as an ordered list of values:
- package_id, party_id, object_id, other, datetime_cs
+ package_id, party_id, object_id, other, datetime_cs
datetime_cs is the time in seconds since Tcl epoch.
@@ -2049,7 +2049,7 @@
data in context of email.
Array indexes have suffix aml_ added to index name:
- aml_package_id, aml_party_id, aml_object_id, aml_other, aml_datetime_cs
+ aml_package_id, aml_party_id, aml_object_id, aml_other, aml_datetime_cs
If a value is not found, an empty string is returned for the value.
@@ -2060,7 +2060,7 @@
upvar 1 $header_array_name h_arr
if { $header_name_list eq "" } {
set header_name_list [array names h_arr]
- }
+ }
# Here are some procs that help create a message-id or orginator
# or generated unique ids from inbound email headers
@@ -2088,7 +2088,7 @@
# Note for imap paradigm: message-id should be in form:
#
- # and unqiue_id should map to
+ # and unqiue_id should map to
# any package, party and/or object_id so
# as to not leak info unnecessarily.
# See table acs_mail_lite_send_msg_id_map
@@ -2126,7 +2126,7 @@
# these are the headers to check in a reply indicating original context:
# original-message-id
- # original-envelope-id
+ # original-envelope-id
# message-id a unique message id per RFC 2822 3.6.4
# assigned by originator per RFC 598 3.4.1
# https://tools.ietf.org/html/rfc5598#section-3.4.1
@@ -2136,20 +2136,20 @@
# Notices may be sent to this address when
# a bounce notice to the original email's 'From'
# address bounces.
- # See RFC 5321 2.3.1
+ # See RFC 5321 2.3.1
# https://tools.ietf.org/html/rfc5321#section-2.3.1
- # and RFC 5598 2.2.1
+ # and RFC 5598 2.2.1
# https://tools.ietf.org/html/rfc5598#section-2.1
# msg-id
# In-Reply-to space delimited list of unique message ids per RFC 2822 3.6.4
# References space delimited list of unique message ids per RFC 2822 3.6.4
#
# original-recipient may contain original 'to' address of party_id
# original-recipient-address
- # is an alternate to original-recipient
- # used by RFC 3461 4.2
+ # is an alternate to original-recipient
+ # used by RFC 3461 4.2
# https://tools.ietf.org/html/rfc3461#section-4.2
- # Recipient could be used as an extra layer
+ # Recipient could be used as an extra layer
# of authentication after parsing.
# for example
# 'from' header is built as:
@@ -2174,7 +2174,7 @@
#
- # acs-mail-lite::send_immediately
+ # acs-mail-lite::send_immediately
# 'from' header defaults to acs_mail_lite parameter FixedSenderEmail
# 'Reply-to' defaults to 'from' header value.
# adds a different unique id to 'Return-Path'.
@@ -2192,24 +2192,24 @@
# which relies on tcllib mime package
# in file acs-tcl/tcl/html-email-procs.tcl
# message-id is built by acs_mail_lite::generate_message_id
- # or mime::uniqueID
- # and used in acs_mail_lite::send_immediately
+ # or mime::uniqueID
+ # and used in acs_mail_lite::send_immediately
# acs_mail_lite::generate_message_id:
# return "/clock clicks/./ns_time/.oacs@/address_domain/>"
- # mime::uniqueID:
+ # mime::uniqueID:
# return ""
# is defined in ns/lib/tcllib1.18/mime/mime.tcl
# mime(cid) is a counter that increments by one each time called.
lappend check_list content-id
-
+
# To make acs_mail_lite_send_msg_id_map more robust,
# should it be designed to import other references via a table map
# so external references can be used? No.
- # Replaced generic use of mime::uniqueID
+ # Replaced generic use of mime::uniqueID
# with acs_mail_lite::unique_id_create
# Don't assume acs_mail_lite::valid_signature works. It appears to check
# an unknown form and is orphaned (not used).
@@ -2221,7 +2221,7 @@
# reply-to
# Mail-Followup-To
# parameter NotificationSender defaults to
- # remainder@ acs_mail_lite::address_domain
+ # remainder@ acs_mail_lite::address_domain
# which defaults to:
# remainder@ parameter BounceDomain
# if set, otherwise to a driver hostname
@@ -2276,7 +2276,7 @@
set header [lindex $check_list $header_id]
set h_idx [lsearch -exact -nocase $header_name_list $header]
if { $h_idx > -1 } {
- set h_name [lindex $check_list $h_idx]
+ set h_name [lindex $check_list $h_idx]
# hv = header value
if { $header eq "references" } {
@@ -2293,17 +2293,17 @@
# remove quoting angle brackets if any
if { [string match "<*>" $hv ] } {
set hv [string range $hv 1 end-1]
- }
+ }
set context_list [acs_mail_lite::unique_id_parse \
-message_id $hv]
- if { $h_arr(aml_datetime_cs) eq ""
+ if { $h_arr(aml_datetime_cs) eq ""
&& [string match "${bounce_addrs}*" $hv]
} {
##code developers of OpenACS core:
# Legacy case should be removed for strict, secure
# handling of context info
-
+
# Check legacy case
# Regexp code is from acs_mail_lite::parse_bounce_address
if { [regexp $regexp_str $hv all user_id signature package_id] } {
@@ -2314,7 +2314,7 @@
other "" ]
set sig_list [split $signature "."]
set sig_1 [lindex $sig_list 1]
- if { [llength $sig_list ] == 3
+ if { [llength $sig_list ] == 3
&& [string is wideinteger -strict $sig_1]
} {
lappend context_list datetime_cs $sig_1
@@ -2330,7 +2330,7 @@
append cname $n
set h_arr(${cname}) $v
}
-
+
incr hv_i
}
}
@@ -2347,7 +2347,7 @@
Check if this email is notifying original email bounced.
If is a bounced notification, process it.
- Returns 1 if bounced or an auto generated reply that
+ Returns 1 if bounced or an auto generated reply that
should be ignored, otherwise returns 0
Expects header_array to have been previously processed by these procs:
@@ -2359,13 +2359,13 @@
# This is called ministry, because it is expected to grow in complexity
# as bounce policy becomes more mature.
- # The traditional OpenACS MailDir way:
- # code in acs_mail_lite::load_mails
- # in which, if there is a bounce, calls:
+ # The traditional OpenACS MailDir way:
+ # code in acs_mail_lite::load_mails
+ # in which, if there is a bounce, calls:
# acs_mail_lite::record_bounce
# and later batches some admin via
# acs_mail_lite::check_bounces
- # This approach likely does not work for
+ # This approach likely does not work for
# standard email accounts where a FixedSenderEmail is expected and
# a dynamic (unstatic) email
# would bounce back again and therefore never be reported in system.
@@ -2399,9 +2399,9 @@
# Record bounced email?
set party_id_from_addrs [party::get_by_email \
-email $h_arr(aml_from_addrs)]
-
+
if { $party_id_from_addrs ne "" } {
- set user_id $party_id_from_addrs
+ set user_id $party_id_from_addrs
if { ![acs_mail_lite::bouncing_user_p -user_id $user_id ] } {
# Following literally from acs_mail_lite::record_bounce
@@ -2426,7 +2426,7 @@
}
}
-
+
} else {
# This is probably a bounce, but not from a recognized party
# Log it, because it might help with email related issues.
@@ -2435,12 +2435,12 @@
}
}
-
+
return $ignore_p
}
-#
+#
# Local variables:
# mode: tcl
# tcl-indent-level: 4
Index: openacs-4/packages/acs-mail-lite/tcl/imap-inbound-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-mail-lite/tcl/imap-inbound-procs.tcl,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/acs-mail-lite/tcl/imap-inbound-procs.tcl 12 Jun 2018 08:09:07 -0000 1.6
+++ openacs-4/packages/acs-mail-lite/tcl/imap-inbound-procs.tcl 14 Jun 2018 20:56:07 -0000 1.7
@@ -1,7 +1,7 @@
ad_library {
Provides API for importing email via nsimap
-
+
@creation-date 19 Jul 2017
@cvs-id $Id$
@@ -29,8 +29,8 @@
used by ACS Mail Lite imap connections
If a parameter is passed with value, the value is assigned to parameter.
-
- @param name_mb See nsimap documentation for mailbox.name.
+
+ @param name_mb See nsimap documentation for mailbox.name.
@param port Ignored for now. SSL automatically switches port.
} {
# See one row table acs_mail_lite_imap_conn
@@ -57,13 +57,13 @@
select ho,pa,po,ti,us,na,fl
from acs_mail_lite_imap_conn limit 1
} ]
-
+
if { !$exists_p } {
# set initial defaults
set mb [ns_config nsimap mailbox ""]
set mb_good_form_p [regexp -nocase -- \
{^[{]([a-z0-9\.\/]+)[}]([a-z0-9\/\ \_]+)$} \
- $mb x ho na]
+ $mb x ho na]
# ho and na defined by regexp?
set ssl_p 0
if { !$mb_good_form_p } {
@@ -91,7 +91,7 @@
}
}
-
+
set pa [ns_config nsimap password ""]
set po [ns_config nsimap port ""]
set ti [ns_config -int nsimap timeout 1800]
@@ -151,7 +151,7 @@
}
}
}
-
+
if { $validated_p } {
foreach ic_n $n_pv_list {
set ${ic_n} $n_arr($ic_n)
@@ -164,12 +164,12 @@
}
}
db_dml acs_mail_lite_imap_conn_i {
- insert into acs_mail_lite_imap_conn
+ insert into acs_mail_lite_imap_conn
(ho,pa,po,ti,us,na,fl)
values (:ho,:pa,:po,:ti,:us,:na,:fl)
}
}
- }
+ }
}
set i_list [list ]
foreach i $ic_list {
@@ -198,7 +198,7 @@
or as close as possible to it.
If -host parameter is supplied, will try connection with supplied params.
- Defaults to use connection info provided by parameters
+ Defaults to use connection info provided by parameters
via acs_mail_lite::imap_conn_set.
@param port Ignored for now. SSL automatically switches port.
@@ -241,7 +241,7 @@
ns_log Dev "acs_mail_lite::imap_conn_go.612: \
sessions_list '${sessions_list}'"
# Example session_list as val0 val1 val2 val3 val4 val5 val6..:
- #'40 1501048046 1501048046 {{or97.net:143/imap/tls/user="testimap1"}}
+ #'40 1501048046 1501048046 {{or97.net:143/imap/tls/user="testimap1"}}
# 39 1501047978 1501047978 {{or97.net:143/imap/tls/user="testimap1"}}'
set i 0
while { $i < $s_len && $id ne $conn_id } {
@@ -272,7 +272,7 @@
ns_log Dev "acs_mail_lite::imap_conn_go.640: fl_list '${fl_list}'"
}
}
-
+
if { !$prior_conn_exists_p && $host ne "" } {
if { "ssl" in $fl_list } {
set ssl_p 1
@@ -291,7 +291,7 @@
-password $password] \
} err_txt ] \
} { ns_log Warning "acs_mail_lite::imap_conn_go.653 \
- Error attempting ns_imap open. Error is: '${err_txt}'"
+ Error attempting ns_imap open. Error is: '${err_txt}'"
} else {
set connected_p 1
ns_log Dev "acs_mail_lite::imap_conn_go.662: \
@@ -304,7 +304,7 @@
-password $password] \
} err_txt ] \
} { ns_log Warning "acs_mail_lite::imap_conn_go.653 \
- Error attempting ns_imap open. Error is: '${err_txt}'"
+ Error attempting ns_imap open. Error is: '${err_txt}'"
} else {
set connected_p 1
ns_log Dev "acs_mail_lite::imap_conn_go.675: \
@@ -330,15 +330,15 @@
ns_log Notice "acs_mail_lite::imap_conn_go.725 \
available top level mailbox names '${t_list}'"
if { [llength $t_list < 2] && !$default_to_inbox_p } {
- # Provide more hints.
+ # Provide more hints.
set t_list [ns_imap list $conn_id $host {*}]
ns_log Notice "acs_mail_lite::imap_conn_go.727 \
available mailbox names '${t_list}'"
}
} else {
set mb_exists_p 1
}
-
+
if { !$mb_exists_p && $default_to_inbox_p } {
set mb_default ""
set idx [lsearch -exact -nocase $t_list "${default_box_name}"]
@@ -387,11 +387,11 @@
set conn_id [ns_imap open \
-mailbox "${mb}" \
-user $user \
- -password $password]
+ -password $password]
}
}
}
-
+
}
return $conn_id
}
@@ -410,7 +410,7 @@
ns_log Dev "acs_mail_lite::imap_conn_close.716: \
sessions_list '${sessions_list}'"
# Example session_list as val0 val1 val2 val3 val4 val5 val6..:
- #'40 1501048046 1501048046 {{or97.net:143/imap/tls/user="testimap1"}}
+ #'40 1501048046 1501048046 {{or97.net:143/imap/tls/user="testimap1"}}
# 39 1501047978 1501047978 {{or97.net:143/imap/tls/user="testimap1"}}'
set id ""
set i 0
@@ -430,7 +430,7 @@
if { $conn_exists_p eq 0 } {
ns_log Warning "acs_mail_lite::imap_conn_close.732: \
Session(s) broken? conn_id '${conn_id}' not found."
- }
+ }
return $conn_exists_p
}
@@ -506,7 +506,7 @@
set cycle_start_cs [clock seconds]
nsv_lappend acs_mail_lite si_actives_list $cycle_start_cs
set si_actives_list [nsv_get acs_mail_lite si_actives_list]
-
+
set si_dur_per_cycle_s \
[nsv_get acs_mail_lite si_dur_per_cycle_s]
set per_cycle_s_override [nsv_get acs_mail_lite \
@@ -519,15 +519,15 @@
} else {
set per_cycle_s_override $si_dur_per_cycle_s
}
-
-
+
+
set active_cs [lindex $si_actives_list end]
set concurrent_ct [llength $si_actives_list]
# pause is in seconds
set pause_s 10
set pause_ms [expr { $pause_s * 1000 } ]
- while { $active_cs eq $cycle_start_cs
- && [clock seconds] < $si_quit_cs
+ while { $active_cs eq $cycle_start_cs
+ && [clock seconds] < $si_quit_cs
&& $concurrent_ct > 1
} {
incr per_cycle_s_override $pause_s
@@ -592,13 +592,13 @@
if { !$processed_p } {
set headers_list [ns_imap headers $cid $msgno]
array set hdrs_arr $headers_list
-
+
set type [acs_mail_lite::email_type \
-header_arr_name hdrs_arr ]
-
+
# Create some standardized header indexes aml_*
- # with corresponding values
+ # with corresponding values
set size_idx [lsearch -nocase -exact \
$headers_list size]
set sizen [lindex $headers_list $size_idx]
@@ -607,13 +607,13 @@
} else {
set hdrs_arr(aml_size_chars) ""
}
-
+
if { [info exists hdrs_arr(received_cs)] } {
set hdrs_arr(aml_received_cs) $hdrs_arr(received_cs)
} else {
set hdrs_arr(aml_received_cs) ""
}
-
+
set su_idx [lsearch -nocase -exact \
$headers_list subject]
if { $su_idx > -1 } {
@@ -622,7 +622,7 @@
} else {
set hdrs_arr(aml_subject) ""
}
-
+
set to_idx [lsearch -nocase -exact \
$headers_list to]
if { ${to_idx} > -1 } {
@@ -631,14 +631,14 @@
} else {
set hdrs_arr(aml_to) ""
}
-
+
acs_mail_lite::inbound_email_context \
-header_array_name hdrs_arr \
-header_name_list $headers_list
-
+
acs_mail_lite::inbound_prioritize \
-header_array_name hdrs_arr
-
+
set error_p [acs_mail_lite::imap_email_parse \
-headers_arr_name hdrs_arr \
-parts_arr_name parts_arr \
@@ -650,9 +650,9 @@
set hdrs_arr(aml_package_ids_list) [safe_eval ${filter_proc}]
}
if { !$error_p } {
-
+
set id [acs_mail_lite::inbound_queue_insert \
- -parts_arr_name parts_arr
+ -parts_arr_name parts_arr
\
-headers_arr_name hdrs_arr \
-error_p $error_p ]
@@ -674,7 +674,7 @@
# close connection
acs_mail_lite::imap_conn_close -conn_id $cid
}
-
+
}
# end if !$error
@@ -689,7 +689,7 @@
} else {
nsv_set acs_mail_lite si_configured_p 0
}
- # acs_mail_lite::imap_check_incoming should quit gracefully
+ # acs_mail_lite::imap_check_incoming should quit gracefully
# when not configured or there is error on connect.
}
@@ -717,7 +717,7 @@
# for format this proc is to generate.
- # Due to the hierarchical nature of email and ns_imap struct
+ # Due to the hierarchical nature of email and ns_imap struct
# this proc is recursive.
upvar 1 $headers_arr_name h_arr
upvar 1 $parts_arr_name p_arr
@@ -732,7 +732,7 @@
if { [string range $section_ref 0 0] eq "." } {
set section_ref [string range $section_ref 1 end]
- }
+ }
ns_log Dev "acs_mail_lite::imap_email_parse.706 \
msgno '${msgno}' section_ref '${section_ref}'"
@@ -762,7 +762,7 @@
type {
set type $v
}
-
+
default {
# do nothing
}
@@ -790,12 +790,12 @@
lappend p_arr(section_id_list) ${section_id}
if { [info exists bytes]
- && $bytes > $__max_txt_bytes
+ && $bytes > $__max_txt_bytes
&& ![info exists filename]
} {
set filename "blob.txt"
}
-
+
if { [info exists filename ] } {
set filename2 [clock microseconds]
append filename2 "-" $filename
@@ -818,23 +818,23 @@
ns_imap body $conn_id $msgno ${section_ref} \
-file $filepathname \
-decode
- }
+ }
} elseif { $section_ref ne "" } {
# text content
set p_arr(${section_id},content) [ns_imap body $conn_id $msgno $section_ref]
ns_log Dev "acs_mail_lite::imap_email_parse.792 \
text content '${conn_id}' '${msgno}' '${section_ref}' \
$p_arr(${section_id},content)'"
-
+
} else {
set p_arr(${section_id},content) ""
# The content for this case
# has been verified to be redundant.
# It is mostly the last section/part of message.
#
- # If diagnostics urge examining these cases,
- # Set debug_p 1 to allow the following code to
- # to compress a message to recognizable parts without
+ # If diagnostics urge examining these cases,
+ # Set debug_p 1 to allow the following code to
+ # to compress a message to recognizable parts without
# flooding the log.
set debug_p 0
if { $debug_p } {
@@ -864,7 +864,7 @@
}
-#
+#
# Local variables:
# mode: tcl
# tcl-indent-level: 4
Index: openacs-4/packages/acs-mail-lite/tcl/maildir-inbound-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-mail-lite/tcl/maildir-inbound-procs.tcl,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/acs-mail-lite/tcl/maildir-inbound-procs.tcl 12 Jun 2018 08:09:07 -0000 1.6
+++ openacs-4/packages/acs-mail-lite/tcl/maildir-inbound-procs.tcl 14 Jun 2018 20:56:07 -0000 1.7
@@ -1,7 +1,7 @@
ad_library {
Provides API for importing email via postfix maildir
-
+
@creation-date 12 Oct 2017
@cvs-id $Id$
@@ -23,26 +23,26 @@
set error_p 0
set mail_dir_fullpath [acs_mail_lite::mail_dir]
if { $mail_dir_fullpath ne "" } {
-
+
set newdir [file join $mail_dir_fullpath new "*"]
set curdir [file join $mail_dir_fullpath cur "."]
set messages_list [glob -nocomplain $newdir]
-
+
# only one of acs_mail_lite::maildir_check_incoming process at a time.
set cycle_start_cs [clock seconds]
nsv_lappend acs_mail_lite sj_actives_list $cycle_start_cs
set sj_actives_list [nsv_get acs_mail_lite sj_actives_list]
ns_log Notice "acs_mail_lite::maildir_check_incoming.37. start \
sj_actives_list '${sj_actives_list}'"
-
+
set active_cs [lindex $sj_actives_list end]
set concurrent_ct [llength $sj_actives_list]
# pause is in seconds
set pause_s 10
set pause_ms [expr { $pause_s * 1000 } ]
- while { $active_cs eq $cycle_start_cs
+ while { $active_cs eq $cycle_start_cs
&& $concurrent_ct > 1
} {
set sj_actives_list [nsv_get acs_mail_lite sj_actives_list]
@@ -55,7 +55,7 @@
}
if { $active_cs eq $cycle_start_cs } {
-
+
set aml_package_id [apm_package_id_from_key "acs-mail-lite"]
set filter_proc [parameter::get -parameter "IncomingFilterProcName" \
-package_id $aml_package_id]
@@ -85,13 +85,13 @@
$mail_dir_fullpath ]
if { !$processed_p } {
-
+
set type [acs_mail_lite::email_type \
-header_arr_name hdrs_arr ]
-
+
set headers_list [array names hdrs_arr]
# Create some standardized header indexes aml_*
- # with corresponding values
+ # with corresponding values
set size_idx [lsearch -nocase -exact \
$headers_list size]
set sizen [lindex $headers_list $size_idx]
@@ -100,13 +100,13 @@
} else {
set hdrs_arr(aml_size_chars) ""
}
-
+
if { [info exists hdrs_arr(received_cs)] } {
set hdrs_arr(aml_received_cs) $hdrs_arr(received_cs)
} else {
set hdrs_arr(aml_received_cs) ""
}
-
+
set su_idx [lsearch -nocase -exact \
$headers_list subject]
if { $su_idx > -1 } {
@@ -115,7 +115,7 @@
} else {
set hdrs_arr(aml_subject) ""
}
-
+
set to_idx [lsearch -nocase -exact \
$headers_list to]
if { ${to_idx} > -1 } {
@@ -124,18 +124,18 @@
} else {
set hdrs_arr(aml_to) ""
}
-
+
acs_mail_lite::inbound_email_context \
-header_array_name hdrs_arr \
-header_name_list $headers_list
-
+
acs_mail_lite::inbound_prioritize \
-header_array_name hdrs_arr
-
+
if { [string match {[a-z]*_[a-z]*} $filter_proc] } {
set hdrs_arr(aml_package_ids_list) [safe_eval ${filter_proc}]
}
-
+
set id [acs_mail_lite::inbound_queue_insert \
-parts_arr_name parts_arr \
-headers_arr_name hdrs_arr \
@@ -162,7 +162,7 @@
acs_mail_lite sj_actives_list '[nsv_get acs_mail_lite sj_actives_list]'"
}
# end if !$error
-
+
return 1
}
@@ -228,17 +228,17 @@
message file '${message_fpn}' error: '${errmsg}'"
set error_p 1
} else {
- # For acs_mail_lite::inbond_cache_hit_p,
- # make a uid if there is not one.
+ # For acs_mail_lite::inbond_cache_hit_p,
+ # make a uid if there is not one.
set uid_ref ""
- # Do not use email file's tail,
+ # Do not use email file's tail,
# because tail is unique to system not email.
# See http://cr.yp.to/proto/maildir.html
-
+
# A header returns multiple values in a list
# if header name is repeated in email.
set h_list [mime::getheader $m_id]
- # headers_list
+ # headers_list
set headers_list [list ]
foreach {h v} $h_list {
switch -nocase -- $h {
@@ -254,7 +254,7 @@
if { $uid_ref ne "uid"} {
if { $uid_ref ne "message-id" } {
# message-id is not required
- # msg-id is an alternate
+ # msg-id is an alternate
# Fallback to most standard uid
set uid_ref [string tolower $h]
set uid_val $v
@@ -273,15 +273,15 @@
lappend headers_list "aml_datetime_cs" $dt_cs
}
}
- default {
+ default {
# do nothing
}
}
lappend headers_list $h $v
}
lappend headers_list "aml_received_cs" [file mtime ${message_fpn}]
lappend headers_list "uid" $uid_val
-
+
# Append property_list to headers_list
set prop_list [mime::getproperty $m_id]
#set prop_names_list /mime::getproperty $m_id -names/
@@ -294,7 +294,7 @@
regsub -all -nocase -- {[^0-9a-zA-Z-.,\_]} $w {_} w
if { $w eq "" } {
set w "untitled"
- }
+ }
set filename $w
lappend headers_list "filename" $w
} else {
@@ -313,7 +313,7 @@
}
set subref_ct 0
set type ""
-
+
# Assume headers and names are unordered
foreach {n v} $headers_list {
if { [string match -nocase {parts} $n] } {
@@ -348,23 +348,23 @@
}
}
}
-
+
set section_id [acs_mail_lite::section_id_of $section_ref]
ns_log Dev "acs_mail_lite::maildir_email_parse.746 \
message_fpn '${message_fpn}' section_ref '${section_ref}' section_id '${section_id}'"
-
+
# Add content of an email part
set p_arr(${section_id},nv_list) $section_n_v_list
set p_arr(${section_id},c_type) $type
lappend p_arr(section_id_list) ${section_id}
-
+
if { [info exists bytes]
&& $bytes > $__max_txt_bytes
&& ![info exists filename]
} {
set filename "blob.txt"
}
-
+
if { [info exists filename] } {
set filename2 [clock microseconds]
append filename2 "-" $filename
@@ -388,23 +388,23 @@
chan configure $binfileId -translation binary
puts -nonewline $binfileId [mime::getbody $m_id -decode ]
close $binfileId
- }
+ }
} elseif { $section_ref ne "" } {
# text content
set p_arr(${section_id},content) [mime::buildmessage $m_id]
ns_log Dev "acs_mail_lite::maildir_email_parse.792 \
text m_id '${m_id}' '${section_ref}': \
$p_arr(${section_id},content)'"
-
+
} else {
set p_arr(${section_id},content) ""
# The content for this case
# has been verified to be redundant.
# It is mostly the last section/part of message.
#
- # If diagnostics urge examining these cases,
- # Set debug_p 1 to allow the following code to
- # to compress a message to recognizable parts without
+ # If diagnostics urge examining these cases,
+ # Set debug_p 1 to allow the following code to
+ # to compress a message to recognizable parts without
# flooding the log.
set debug_p 0
if { $debug_p } {
@@ -432,7 +432,7 @@
}
-#
+#
# Local variables:
# mode: tcl
# tcl-indent-level: 4
Index: openacs-4/packages/acs-mail-lite/tcl/utils-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-mail-lite/tcl/utils-procs.tcl,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/acs-mail-lite/tcl/utils-procs.tcl 19 Feb 2018 19:00:23 -0000 1.7
+++ openacs-4/packages/acs-mail-lite/tcl/utils-procs.tcl 14 Jun 2018 20:56:07 -0000 1.8
@@ -1,9 +1,9 @@
# packages/acs-mail-lite/tcl/utils-procs.tcl
ad_library {
-
+
Helper procs to build email messages
-
+
@author Emmanuelle Raffenne (eraffenne@gmail.com)
@creation-date 2007-12-16
@arch-tag: 820de9a9-533f-4fc3-b11d-2c9fb616a620
@@ -19,7 +19,7 @@
{-charset "UTF-8"}
subject
} {
- Encode the subject, using quoted-printable, of an email message
+ Encode the subject, using quoted-printable, of an email message
and trim long lines.
Depending on the available mime package version, it uses either
@@ -38,7 +38,7 @@
# maxlen for each line
# 69 = 76 - 7 where 7 is for "=?"+"?Q?+"?="
set maxlen [expr {69 - [string length $charset]}]
-
+
#
# Make sure, the subject line does not have surrounding white
# space/new lines
@@ -49,7 +49,7 @@
ad_log warning "subject line contains line breaks (replaced by space): '$subject' -> '$s'"
set subject $s
}
-
+
#
# set up variables for loop
#
@@ -60,7 +60,7 @@
set subject_length [string length $subject]
while { $i < $subject_length } {
set chunk [string index $subject $i]
-
+
# encode that chunk
set chunk [encoding convertto $charset_code "$chunk"]
if { $chunk eq "\x3F" } {
@@ -107,7 +107,7 @@
}
if { [catch {package require mime 1.5.2}] } {
-
+
set gmt [clock format $clock -format "%Y-%m-%d %H:%M:%S" -gmt true]
set diff [expr {($clock - [clock scan $gmt]) / 60}]
if {$diff < 0} {
@@ -144,7 +144,7 @@
Return a list of message tokens
} {
- # Encode the body
+ # Encode the body
set encoding [ns_encodingforcharset $charset]
set body [encoding convertto $encoding $body]
@@ -166,7 +166,7 @@
-param [list charset $charset] \
-encoding "quoted-printable" \
-string [ad_html_to_text -- $body]]
-
+
set message_token [mime::initialize \
-canonical "multipart/alternative" \
-parts [list $message_text_part $message_html_part]]