我试图在启动时运行一个python脚本,这需要大约10秒的视频来应用外部输入(例如按钮,红外传感器等,在我们的例子中是超声波传感器),然后发送此视频使用Python的SMTPlib库来指定电子邮件地址。
所有这一切都很好。但是,当多次使用此输入时,Raspberry Pi会将多个视频(通过按下过去的按钮拍摄)发送到电子邮件地址,而不是上次输入发起的视频。因此,按下按钮1次将发送1个视频;推动它2次将发送一个新的与最后一个;推动它3次会发送一个新的,最后两个也会发送,依此类推。
我甚至尝试在python脚本中发送邮件后立即插入os.remove()。运行程序后,运行ls显示文件确实已删除。然而,不知何故,这些已删除的视频进入了电子邮件。当使用smtplib时,它是否可以存储在内存中?
提到的脚本如下:
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.message import Message
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
emailfrom = "xyz@abc.com"
emailto = "xyz123@abc.com"
username = "xyz@abc.com"
password = "pass"
msg = MIMEMultipart()
msg["From"] = emailfrom
msg["To"] = emailto
msg["Subject"] = "Email Subject -- "
msg.preamble = "Email Body --"
while(True):
d=0
# Possibly the relevant section
d = pulse_d*17150
d= round(d, 2)
if(d<100):
with picamera.PiCamera() as camera:
camera.start_preview()
camera.start_recording('/home/pi/video.h264')
time.sleep(5)
camera.stop_recording()
camera.stop_preview()
time.sleep(5)
fileToSend = "/home/pi/video.h264"
ctype, encoding = mimetypes.guess_type(fileToSend)
if ctype is None or encoding is not None:
GPIO.output(test, True)
ctype = "application/octet-stream"
maintype, subtype = ctype.split("/", 1)
fp = open(fileToSend, "rb")
GPIO.output(test,False)
attachment = MIMEBase(maintype, subtype)
attachment.set_payload(fp.read())
fp.close()
encoders.encode_base64(attachment)
attachment.add_header("Content-Disposition", "attachment", filename=fileToSend)
msg.attach(attachment)
server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login(username,password)
server.sendmail(emailfrom, emailto, msg.as_string())
server.quit()
os.remove("/home/pi/video.h264")
答案 0 :(得分:0)
我认为您应该创建新消息,而不是重用旧消息。
在msg
循环
while
的代码
问题在于:
msg.attach(attachment)
您将文件附加到同一邮件,但不删除旧附件。