^_~W * Yan 2023-04-10 16:22 采纳率: 66.7%
浏览 13
已结题

需要一段python代码打印.eml格式文件

需要一段python代码打印.eml格式文件,GPT给的代码,最后打印出来的是bytes,不是可读的邮件。或者将eml格式转化为msg,再用pywin32打印

 def print_eml(img):
        printer_name = win32print.GetDefaultPrinter()

        # Open the EML file and read its contents
        with open(img, 'rb') as f:
            eml_content = f.read().decode('utf-8')

        # Send the EML content to the default printer
        hPrinter = win32print.OpenPrinter(printer_name)
        try:
            hJob = win32print.StartDocPrinter(hPrinter, 1, ("test", None, "RAW"))
            try:
                win32print.StartPagePrinter(hPrinter)
                win32print.WritePrinter(hPrinter, eml_content.encode())
                win32print.EndPagePrinter(hPrinter)
            finally:
                win32print.EndDocPrinter(hPrinter)
        finally:

  • 写回答

2条回答 默认 最新

  • 清水泡茶 2023-04-11 14:37
    关注

    以下是使用Python的email和base64模块读取和打印.eml格式文件的示例代码:

    
    ```python
    import email
    import base64
    
    # 读取.eml邮件文件
    with open('example.eml', 'rb') as fp:
        msg = email.message_from_bytes(fp.read())
    
    # 获取邮件内容
    if msg.is_multipart():
        for part in msg.walk():
            if part.get_content_type() == 'text/plain' or part.get_content_type() == 'text/html':
                content = part.get_payload(decode=True).decode(part.get_content_charset())
    else:
        content = msg.get_payload(decode=True).decode(msg.get_content_charset())
    
    # 如果邮件内容经过base64编码,则需要进行解码
    if msg['Content-Transfer-Encoding'] == 'base64':
        content = base64.b64decode(content)
    
    # 打印邮件内容
    print(content)
    
    
    

    ```
    请确保将example.eml替换为您要读取的.eml文件名,并且根据邮件的编码类型调整代码中的解码方法。如果邮件正文部分是HTML格式,可以使用Python库如beautifulsoup4或lxml来对其进行解析和处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 修改了问题 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题