Неверное изображение во вложении - PullRequest
0 голосов
/ 14 декабря 2018

Я использовал 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() 

enter image description here

1 Ответ

0 голосов
/ 15 декабря 2018

Вы присоединяете кусок кода 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;вам понадобится image/png для изображения в формате PNG.

Класс Python для этого типа вложения: 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)

Класс, как правило, уже знает, как установить подробные атрибуты.как точный тип изображения и расположение содержимого и кодирование передачи.

В качестве стилистического выражения операторы import обычно должны быть в верхней части файла;см. PEP-8.

...