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

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

最佳答案

使用适当的 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()

关于python - 如何使用 Python 发送带有 .csv 附件的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23171140/

相关文章:

python - 调试立即退出的 Docker?

PHP电子邮件表单-本地启用

python - django在static子文件夹中找不到静态文件

python - 为什么我的纹理不显示 PyOpenGL

ios - iOS 中的电子邮件验证

php - Laravel Mail 与 swiftmailer 之间的区别

powershell - 在PowerShell上的Send-MailMessage不起作用

android - 为 Android 中的交易电子邮件集成 Mailchimp 的 Mandrill

python - 使用 np.testing 测试非严格不等式

Python While 循环语法