电子邮件的任何附件都需要由收件人以正确的格式保存
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_send
和 file_sent
在此处给出的邮件部分之前声明,而 body_part
是一条标准消息。这是为了自动化,因此他们需要每周更改一次。
我有一个找不到答案的问题。我正在使用 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_send
和 file_sent
在此处给出的邮件部分之前声明,而 body_part
是一条标准消息。这是为了自动化,因此他们需要每周更改一次。