Python - Добавить вложение .gzip на электронную почту - PullRequest
0 голосов
/ 14 января 2020

Если я использую свой скрипт, всегда появляется эта ошибка:

IOError: [Errno 2] No such file or directory: "'/folder/my/20200114-013815/backup.sql.gz'"

Почему файл не может быть найден? Это на Пути. Или мне нужно добавить кодировку gzip или что-то еще в attachment.add_header? Не знаю, что не так, я впервые пытался добавить вложение в python.

Спасибо

DB_HOST = 'XXXXXXX' 
DB_USER = 'XXXXXXX'
DB_USER_PASSWORD = 'XXXXXXX'
DB_NAME = 'XXXXXXX'
BACKUP_PATH = '/folder/my'

DATETIME = time.strftime('%Y%m%d-%H%M%S')
TODAYBACKUPPATH = BACKUP_PATH + '/' + DATETIME

try:
    os.stat(TODAYBACKUPPATH)
except:
    os.mkdir(TODAYBACKUPPATH)


if os.path.exists(DB_NAME):
    file1 = open(DB_NAME)
    multi = 1
else:
    multi = 0

if multi:
    in_file = open(DB_NAME,"r")
    flength = len(in_file.readlines())
    in_file.close()
    p = 1
    dbfile = open(DB_NAME,"r")

    while p <= flength:
        db = dbfile.readline()   
        db = db[:-1]         
        dumpcmd = "mysqldump -h " + DB_HOST + " -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + pipes.quote(TODAYBACKUPPATH) + "/" + db + ".sql"
        os.system(dumpcmd)
        gzipcmd = "gzip " + pipes.quote(TODAYBACKUPPATH) + "/" + db + ".sql"
        os.system(gzipcmd)
        p = p + 1
    dbfile.close()
else:
    db = DB_NAME
    dumpcmd = "mysqldump -h " + DB_HOST + " -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + pipes.quote(TODAYBACKUPPATH) + "/" + db + ".sql"
    os.system(dumpcmd)
    gzipcmd = "gzip " + pipes.quote(TODAYBACKUPPATH) + "/" + db + ".sql"
    os.system(gzipcmd)


    msg = MIMEMultipart()

    message = "Test" 

    password = "XXXXXXXX"
    msg['From'] = "XXXXXXXX"
    msg['To'] = "XXXXXXXX"
    msg['Subject'] = "Test"

    filename = "'" + TODAYBACKUPPATH + "/backup.sql.gz'"

    f = file(filename)

    msg.attach(MIMEText(message, 'plain'))

    attachment = MIMEText(f.read())
    attachment.add_header('Content-Disposition', 'attachment',   filename=filename)           
    msg.attach(attachment)

    server = smtplib.SMTP('XXXXXXXX: 587')

    server.starttls()

    server.login(msg['From'], password)

    server.sendmail(msg['From'], msg['To'], msg.as_string())

    server.quit()

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Вы используете абсолютный путь здесь? если нет, попробуйте использовать его.

0 голосов
/ 14 января 2020

Ваша проблема заключается в конкатенации строк, здесь:

filename = "'" + TODAYBACKUPPATH + "/backup.sql.gz'"

Вам нужно удалить одиночные кавычки, которые вы добавляете - зачем вы их добавляете? Измените это на это:

filename = TODAYBACKUPPATH + "/backup.sql.gz"
...