---
####################################################################
# WARNING: These are designed specifically for Ansible tests       #
# and should not be used as examples of how to write Ansible roles #
####################################################################

# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

# TODO: Our current implementation does not handle SMTP authentication

- when: 
    # TODO: https://github.com/ansible-collections/community.general/issues/4656
    - ansible_python.version.major != 3 or ansible_python.version.minor < 12
  block:

  # NOTE: If the system does not support smtpd-tls (python 2.6 and older) we do basic tests
  - name: Attempt to install smtpd-tls
    pip:
      name: smtpd-tls
      state: present
    ignore_errors: true
    register: smtpd_tls

  - name: Install test smtpserver
    copy:
      src: '{{ item }}'
      dest: '{{ remote_tmp_dir }}/{{ item }}'
    loop:
    - smtpserver.py
    - smtpserver.crt
    - smtpserver.key

  # FIXME: Verify the mail after it was send would be nice
  #        This would require either dumping the content, or registering async task output
  - name: Start test smtpserver
    shell: '{{ ansible_python.executable }} {{ remote_tmp_dir }}/smtpserver.py 10025:10465'
    async: 45
    poll: 0
    register: smtpserver

  - name: Send a basic test-mail
    mail:
      port: 10025
      subject: Test mail 1 (smtp)
      secure: never

  - name: Send a test-mail with body and specific recipient
    mail:
      port: 10025
      from: ansible@localhost
      to: root@localhost
      subject: Test mail 2 (smtp + body)
      body: Test body 2
      secure: never

  - name: Send a test-mail with attachment
    mail:
      port: 10025
      from: ansible@localhost
      to: root@localhost
      subject: Test mail 3 (smtp + body + attachment)
      body: Test body 3
      attach: /etc/group
      secure: never

  # NOTE: This might fail if smtpd-tls is missing or python 2.7.8 or older is used
  - name: Send a test-mail using starttls
    mail:
      port: 10025
      from: ansible@localhost
      to: root@localhost
      subject: Test mail 4 (smtp + starttls + body + attachment)
      body: Test body 4
      attach: /etc/group
      secure: starttls
    ignore_errors: true
    register: starttls_support

  # NOTE: This might fail if smtpd-tls is missing or python 2.7.8 or older is used
  - name: Send a test-mail using TLS
    mail:
      port: 10465
      from: ansible@localhost
      to: root@localhost
      subject: Test mail 5 (smtp + tls + body + attachment)
      body: Test body 5
      attach: /etc/group
      secure: always
    ignore_errors: true
    register: tls_support

  - fail:
      msg: Sending mail using starttls failed.
    when: smtpd_tls is succeeded and starttls_support is failed and tls_support is succeeded

  - fail:
      msg: Send mail using TLS failed.
    when: smtpd_tls is succeeded and tls_support is failed and starttls_support is succeeded

  - name: Send a test-mail with body, specific recipient and specific ehlohost
    mail:
      port: 10025
      ehlohost: some.domain.tld
      from: ansible@localhost
      to: root@localhost
      subject: Test mail 6 (smtp + body + ehlohost)
      body: Test body 6
      secure: never
