Ich habe eine schöne Umsetzung gefunden auf Stackoverflow (Quelle: python – How to send email attachments? – Stack Overflow) um E-Mails mit Anhang zu versenden.
Mail with attachment (python3) (github.com)
import smtplib from pathlib import Path from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.utils import COMMASPACE, formatdate from email import encoders def send_mail(send_from, send_to, subject, message, files=[], server="localhost", port=587, username='', password='', use_tls=True): """Compose and send email with provided info and attachments. Args: send_from (str): from name send_to (list[str]): to name(s) subject (str): message title message (str): message body files (list[str]): list of file paths to be attached to email server (str): mail server host name port (int): port number username (str): server auth username password (str): server auth password use_tls (bool): use TLS mode """ msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach(MIMEText(message)) for path in files: part = MIMEBase('application', "octet-stream") with open(path, 'rb') as file: part.set_payload(file.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="{}"'.format(Path(path).name)) msg.attach(part) smtp = smtplib.SMTP(server, port) if use_tls: smtp.starttls() smtp.login(username, password) smtp.sendmail(send_from, send_to, msg.as_string()) smtp.quit()
Habe das Script auf einem Raspberry-Pi getestet und das klappt auch. Ich versuche allerdings vergeblich das Script per crontab mit sudo zu nutzen. Da kommt nur als Anhang eine leere Datei an. Wenn ich das Script direkt im Terminal laufen lasse, egal als pi oder root ist alles super. Über eine Idee wäre ich sehr froh. Vielen Dank Lutz
Hast du zu deiner Datei die du als Anhang versenden möchtest auch den vollständigen Pfad angegeben?
Es geht beides, wenn kein vollständiger Pfad angegeben wird ist der Scriptpfad relevant.