Gmail Python mehrere Anhänge
Ich versuche, erstellen ein kleines Skript, das per E-Mail mehrere Anhänge mit gmail. Der folgende code sendet die E-Mail, aber nicht die attachments. Der Verwendungszweck ist auf cron ein paar db-Abfragen-und E-Mail die Ergebnisse. Es werden immer 2 Dateien und die Dateinamen werden jeden Tag Verschieden, wie die date
für den Bericht ist in der Datei name. Ansonsten würde ich gerade benutzt haben:
part.add_header('Content-Disposition',
'attachment; filename="absolute Path for the file/s"')
Jede Hilfe sehr dankbar.
import os
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.MIMEBase import MIMEBase
from email import Encoders
#Set up crap for the attachments
files = "/tmp/test/dbfiles"
filenames = [os.path.join(files, f) for f in os.listdir(files)]
#print filenames
#Set up users for email
gmail_user = "[email protected]"
gmail_pwd = "somepasswd"
recipients = ['recipient1','recipient2']
#Create Module
def mail(to, subject, text, attach):
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = ", ".join(recipients)
msg['Subject'] = subject
msg.attach(MIMEText(text))
mailServer = smtplib.SMTP("smtp.gmail.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmail_user, gmail_pwd)
mailServer.sendmail(gmail_user, to, msg.as_string())
# Should be mailServer.quit(), but that crashes...
mailServer.close()
#get all the attachments
for file in filenames:
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(file, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)
#send it
mail(recipients,
"Todays report",
"Test email",
filenames)
InformationsquelleAutor Marc | 2014-10-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben sollte, wartete eine weitere Stunde, bevor Sie buchen.
2 änderungen:
1.) bewegt die Anlage Schleife bis
2.) ausgelagert
Teil.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.Pfad.basename(file))
Teil.add_header('Content-Disposition', 'attachment; filename="%s"' % - Datei)
Funktioniert wie ein champ. Google Mail mit mehreren Empfängern und mehreren Anhängen.
Danke @marc!
Ich kann nicht kommentieren auf Ihre Antwort, so hier sind ein paar fixes (irreführend als Variablen) und kleine Verbesserungen: