如何使用Python发送带有.csv附件的电子邮件

Jor*_*rrk 17 python email

好的,我知道有一些问题可以解决这个问题,但我找不到让它正常工作的方法.我认为它就像下面的代码一样简单,但这不会附加我的文件.任何帮助将不胜感激.我也是Python的新手.是否有一个我应该导入的邮件模块以使该功能有效?

import smtplib
fromaddr = "example@example.com
toaddrs = "reciever@example.com

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()
Run Code Online (Sandbox Code Playgroud)

Jam*_*nov 62

发送包含相应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 = "sender@example.com"
emailto = "destination@example.com"
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()
Run Code Online (Sandbox Code Playgroud)

  • 如果适当地评论它会更好,尽管它具有很好的解释性,但对于像我这样的初学者来说,什么功能用于什么目的或原因并不明显。无论如何,这是一个全面的解决方案。 (2认同)

s16*_*16h 5

Python文档中有一个完整的例子.我可以在这里复制和粘贴相关部分,但整个页面不是很长,所以如果你去那里看看它会更好.