Имена файлов вложений электронной почты удаляются с помощью AT00001 - PullRequest
0 голосов
/ 30 января 2020

Отправка почты с несколькими вложениями удаляет имена файлов вложений. Имя вложения изменяется на ATT00001.xlsx. По следующей ссылке раздел «тело» добавлен до вложения, но не повезло.

https://exchange-server-guide.blogspot.com/2015/11/att00001.txt-file-fix-email-attachment-issue.html

Для справки, отправьте следующий фрагмент кода. Любое предложение приветствуется.

msg = MIMEMultipart()
ctype = content_type
maintype, subtype = ctype.split('/', 1)
msg['Subject'] = subject
msg['To'] = 'abc@sample.com'
msg['From'] = sender
smtp_client = smtplib.SMTP(smtp_host + ':' + smtp_port)
smtp_client.starttls()
smtp_client.login(sender, smtp_login_password)
body_part = MIMEText(body, 'plain')
msg.attach(body_part)
for file_path in file_paths :
    temp_arr = file_path.split('/')
    file_name = temp_arr[len(temp_arr) - 1]
    msg.add_header('Content-Disposition', 'attachment', filename=file_name)
    fp = open(file_path, 'rb')
    attachment = MIMEBase(maintype, subtype)
    attachment.set_payload(fp.read())
    fp.close()
    encode_base64(attachment)
    msg.attach(attachment)
smtp_client.sendmail(sender, 'abc@sample.com', msg.as_string())
smtp_client.quit() 

1 Ответ

1 голос
/ 31 января 2020

Вы добавляете Content-Disposition: в составной контейнер. Вы должны добавить его к каждой отдельной части тела.

Измените это:

for file_path in file_paths :
    temp_arr = file_path.split('/')
    file_name = temp_arr[len(temp_arr) - 1]
    msg.add_header('Content-Disposition', 'attachment', filename=file_name)
    fp = open(file_path, 'rb')
    attachment = MIMEBase(maintype, subtype)
    attachment.set_payload(fp.read())
    fp.close()
    encode_base64(attachment)
    msg.attach(attachment)

на что-то вроде

for file_path in file_paths:
    file_name = file_path.split('/')[-1]
    attachment = MIMEBase(maintype, subtype)
    with open(file_path, 'rb') as fp:
        attachment.set_payload(fp.read())
    attachment.add_header('Content-Disposition', 'attachment', filename=file_name)
    encode_base64(attachment)
    msg.attach(attachment)

, где я также позволил себе переключиться на использование менеджер контекста (оператор with). Я также упростил извлечение имени файла.

...