I want to write a program that sends email using Python's smtplib. I searched through the document and the RFCs, but couldn't find anything related to attachments. Thus, I'm sure there's some higher-level concept I'm missing out on. Can someone clue me in on how attachments work in SMTP?
Direct Mail:How can I send emails with attachments using SMTP? Sending emails with attachments using SMTP requires you to build emails in MIME format.
Here is an example of a message with a PDF attachment, a text "body" and sending via Gmail.
# Import smtplib for the actual sending function import smtplib # For guessing MIME type import mimetypes # Import the email modules we'll need import email import email.mime.application # Create a text/plain message msg = email.mime.Multipart.MIMEMultipart() msg['Subject'] = 'Greetings' msg['From'] = '[email protected]' msg['To'] = '[email protected]' # The main body is just another attachment body = email.mime.Text.MIMEText("""Hello, how are you? I am fine. This is a rather nice letter, don't you think?""") msg.attach(body) # PDF attachment filename='simple-table.pdf' fp=open(filename,'rb') att = email.mime.application.MIMEApplication(fp.read(),_subtype="pdf") fp.close() att.add_header('Content-Disposition','attachment',filename=filename) msg.attach(att) # send via Gmail server # NOTE: my ISP, Centurylink, seems to be automatically rewriting # port 25 packets to be port 587 and it is trashing port 587 packets. # So, I use the default port 25, but I authenticate. s = smtplib.SMTP('smtp.gmail.com') s.starttls() s.login('[email protected]','xyzpassword') s.sendmail('[email protected]',['[email protected]'], msg.as_string()) s.quit()
Here's an example I snipped out of a work application we did. It creates an HTML email with an Excel attachment.
import smtplib,email,email.encoders,email.mime.text,email.mime.base smtpserver = 'localhost' to = ['[email protected]'] fromAddr = '[email protected]' subject = "my subject" # create html email html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ' html +='"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">' html +='<body style="font-size:12px;font-family:Verdana"><p>...</p>' html += "</body></html>" emailMsg = email.MIMEMultipart.MIMEMultipart('alternative') emailMsg['Subject'] = subject emailMsg['From'] = fromAddr emailMsg['To'] = ', '.join(to) emailMsg['Cc'] = ", ".join(cc) emailMsg.attach(email.mime.text.MIMEText(html,'html')) # now attach the file fileMsg = email.mime.base.MIMEBase('application','vnd.ms-excel') fileMsg.set_payload(file('exelFile.xls').read()) email.encoders.encode_base64(fileMsg) fileMsg.add_header('Content-Disposition','attachment;filename=anExcelFile.xls') emailMsg.attach(fileMsg) # send email server = smtplib.SMTP(smtpserver) server.sendmail(fromAddr,to,emailMsg.as_string()) server.quit()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With