I am trying to create a little script that will email multiple attachments using gmail. The code below sends the email but not the attachments. The intended use is to cron a
Thanks @marc! I can't comment on your answer, so here are few fixes (misnamed variables) and small improvements:
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email import MIMEImage
from email.mime.base import MIMEBase
from email import Encoders
def mail(to, subject, text, attach):
# allow either one recipient as string, or multiple as list
if not isinstance(to,list):
to = [to]
# allow either one attachment as string, or multiple as list
if not isinstance(attach,list):
attach = [attach]
gmail_user='username@gmail.com'
gmail_pwd = "password"
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = ", ".join(to)
msg['Subject'] = subject
msg.attach(MIMEText(text))
#get all the attachments
for file in attach:
print file
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)
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()
if __name__ == '__main__':
mail(['recipient1', 'recipient2'], 'subject', 'body text',
['attachment1', 'attachment2'])