slacker icon indicating copy to clipboard operation
slacker copied to clipboard

How to use?

Open Sparticuz opened this issue 4 years ago • 14 comments

I've got the image up and running on docker, but do you have instructions on how to use it? What's the best program to install to take advantage of this smtp server? Thanks!

Sparticuz avatar Jun 02 '20 15:06 Sparticuz

You can use it as usual SMTP server if you program can send emails directly to SMTP server.

For sending mails from command line and for old programs that calls /usr/bin/sendmail you must install one of the MTA (mail transfer agent).

Any of sendmail, postfix or exim will provide /usr/bin/sendmail command. but if you only need to redirect all emails to the slacker, then just install ssmtp.

Then you can use config /etc/ssmtp/ssmtp.conf that looks like this:

root=postmaster
mailhub=localhost:8025
hostname=localhost.localdomain

And test configuration with sendmail -s "Test subject" [email protected] < test.txt

ont avatar Jun 02 '20 16:06 ont

Awesome, got it working with ssmtp! The two snags I had were figuring out the rules array in the yaml was required, so I created a catch all rule. And the second was figuring out slacks confusing interface for creating an API key. (And scopes)

On Tue, Jun 2, 2020, 12:35 PM ont [email protected] wrote:

You can use it as usual SMTP server if you program can send emails directly to SMTP server.

For sending mails from command line and for old programs that calls /usr/bin/sendmail you must install one of the MTA (mail transfer agent).

Any of sendmail, postfix or exim will provide /usr/bin/sendmail command. but if you only need to redirect all emails to the slacker, then just install ssmtp.

Then you can use config /etc/ssmtp/ssmtp.conf that looks like this:

root=postmaster mailhub=localhost:8025 hostname=localhost.localdomain

And test configuration with sendmail -s "Test subject" [email protected] < test.txt

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/ont/slacker/issues/8#issuecomment-637668862, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABHQ6OVE3VSB6GPYJZS6UTRUUS37ANCNFSM4NQ23KOQ .

Sparticuz avatar Jun 02 '20 16:06 Sparticuz

Actually, a little help on the rule. How do I create a catch all rule? I want every single message sent through the server, regardless of where it comes from, to be pushed to slack. I tried changing the from to *@.* but it crashes

Sparticuz avatar Jun 26 '20 17:06 Sparticuz

@Sparticuz can you post error message of the crash and config?

ont avatar Jun 27 '20 07:06 ont


/usr/src/app/handler.py:19: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.,
/etc/slacker/config.yml,
  self.config = yaml.load(open(config)),
Traceback (most recent call last):,
  File "/usr/local/bin/aiosmtpd", line 11, in <module>,
    load_entry_point('aiosmtpd', 'console_scripts', 'aiosmtpd')(),
  File "/usr/src/app/src/aiosmtpd/aiosmtpd/main.py", line 107, in main,
    parser, args = parseargs(args=args),
  File "/usr/src/app/src/aiosmtpd/aiosmtpd/main.py", line 86, in parseargs,
    args.handler = handler_class(),
    self.config = yaml.load(open(config)),
  File "/usr/src/app/handler.py", line 19, in __init__,
  File "/usr/local/lib/python3.6/site-packages/yaml/__init__.py", line 114, in load,
    return loader.get_single_data(),
  File "/usr/local/lib/python3.6/site-packages/yaml/constructor.py", line 41, in get_single_data,
    node = self.get_single_node(),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 36, in get_single_node,
    document = self.compose_document(),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 55, in compose_document,
    node = self.compose_node(None, None),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 84, in compose_node,
    node = self.compose_mapping_node(anchor),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 133, in compose_mapping_node,
    item_value = self.compose_node(node, item_key),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 82, in compose_node,
    node = self.compose_sequence_node(anchor),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 111, in compose_sequence_node,
    node.value.append(self.compose_node(node, index)),
  File "/usr/local/lib/python3.6/site-packages/yaml/composer.py", line 64, in compose_node,
    if self.check_event(AliasEvent):,
  File "/usr/local/lib/python3.6/site-packages/yaml/parser.py", line 98, in check_event,
    self.current_event = self.state(),
  File "/usr/local/lib/python3.6/site-packages/yaml/parser.py", line 449, in parse_block_mapping_value,
    if not self.check_token(KeyToken, ValueToken, BlockEndToken):,
  File "/usr/local/lib/python3.6/site-packages/yaml/scanner.py", line 116, in check_token,
    self.fetch_more_tokens(),
  File "/usr/local/lib/python3.6/site-packages/yaml/scanner.py", line 227, in fetch_more_tokens,
    return self.fetch_alias(),
  File "/usr/local/lib/python3.6/site-packages/yaml/scanner.py", line 610, in fetch_alias,
    self.tokens.append(self.scan_anchor(AliasToken)),
  File "/usr/local/lib/python3.6/site-packages/yaml/scanner.py", line 924, in scan_anchor,
    % ch, self.get_mark()),
yaml.scanner.ScannerError: while scanning an alias,
  in "/etc/slacker/config.yml", line 10, column 11,
expected alphabetic or numeric character, but found '@',
  in "/etc/slacker/config.yml", line 10, column 12

I tried from: * as well as *@*

Sparticuz avatar Jun 27 '20 11:06 Sparticuz

Oh, you probably use this form in config:

rules:
    - name: Catch them all
      from: *@*

Yes, this will not work. Values in yaml must start with alphanumeric values. You must surround value with quotes: from: "*@*" or from: '*@*'. But this also will not work because rules must be correct regular expressions.

Correct "catch them all" rule must be:

rules:
    - name: "Catch them all"
      from: ".*"

ont avatar Jun 27 '20 15:06 ont

Great, It looks like I'm getting some messages. (Sorry it's taken so long, working on this on the side). Some of my messages are coming through odd though. What's this? [<email.message.Message object at 0x7f60d0a0da58>, <email.message.Message object at 0x7f60d0a0db00>]

Sparticuz avatar Jul 17 '20 17:07 Sparticuz

It is probably multipart email message with additional content. For example some email has two variants: text/plain and text/html. Currently slacker doesn't try to figure out which part of message to take nor try to convert html to plaintext.

ont avatar Jul 22 '20 14:07 ont

Can you please provide a bit more details on how to make it work ?

I have a running container, and it is open and working

# docker port slacker
8025/tcp -> 0.0.0.0:8025
8025/tcp -> :::8025

I installed ssmtp, and configured it exactly as per above (which is : )

/etc/ssmtp/ssmtp.conf looks like this:

root=postmaster
mailhub=localhost:8025
hostname=localhost.localdomain

when I run sendmail -s "Test subject" [email protected] < test.txt, I get: sendmail: Server didn't like our AUTH LOGIN (500 Error: command "AUTH" not recognized)

Is there anything else I need to do ,

hycday avatar Jul 08 '22 10:07 hycday

@hycday you probably have AuthUser directive in your config: https://linux.die.net/man/5/ssmtp.conf

AuthUser The user name to use for SMTP AUTH. The default is blank, in which case SMTP AUTH is not used.

ont avatar Jul 10 '22 13:07 ont

I indeed forgot to comment out that line, so now I only have the 3 lines from my previous post when I do :

sendmail [email protected] < test.txt

and test.txt has the following:



Subject: Test subject

Email Content line 1

I get

sendmail: 500 Error: (InvalidAuthError)

hycday avatar Jul 11 '22 08:07 hycday

Very strange. Do you have any logs from server in docker container?

ont avatar Jul 11 '22 10:07 ont

this is what i have with docker logs slacker

/usr/src/app/handler.py:19: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  self.config = yaml.load(open(config))
ERROR:mail.log:SMTP session exception
Traceback (most recent call last):
  File "/usr/src/app/src/aiosmtpd/aiosmtpd/smtp.py", line 315, in _handle_client
    await method(arg)
  File "/usr/src/app/src/aiosmtpd/aiosmtpd/smtp.py", line 688, in smtp_DATA
    status = await self._call_handler_hook('DATA')
  File "/usr/src/app/src/aiosmtpd/aiosmtpd/smtp.py", line 122, in _call_handler_hook
    status = await hook(self, self.session, self.envelope, *args)
  File "/usr/src/app/src/aiosmtpd/aiosmtpd/handlers.py", line 156, in handle_DATA
    self.handle_message(envelope)
  File "/usr/src/app/handler.py", line 28, in handle_message
    self.send_to_slack(self.extract_text(message), **options)
  File "/usr/src/app/handler.py", line 75, in send_to_slack
    icon_url=options['icon_url']
  File "/usr/local/lib/python3.6/site-packages/slack/chat.py", line 49, in post_message
    return slack.http_client.post('chat.postMessage', data)
  File "/usr/local/lib/python3.6/site-packages/slack/http_client.py", line 42, in post
    return _parse_response(response)
  File "/usr/local/lib/python3.6/site-packages/slack/http_client.py", line 49, in _parse_response
    _raise_error_if_not_ok(response)
  File "/usr/local/lib/python3.6/site-packages/slack/http_client.py", line 59, in _raise_error_if_not_ok
    raise InvalidAuthError()
slack.exception.InvalidAuthError

so i guess it comes from my config.yml... I am not sure i got the slack_token correctly can you provide a very easy guide to be sure i did it correctly ? (might be useful for others as well), and also, the username can be anything ?

hycday avatar Jul 11 '22 14:07 hycday

Nevermind...

just did it all works perfectly well.

Once you create your slack workspace go to https://api.slack.com/ Create an app Add right OAuth permissions as needed (example: Bot Token Scopes should be chat:write and chat:write.public I guess) Once done with rest of config (if needed), go to "Install app" and add it to your slack workspace to generate the slack_token (it should start with xoxb followed by numbers and then by letters, like in the readme of this docker). And thats all :)

hycday avatar Jul 11 '22 14:07 hycday