【问题标题】:Send an attachment using Python script使用 Python 脚本发送附件
【发布时间】:2017-06-08 19:55:02
【问题描述】:

我使用以下 python 脚本通过 gmail 发送附件。但它可用于发送保存在 python 脚本保存的同一文件夹中的附件。我想发送一个保存在不同文件夹中的附件。我怎样才能通过修改这个脚本来做到这一点?谢谢。

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
import datetime


smtpUser = ' '
smtpPass = ' '

toAdd = ' '
fromAdd = smtpUser

today = datetime.date.today()

subject  = 'Data File 01 %s' % today.strftime('%Y %b %d')
header = 'To :' + toAdd + '\n' + 'From : ' + fromAdd + '\n' + 'Subject : ' + subject + '\n'
body = 'This is a data file on %s' % today.strftime('%Y %b %d')

attach = 'Data on %s.csv' % today.strftime('%Y-%m-%d')

print header


def sendMail(to, subject, text, files=[]):
    assert type(to)==list
    assert type(files)==list

    msg = MIMEMultipart()
    msg['From'] = smtpUser
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach( MIMEText(text) )

    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.ehlo_or_helo_if_needed()
    server.starttls()
    server.ehlo_or_helo_if_needed()
    server.login(smtpUser,smtpPass)
    server.sendmail(smtpUser, to, msg.as_string())

    print 'Done'

    server.quit()


sendMail( [toAdd], subject, body, [attach] )

【问题讨论】:

    标签: python gmail mime smtplib


    【解决方案1】:

    sendMail的第四个参数是一个文件名列表,可以这样:

    sendMail(["name@domain.com"], 
             "Subject", 
             "Dear sir..", 
             ["subdir/file1.zip", "subdirfile.zip"] )
    

    subdir/file1.zip 是相对于您调用脚本的路径。如果您想完全引用其他地方的文件,请使用/path/to/my/file1.zip,例如/home/user/file1.zip

    【讨论】:

    • 该问题询问有关在脚本工作目录之外发送文件的问题。考虑在答案中包含绝对路径。
    • 我将“不同的文件夹”作为子目录,但当然它也可以完全在其他地方,谢谢提示
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2010-09-14
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多