2014-04-19 9 views
11

Dobra, wiem, że jest kilka pytań na ten temat, ale nie mogę znaleźć sposobu, aby to działało poprawnie. Zakładam, że jest to tak proste, jak poniższy kod, ale to nie załącza mojego pliku. Każda pomoc będzie wielce ceniona. Jestem również bardzo nowy w Pythonie. Czy istnieje moduł pocztowy, który powinienem importować, aby funkcja działała?Jak wysłać wiadomość e-mail z załącznikiem .csv za pomocą Pythona

import smtplib 
fromaddr = "[email protected] 
toaddrs = "[email protected] 

msg = "help I cannot send an attachment to save my life" 
attach = ("csvonDesktp.csv") 

username = user 
password = password 

server = smtplib.SMTP('smtp.gmail.com:587') 
server.starttls() 
server.login(username,password) 
server.sendmail(fromaddr, toaddrs, msg, attach) 
server.quit() 
+2

http://stackoverflow.com/questions/9541837/attach-a-txt-file-in-python- smtplib – Toote

Odpowiedz

44

Wysyłaj wiadomość wieloczęściową z odpowiednimi typami MIME.

https://docs.python.org/2/library/email-examples.html

więc możliwe coś takiego (I przetestowane):

import smtplib 
import mimetypes 
from email.mime.multipart import MIMEMultipart 
from email import encoders 
from email.message import Message 
from email.mime.audio import MIMEAudio 
from email.mime.base import MIMEBase 
from email.mime.image import MIMEImage 
from email.mime.text import MIMEText 

emailfrom = "[email protected]" 
emailto = "[email protected]" 
fileToSend = "hi.csv" 
username = "user" 
password = "password" 

msg = MIMEMultipart() 
msg["From"] = emailfrom 
msg["To"] = emailto 
msg["Subject"] = "help I cannot send an attachment to save my life" 
msg.preamble = "help I cannot send an attachment to save my life" 

ctype, encoding = mimetypes.guess_type(fileToSend) 
if ctype is None or encoding is not None: 
    ctype = "application/octet-stream" 

maintype, subtype = ctype.split("/", 1) 

if maintype == "text": 
    fp = open(fileToSend) 
    # Note: we should handle calculating the charset 
    attachment = MIMEText(fp.read(), _subtype=subtype) 
    fp.close() 
elif maintype == "image": 
    fp = open(fileToSend, "rb") 
    attachment = MIMEImage(fp.read(), _subtype=subtype) 
    fp.close() 
elif maintype == "audio": 
    fp = open(fileToSend, "rb") 
    attachment = MIMEAudio(fp.read(), _subtype=subtype) 
    fp.close() 
else: 
    fp = open(fileToSend, "rb") 
    attachment = MIMEBase(maintype, subtype) 
    attachment.set_payload(fp.read()) 
    fp.close() 
    encoders.encode_base64(attachment) 
attachment.add_header("Content-Disposition", "attachment", filename=fileToSend) 
msg.attach(attachment) 

server = smtplib.SMTP("smtp.gmail.com:587") 
server.starttls() 
server.login(username,password) 
server.sendmail(emailfrom, emailto, msg.as_string()) 
server.quit() 
+0

Jamie, to jest świetne! Dziękuję za pomoc! – JDS

+0

Doskonała próbka. Podoba mi się sposób, w jaki zrobiłeś to ogólne i używając bibliotek, aby uzyskać mimetopy, a nie na sztywne kodowanie. –

Powiązane problemy