-USING: accessors assocs combinators concurrency.promises
+USING: accessors assocs calendar combinators concurrency.promises
continuations fry io.sockets io.sockets.secure io.streams.string
kernel namespaces sequences smtp smtp.private smtp.server
sorting system tools.test ;
"p" get mock-smtp-server
default-smtp-config
- "localhost" "p" get ?promise <inet> >>server
+ "localhost" "p" get 5 seconds ?promise-timeout <inet> >>server
no-auth >>auth
os unix? [ t >>tls? ] when
\ smtp-config
[ "hello\nworld" validate-address ] must-fail
-[ "slava@factorcode.org" ]
+{ "slava@factorcode.org" }
[ "slava@factorcode.org" validate-address ] unit-test
-[ "aGVsbG8Kd29ybGQ=\r\n.\r\n" ] [
+{ "aGVsbG8Kd29ybGQ=\r\n.\r\n" } [
T{ email { body "hello\nworld" } } [ send-body ] with-string-writer
] unit-test
[ { "500 syntax error" } <response> check-response ]
[ smtp-error? ] must-fail-with
-[ ] [ { "220 success" } <response> check-response ] unit-test
+{ } [ { "220 success" } <response> check-response ] unit-test
-[ T{ response f 220 { "220 success" } } ] [
+{ T{ response f 220 { "220 success" } } } [
"220 success" [ receive-response ] with-string-reader
] unit-test
-[
+{
T{ response f 220 {
"220-a multiline response"
"250-another line"
"220 the end"
} }
-] [
+} [
"220-a multiline response\r\n250-another line\r\n220 the end"
[ receive-response ] with-string-reader
] unit-test
-[ ] [
+{ } [
"220-a multiline response\r\n250-another line\r\n220 the end"
[ get-ok ] with-string-reader
] unit-test
"Subject:\r\nsecurity hole" validate-header
] must-fail
-[
+{
{
{ "Content-Transfer-Encoding" "base64" }
{ "Content-Type" "text/plain; charset=UTF-8" }
}
{ "slava@factorcode.org" "dharmatech@factorcode.org" }
"erg@factorcode.org"
-] [
+} [
[
<email>
"Factor rules" >>subject
{
[
email>headers sort-keys [
- drop { "Date" "Message-Id" } member? not
- ] assoc-filter
+ { "Date" "Message-Id" } member? not
+ ] filter-keys
]
[ to>> [ extract-email ] map ]
[ from>> extract-email ]
] with-test-smtp-config
] unit-test
-[ ] [
+{ } [
<secure-config> f >>verify [
[
<email>