电子邮件的任何附件都需要由收件人以正确的格式保存

Any attachement to email needs to be saved by recipient in right format

我有一个找不到答案的问题。我正在使用 smtp 发送电子邮件,我设法使用以下代码发送带有所需附件的电子邮件(所有敏感信息均从 config.json 文件中读取):

message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'Här kommer veckans zip-fil.'

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

attach_file_name = 'C:/..../downloads/Send_20210201_zipped.zip'
attach_file = open(attach_file_name, 'rb') 

payload = MIMEBase('application', 'octate-stream')
payload.set_payload((attach_file).read())
encoders.encode_base64(payload) 

payload.add_header('Content-Decomposition', 'attachment', filename=attach_file_name)
message.attach(payload)

session = smtplib.SMTP(server, port)

text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()
print('Mailet har skickats')

现在,邮件已经发送和接收了。但是,它作为名称为 ATT0001 的未指定文件到达。起初,我以为它是垃圾,但我发现如果我将它保存为 ATT0001.zip 并从我保存它的地方打开它,它实际上是我发送的 zip 文件。我测试了其他类型的文件,都是一样的。

我做错了什么?如何确保文件的接收者只需要保存文件而无需知道其格式?

我没有放弃自己解决问题的努力,自己设法解决了。我选择不删除问题,而是分享我自己的发现。我用 MIMEApplication 替换了我分享的 got 的 MIMEBase 部分。我还在与收件人共享的文件中指定了附件类型。这是完整的代码。如果有人看到改进,请分享您的意见。

message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'The subject of this mail'



message.attach(MIMEText(mail_content, 'plain'))
attach_file_name = file_to_send
file_name_sent = File_sent
attach_file = open(attach_file_name, 'rb') 

body_part = MIMEText(mail_content, 'plain')
message.attach(body_part)
    
with open(attach_file_name,'rb') as file:
        message.attach(MIMEApplication(file.read(), Name=file_name_sent +'.zip'))

text = message.as_string()

session = smtplib.SMTP(server, port)
session.starttls() 

session.sendmail(sender_address, receiver_address, text)
session.quit()
print('Mailet har skickats')

其中 sender_address, receiver_address, server, port 全部在 config.json 文件中给出,而 file_to_sendfile_sent 在此处给出的邮件部分之前声明,而 body_part 是一条标准消息。这是为了自动化,因此他们需要每周更改一次。