鱼C论坛

 找回密码
 立即注册
查看: 883|回复: 4

[已解决]关于Python附件发送问题

[复制链接]
发表于 2023-8-18 16:28:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在使用Python发送邮件时遇到一个问题,就是收到的常见的 txt、xls等类型的附件文件不能直接查看。但是通过邮件客户端发送后打开显示正常。

附代码,请指点。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
from email import encoders

sender = "xxx123@163.com"
receiver = "xxx@qq.com"

content = "测试邮件内容"
file_path = "mail.txt"
message = MIMEMultipart()
message["Subject"] = "Hello"
message["From"] = sender
message["To"] = receiver
text = MIMEText(content, "plain", "utf-8")
message.attach(text)
with open(file_path, "rb") as f:
    attachment = MIMEApplication(f.read(), Name="附件")
    encoders.encode_base64(attachment)
    attachment.add_header("Content-Disposition", "attachment", filename = file_path)
    message.attach(attachment)

smtp_obj = smtplib.SMTP("smtp.163.com", 25)
smtp_obj.login("xxx@163.com", "************")
try:
    smtp_obj.sendmail(sender, receiver, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as err:
    print('邮件发送失败:', err)
smtp_obj.quit()
最佳答案
2023-8-18 16:28:42
问题分析:
你在使用Python发送邮件时遇到的问题是,收到的附件文件无法直接查看,但是通过邮件客户端发送后可以正常打开。

解决方案:
问题可能出在邮件附件的编码上。为了确保附件能够正确传输和显示,你需要指定正确的编码方式,并且对附件进行适当的编码处理。

下面是修改后的代码,请参考:
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationfrom email.mime.text import MIMETextfrom email import encoderssender = "xxx123@163.com"receiver = "xxx@qq.com"content = "测试邮件内容"file_path = "mail.txt"message = MIMEMultipart()message["Subject"] = "Hello"message["From"] = sendermessage["To"] = receivertext = MIMEText(content, "plain", "utf-8")message.attach(text)with open(file_path, "rb") as f:    attachment = MIMEApplication(f.read())    attachment.add_header("Content-Disposition", "attachment", filename=file_path)    message.attach(attachment)smtp_obj = smtplib.SMTP("smtp.163.com", 25)smtp_obj.login("xxx@163.com", "[b][/b][b][/b][b][/b]")try:    smtp_obj.sendmail(sender, receiver, message.as_string())    print("邮件发送成功!")except smtplib.SMTPException as err:    print('邮件发送失败:', err)smtp_obj.quit()
在这个修改后的代码中,我去除了对附件内容的编码操作encoders.encode_base64(attachment),并且在创建附件对象时不指定编码方式,默认使用二进制传输附件内容。

请尝试运行修改后的代码,查看是否能够正常显示附件内容。如果问题仍然存在,请提供更多详细的错误信息或现象,以便我能够进一步帮助你解决问题。

如果回答对你有帮助,请给我一个最佳答案!
IMG_4927.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-18 16:28:30 | 显示全部楼层
问题分析:
根据提供的代码,你使用Python中的smtplib库发送邮件,并附带了一个附件。但是收到的附件文件不能直接查看,需要通过邮件客户端才能正常打开。你想知道如何解决这个问题。

解决方案:
问题出在添加附件的方式上。在添加附件时,你使用了MIMEApplication类将文件内容作为附件添加到邮件中。但是缺少了设置附件的Content-Type和Content-Disposition的步骤,导致附件无法正常显示。

以下是修改后的代码示例:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
from email import encoders

sender = "xxx123@163.com"
receiver = "xxx@qq.com"

content = "测试邮件内容"
file_path = "mail.txt"
message = MIMEMultipart()
message["Subject"] = "Hello"
message["From"] = sender
message["To"] = receiver
text = MIMEText(content, "plain", "utf-8")
message.attach(text)

with open(file_path, "rb") as f:
    attachment = MIMEApplication(f.read())
    attachment.add_header("Content-Disposition", "attachment", filename=file_path)
    message.attach(attachment)

smtp_obj = smtplib.SMTP("smtp.163.com", 25)
smtp_obj.login("xxx@163.com", "************")
try:
    smtp_obj.sendmail(sender, receiver, message.as_string())
    print("邮件发送成功!")
except smtplib.SMTPException as err:
    print('邮件发送失败:', err)
smtp_obj.quit()

在修改后的代码中,我们使用MIMEApplication类将文件内容作为附件添加到邮件中,并通过add_header方法设置了附件的Content-Disposition。这样可以确保附件在接收方能够正常显示。

希望这个解决方案对你有帮助。如果还有其他问题,请随时提问。

点评

已解决,感谢大牛!  发表于 2023-8-18 16:37
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 16:28:42 | 显示全部楼层    本楼为最佳答案   
问题分析:
你在使用Python发送邮件时遇到的问题是,收到的附件文件无法直接查看,但是通过邮件客户端发送后可以正常打开。

解决方案:
问题可能出在邮件附件的编码上。为了确保附件能够正确传输和显示,你需要指定正确的编码方式,并且对附件进行适当的编码处理。

下面是修改后的代码,请参考:
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationfrom email.mime.text import MIMETextfrom email import encoderssender = "xxx123@163.com"receiver = "xxx@qq.com"content = "测试邮件内容"file_path = "mail.txt"message = MIMEMultipart()message["Subject"] = "Hello"message["From"] = sendermessage["To"] = receivertext = MIMEText(content, "plain", "utf-8")message.attach(text)with open(file_path, "rb") as f:    attachment = MIMEApplication(f.read())    attachment.add_header("Content-Disposition", "attachment", filename=file_path)    message.attach(attachment)smtp_obj = smtplib.SMTP("smtp.163.com", 25)smtp_obj.login("xxx@163.com", "[b][/b][b][/b][b][/b]")try:    smtp_obj.sendmail(sender, receiver, message.as_string())    print("邮件发送成功!")except smtplib.SMTPException as err:    print('邮件发送失败:', err)smtp_obj.quit()
在这个修改后的代码中,我去除了对附件内容的编码操作encoders.encode_base64(attachment),并且在创建附件对象时不指定编码方式,默认使用二进制传输附件内容。

请尝试运行修改后的代码,查看是否能够正常显示附件内容。如果问题仍然存在,请提供更多详细的错误信息或现象,以便我能够进一步帮助你解决问题。

如果回答对你有帮助,请给我一个最佳答案!

点评

感谢大牛!!!  发表于 2023-8-18 16:38
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 11:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表