Unicode support for notification_email library
This commit is contained in:
10
library/runtime/process/notification_email/license.lic
Normal file
10
library/runtime/process/notification_email/license.lic
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
${NOTE_KEYWORD}
|
||||||
|
copyright: "2011-${YEAR}, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
source: "[
|
||||||
|
Eiffel Software
|
||||||
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
||||||
|
Telephone 805-685-1006, Fax 805-685-6869
|
||||||
|
Website http://www.eiffel.com
|
||||||
|
Customer support http://support.eiffel.com
|
||||||
|
]"
|
||||||
@@ -55,4 +55,14 @@ feature -- Basic operation
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
note
|
||||||
|
copyright: "2011-2013, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
source: "[
|
||||||
|
Eiffel Software
|
||||||
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
||||||
|
Telephone 805-685-1006, Fax 805-685-6869
|
||||||
|
Website http://www.eiffel.com
|
||||||
|
Customer support http://support.eiffel.com
|
||||||
|
]"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -55,17 +55,24 @@ feature -- Conversion
|
|||||||
message: STRING_8
|
message: STRING_8
|
||||||
do
|
do
|
||||||
Result := header
|
Result := header
|
||||||
Result.append ("%N")
|
Result.append_character ('%N')
|
||||||
Result.append (body)
|
Result.append (body)
|
||||||
Result.append ("%N")
|
Result.append_character ('%N')
|
||||||
Result.append ("%N")
|
Result.append_character ('%N')
|
||||||
end
|
end
|
||||||
|
|
||||||
header: STRING_8
|
header: STRING_8
|
||||||
|
local
|
||||||
|
hdate: HTTP_DATE
|
||||||
do
|
do
|
||||||
create Result.make (20)
|
create Result.make (20)
|
||||||
Result.append ("From: " + from_address + "%N")
|
Result.append ("From: ")
|
||||||
Result.append ("Date: " + date_to_rfc1123_http_date_format (date) + " GMT%N")
|
Result.append (from_address)
|
||||||
|
Result.append_character ('%N')
|
||||||
|
Result.append ("Date: ")
|
||||||
|
create hdate.make_from_date_time (date)
|
||||||
|
hdate.append_to_rfc1123_string (Result)
|
||||||
|
Result.append (" GMT%N")
|
||||||
Result.append ("To: ")
|
Result.append ("To: ")
|
||||||
across
|
across
|
||||||
to_addresses as c
|
to_addresses as c
|
||||||
@@ -74,24 +81,24 @@ feature -- Conversion
|
|||||||
Result.append_character (';')
|
Result.append_character (';')
|
||||||
end
|
end
|
||||||
Result.append_character ('%N')
|
Result.append_character ('%N')
|
||||||
Result.append ("Subject: " + subject + "%N")
|
Result.append ("Subject: ")
|
||||||
|
Result.append (subject)
|
||||||
|
Result.append_character ('%N')
|
||||||
ensure
|
ensure
|
||||||
Result.ends_with ("%N")
|
Result.ends_with ("%N")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
feature {NONE} -- Implementation
|
|
||||||
|
|
||||||
date_to_rfc1123_http_date_format (dt: DATE_TIME): STRING_8
|
|
||||||
-- String representation of `dt' using the RFC 1123
|
|
||||||
local
|
|
||||||
d: HTTP_DATE
|
|
||||||
do
|
|
||||||
create d.make_from_date_time (dt)
|
|
||||||
Result := d.rfc1123_string
|
|
||||||
end
|
|
||||||
|
|
||||||
invariant
|
invariant
|
||||||
-- invariant_clause: True
|
-- invariant_clause: True
|
||||||
|
|
||||||
|
note
|
||||||
|
copyright: "2011-2013, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
source: "[
|
||||||
|
Eiffel Software
|
||||||
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
||||||
|
Telephone 805-685-1006, Fax 805-685-6869
|
||||||
|
Website http://www.eiffel.com
|
||||||
|
Customer support http://support.eiffel.com
|
||||||
|
]"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
note
|
note
|
||||||
description : "Objects that ..."
|
description: "[
|
||||||
author : "$Author$"
|
Component responsible to send email using an external mailer
|
||||||
date : "$Date$"
|
i.e: an external tool such as sendmail or a script, ...
|
||||||
revision : "$Revision$"
|
]"
|
||||||
|
author: "$Author$"
|
||||||
|
date: "$Date$"
|
||||||
|
revision: "$Revision$"
|
||||||
|
|
||||||
class
|
class
|
||||||
NOTIFICATION_EXTERNAL_MAILER
|
NOTIFICATION_EXTERNAL_MAILER
|
||||||
@@ -10,27 +13,30 @@ class
|
|||||||
inherit
|
inherit
|
||||||
NOTIFICATION_MAILER
|
NOTIFICATION_MAILER
|
||||||
|
|
||||||
-- SHARED_EXECUTION_ENVIRONMENT
|
SHARED_EXECUTION_ENVIRONMENT
|
||||||
|
export
|
||||||
|
{NONE} all
|
||||||
|
end
|
||||||
|
|
||||||
create
|
create
|
||||||
make
|
make
|
||||||
|
|
||||||
feature {NONE} -- Initialization
|
feature {NONE} -- Initialization
|
||||||
|
|
||||||
make (a_exe: like executable_path; args: detachable ITERABLE [READABLE_STRING_8])
|
make (a_exe: READABLE_STRING_GENERAL; args: detachable ITERABLE [READABLE_STRING_GENERAL])
|
||||||
-- Initialize `Current'.
|
-- Initialize `Current'.
|
||||||
do
|
do
|
||||||
set_parameters (a_exe, args)
|
set_parameters (a_exe, args)
|
||||||
end
|
end
|
||||||
|
|
||||||
executable_path: READABLE_STRING_8
|
executable_path: PATH
|
||||||
|
|
||||||
arguments: detachable ARRAYED_LIST [STRING_8]
|
arguments: detachable ARRAYED_LIST [READABLE_STRING_GENERAL]
|
||||||
|
|
||||||
stdin_mode_set: BOOLEAN
|
stdin_mode_set: BOOLEAN
|
||||||
-- Use `stdin' to pass email message, rather than using local file?
|
-- Use `stdin' to pass email message, rather than using local file?
|
||||||
|
|
||||||
stdin_termination_sequence: detachable STRING
|
stdin_termination_sequence: detachable READABLE_STRING_8
|
||||||
-- Termination sequence for the stdin mode
|
-- Termination sequence for the stdin mode
|
||||||
--| If any, this tells the executable all the data has been provided
|
--| If any, this tells the executable all the data has been provided
|
||||||
--| For instance, using sendmail, you should have "%N.%N%N"
|
--| For instance, using sendmail, you should have "%N.%N%N"
|
||||||
@@ -41,18 +47,18 @@ feature -- Status
|
|||||||
local
|
local
|
||||||
f: RAW_FILE
|
f: RAW_FILE
|
||||||
do
|
do
|
||||||
create f.make (executable_path)
|
create f.make_with_path (executable_path)
|
||||||
Result := f.exists
|
Result := f.exists
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Change
|
feature -- Change
|
||||||
|
|
||||||
set_parameters (cmd: like executable_path; args: detachable ITERABLE [READABLE_STRING_8])
|
set_parameters (cmd: READABLE_STRING_GENERAL; args: detachable ITERABLE [READABLE_STRING_GENERAL])
|
||||||
-- Set parameters `executable_path' and associated `arguments'
|
-- Set parameters `executable_path' and associated `arguments'
|
||||||
local
|
local
|
||||||
l_args: like arguments
|
l_args: like arguments
|
||||||
do
|
do
|
||||||
executable_path := cmd
|
create executable_path.make_from_string (cmd)
|
||||||
if args = Void then
|
if args = Void then
|
||||||
arguments := Void
|
arguments := Void
|
||||||
else
|
else
|
||||||
@@ -86,7 +92,7 @@ feature -- Basic operation
|
|||||||
if retried = 0 then
|
if retried = 0 then
|
||||||
create l_factory
|
create l_factory
|
||||||
if stdin_mode_set then
|
if stdin_mode_set then
|
||||||
p := l_factory.process_launcher (executable_path, arguments, Void)
|
p := l_factory.process_launcher (executable_path.name, arguments, Void)
|
||||||
p.set_hidden (True)
|
p.set_hidden (True)
|
||||||
p.set_separate_console (False)
|
p.set_separate_console (False)
|
||||||
|
|
||||||
@@ -110,7 +116,7 @@ feature -- Basic operation
|
|||||||
args.force (f.name)
|
args.force (f.name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
p := l_factory.process_launcher (executable_path, args, Void)
|
p := l_factory.process_launcher (executable_path.name, args, Void)
|
||||||
p.set_hidden (True)
|
p.set_hidden (True)
|
||||||
p.set_separate_console (False)
|
p.set_separate_console (False)
|
||||||
|
|
||||||
@@ -140,34 +146,36 @@ feature -- Basic operation
|
|||||||
|
|
||||||
feature {NONE} -- Implementation
|
feature {NONE} -- Implementation
|
||||||
|
|
||||||
new_temporary_file (a_extension: detachable STRING_8): RAW_FILE
|
new_temporary_file (a_extension: detachable READABLE_STRING_8): RAW_FILE
|
||||||
-- Create file with temporary name.
|
-- Create file with temporary name.
|
||||||
-- With concurrent execution, noting ensures that {FILE_NAME}.make_temporary_name is unique
|
-- With concurrent execution, noting ensures that {FILE_NAME}.make_temporary_name is unique
|
||||||
-- So using `a_extension' may help
|
-- So using `a_extension' may help
|
||||||
local
|
local
|
||||||
fn: FILE_NAME
|
bn: STRING_32
|
||||||
s: like {FILE_NAME}.string
|
fn: PATH
|
||||||
|
s: STRING_32
|
||||||
f: detachable like new_temporary_file
|
f: detachable like new_temporary_file
|
||||||
i: INTEGER
|
i: INTEGER
|
||||||
do
|
do
|
||||||
-- With concurrent execution, nothing ensures that {FILE_NAME}.make_temporary_name is unique
|
-- With concurrent execution, nothing ensures that {FILE_NAME}.make_temporary_name is unique
|
||||||
-- So let's try to find
|
-- So let's try to find
|
||||||
from
|
from
|
||||||
|
create bn.make_from_string_general ((create {FILE_NAME}.make_temporary_name).string)
|
||||||
|
create s.make_empty
|
||||||
until
|
until
|
||||||
f /= Void or i > 1000
|
f /= Void or i > 1000
|
||||||
loop
|
loop
|
||||||
create fn.make_temporary_name
|
create fn.make_from_string (bn)
|
||||||
s := fn.string
|
s.make_empty
|
||||||
if i > 0 then
|
if i > 0 then
|
||||||
s.append_character ('-')
|
s.append_character ('-')
|
||||||
s.append_integer (i)
|
s.append_integer (i)
|
||||||
create fn.make_from_string (s)
|
fn := fn.appended (s)
|
||||||
end
|
end
|
||||||
if a_extension /= Void then
|
if a_extension /= Void then
|
||||||
fn.add_extension (a_extension)
|
fn := fn.appended_with_extension (a_extension)
|
||||||
end
|
end
|
||||||
s := fn.string
|
create f.make_with_path (fn)
|
||||||
create f.make (fn.string)
|
|
||||||
if f.exists then
|
if f.exists then
|
||||||
i := i + 1
|
i := i + 1
|
||||||
f := Void
|
f := Void
|
||||||
@@ -185,13 +193,16 @@ feature {NONE} -- Implementation
|
|||||||
result_creatable: Result.is_creatable
|
result_creatable: Result.is_creatable
|
||||||
end
|
end
|
||||||
|
|
||||||
feature {NONE} -- Environment
|
|
||||||
|
|
||||||
Execution_environment: EXECUTION_ENVIRONMENT
|
|
||||||
once
|
|
||||||
create Result
|
|
||||||
end
|
|
||||||
|
|
||||||
invariant
|
invariant
|
||||||
|
|
||||||
|
note
|
||||||
|
copyright: "2011-2013, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
source: "[
|
||||||
|
Eiffel Software
|
||||||
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
||||||
|
Telephone 805-685-1006, Fax 805-685-6869
|
||||||
|
Website http://www.eiffel.com
|
||||||
|
Customer support http://support.eiffel.com
|
||||||
|
]"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
note
|
note
|
||||||
description : "[
|
description: "[
|
||||||
Component responsible to send email
|
Component responsible to send email
|
||||||
]"
|
]"
|
||||||
author : "$Author$"
|
author: "$Author$"
|
||||||
date : "$Date$"
|
date: "$Date$"
|
||||||
revision : "$Revision$"
|
revision: "$Revision$"
|
||||||
|
|
||||||
deferred class
|
deferred class
|
||||||
NOTIFICATION_MAILER
|
NOTIFICATION_MAILER
|
||||||
@@ -45,4 +45,14 @@ feature -- Basic operation
|
|||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
|
note
|
||||||
|
copyright: "2011-2013, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
source: "[
|
||||||
|
Eiffel Software
|
||||||
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
||||||
|
Telephone 805-685-1006, Fax 805-685-6869
|
||||||
|
Website http://www.eiffel.com
|
||||||
|
Customer support http://support.eiffel.com
|
||||||
|
]"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ note
|
|||||||
description : "[
|
description : "[
|
||||||
NOTIFICATION_MAILER using sendmail as mailtool
|
NOTIFICATION_MAILER using sendmail as mailtool
|
||||||
]"
|
]"
|
||||||
author : "$Author$"
|
author: "$Author$"
|
||||||
date : "$Date$"
|
date: "$Date$"
|
||||||
revision : "$Revision$"
|
revision: "$Revision$"
|
||||||
|
|
||||||
class
|
class
|
||||||
NOTIFICATION_SENDMAIL_MAILER
|
NOTIFICATION_SENDMAIL_MAILER
|
||||||
@@ -31,4 +31,14 @@ feature {NONE} -- Initialization
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
note
|
||||||
|
copyright: "2011-2013, Jocelyn Fiat, Javier Velilla, Olivier Ligot, Eiffel Software and others"
|
||||||
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
source: "[
|
||||||
|
Eiffel Software
|
||||||
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
||||||
|
Telephone 805-685-1006, Fax 805-685-6869
|
||||||
|
Website http://www.eiffel.com
|
||||||
|
Customer support http://support.eiffel.com
|
||||||
|
]"
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user