Как я могу отправить по электронной почте.приложение CSV-файл с помощью Python [дубликат]



На этот вопрос уже есть ответ здесь:




Хорошо, я знаю, что есть несколько вопросов, касающихся этого, но я не могу найти способ заставить его работать должным образом. Я бы предположил, что это так же просто, как приведенный ниже код, но это не прикрепляет мой файл. Любая помощь будет очень признательна. Я тоже очень новый для Python. Есть ли почтовый модуль, который я должен импортировать, чтобы заставить эту функцию работать?

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()
594   2  

2 ответов:

Отправьте составное электронное письмо с соответствующими типами MIME.

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

Поэтому возможно что-то вроде этого (я проверил это):

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()

Есть полный пример в документации Python. Я могу скопировать и вставить соответствующие части здесь, но вся страница не очень длинная, поэтому лучше, если вы пойдете и посмотрите на нее там.

Comments

    Ничего не найдено.