import os import tempfile from email.mime.text import MIMEText import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from slic.utils.sendmail import sendmail from slic.utils.sendmail import * import shutil ''' def test_sendmail_mime_format_to_file(): from_addr = "robot@local" subject = "MIME Format Test" body = "This is the MIME body." # Create the temporary file to capture output with tempfile.NamedTemporaryFile("r+", delete=False) as tmp_file: tmp_path = tmp_file.name # Create a temporary shell script to act as a pipe receiver with tempfile.NamedTemporaryFile("w", suffix=".sh", delete=False) as script_file: script_path = script_file.name script_file.write(f"#!/bin/sh\ncat > {tmp_path}\n") os.chmod(script_path, 0o755) # Make the script executable try: # Send email using the script as a fake receiver sendmail( to_addr=f"| {script_path}", from_addr=from_addr, subject=subject, body=body ) # Read captured output with open(tmp_path, "r") as f: output = f.read() # Build expected MIME message msg = MIMEText(body) msg["To"] = f"| {script_path}" msg["From"] = from_addr msg["Subject"] = subject expected = msg.as_string() # Validate line-by-line for line in expected.splitlines(): assert line in output, f"Missing line in output: {line!r}" finally: # Cleanup temp files os.remove(tmp_path) os.remove(script_path) ''' import subprocess def start_postfix(): try: subprocess.run(["sudo", "service", "postfix", "start"], check=True) print("✅ Postfix started") except subprocess.CalledProcessError as e: print("❌ Failed to start postfix:", e) def setup_postfix(): subprocess.run("echo 'postfix postfix/mailname string localhost.localdomain' | sudo debconf-set-selections", shell=True) subprocess.run("echo 'postfix postfix/main_mailer_type string Internet Site' | sudo debconf-set-selections", shell=True) subprocess.run("sudo DEBIAN_FRONTEND=noninteractive apt-get install -y postfix", shell=True) def test_sendmail_real_local_verbose(): start_postfix() setup_postfix() to_addr = "yasmine.tligui@psi.ch" subject = "Test mail from pytest" body = "Hello! This is a real test sent using local sendmail." message = f"""Subject: {subject} From: test@localhost To: {to_addr} {body} """ print("=== SENDING MAIL ===") process = subprocess.Popen( ["/usr/sbin/sendmail", "-v", to_addr], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, stderr = process.communicate(message.encode()) print("\n=== SENDMAIL STDOUT ===") print(stdout.decode()) print("\n=== SENDMAIL STDERR ===") print(stderr.decode())