附件中的图像无效
Invalid image in attachment
我使用 SMTP 通过邮件发送图像。可以发邮件,但是图片打不开;它说不支持的格式。该图像是使用 opencv 拍摄的。这是我使用的代码。请告诉我我在程序中做错了什么。没有报错但是图片打不开
鳕鱼:
import cv2
i=0
camera = cv2.VideoCapture(0)
if(i==0):
for i in range(1):
return_value, image = camera.read()
cv2.imwrite('Disease'+str(i)+'.png', image)
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "xxxxxx@gmail.com"
toaddr = "yyyyyy@gmail.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "DISEASE"
body = "FOR NOTIFICATION"
msg.attach(MIMEText(body, 'plain'))
filename = "Disease.png"
attachment = open("C:/tensorflow1/models/research/object_detection/capture.py", "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)
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login(fromaddr, "password")
text = msg.as_string()
s.sendmail(fromaddr, toaddr, text)
s.quit()
您附上一段 Python 代码并声称它是一张图片。我想您可能想要 运行 该代码并附加其输出。
假设 C:/tensorflow1/models/research/object_detection/capture.py
是您创建图像的代码的路径,并且 C:/tensorflow1/models/research/object_detection/
在您的 PYTHONPATH
上,您只需要
import disease
虽然可以说,更好的设计是重组此文件,以便它声明一个函数,您可以在需要时调用它,而不是 运行在您 import
时立即调用一次代码它;标准机制是
def functionname():
# ... Your code here
if __name__ == '__main__':
functionname()
以及导入并调用的方式就是这段代码
import disease
# ... Other code ...
disease.functionname()
(显然,比 functionname
更好的名称应该是恰当的描述性名称,例如 generate_png
。)
如果您只是将图像附加到电子邮件消息然后丢弃,也许您可能希望完全避免将图像写入磁盘,但因为这有点推测性,而且写入磁盘不是主要是效率问题,这里就不细说了。
作为另一个细节,您将图像附加为通用 application/octet-stream
正文部分。图像有自己指定的 MIME 类型; PNG 图片需要 image/png
。
此类附件的 Python class 是 MIMEImage
。
from email.mime.image import MIMEImage
# ...
image_filename = './Disease.png'
image = MIMEImage(open(image_filename, 'rb').read(), name=os.path.basename(image_filename))
msg.attach(image)
class通常已经知道如何设置详细的属性,例如精确的图像类型和内容配置以及传输编码。
除了文体,import
语句通常应位于文件的顶部;参见 PEP-8.
我使用 SMTP 通过邮件发送图像。可以发邮件,但是图片打不开;它说不支持的格式。该图像是使用 opencv 拍摄的。这是我使用的代码。请告诉我我在程序中做错了什么。没有报错但是图片打不开
鳕鱼:
import cv2
i=0
camera = cv2.VideoCapture(0)
if(i==0):
for i in range(1):
return_value, image = camera.read()
cv2.imwrite('Disease'+str(i)+'.png', image)
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "xxxxxx@gmail.com"
toaddr = "yyyyyy@gmail.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "DISEASE"
body = "FOR NOTIFICATION"
msg.attach(MIMEText(body, 'plain'))
filename = "Disease.png"
attachment = open("C:/tensorflow1/models/research/object_detection/capture.py", "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)
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login(fromaddr, "password")
text = msg.as_string()
s.sendmail(fromaddr, toaddr, text)
s.quit()
您附上一段 Python 代码并声称它是一张图片。我想您可能想要 运行 该代码并附加其输出。
假设 C:/tensorflow1/models/research/object_detection/capture.py
是您创建图像的代码的路径,并且 C:/tensorflow1/models/research/object_detection/
在您的 PYTHONPATH
上,您只需要
import disease
虽然可以说,更好的设计是重组此文件,以便它声明一个函数,您可以在需要时调用它,而不是 运行在您 import
时立即调用一次代码它;标准机制是
def functionname():
# ... Your code here
if __name__ == '__main__':
functionname()
以及导入并调用的方式就是这段代码
import disease
# ... Other code ...
disease.functionname()
(显然,比 functionname
更好的名称应该是恰当的描述性名称,例如 generate_png
。)
如果您只是将图像附加到电子邮件消息然后丢弃,也许您可能希望完全避免将图像写入磁盘,但因为这有点推测性,而且写入磁盘不是主要是效率问题,这里就不细说了。
作为另一个细节,您将图像附加为通用 application/octet-stream
正文部分。图像有自己指定的 MIME 类型; PNG 图片需要 image/png
。
此类附件的 Python class 是 MIMEImage
。
from email.mime.image import MIMEImage
# ...
image_filename = './Disease.png'
image = MIMEImage(open(image_filename, 'rb').read(), name=os.path.basename(image_filename))
msg.attach(image)
class通常已经知道如何设置详细的属性,例如精确的图像类型和内容配置以及传输编码。
除了文体,import
语句通常应位于文件的顶部;参见 PEP-8.