Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python smtplib发送多条消息而不是一条消息_Python_Raspberry Pi - Fatal编程技术网

Python smtplib发送多条消息而不是一条消息

Python smtplib发送多条消息而不是一条消息,python,raspberry-pi,Python,Raspberry Pi,我试图在启动时运行一个python脚本,在应用外部输入(例如按钮、红外传感器等,在我们的例子中是超声波传感器)时需要10秒钟的视频,然后使用python的SMTPlib库将此视频发送到指定的电子邮件地址 所有这些都很好。但是,当多次使用此输入时,Raspberry Pi会将多个视频(过去通过按下按钮拍摄)发送到电子邮件地址,而不是上次输入时启动的视频。因此,按下按钮1次将发送1个视频;按两次将发送一个新的和最后一个一起发送;按三次会发送一个新的和最后两个,以此类推 我甚至尝试在python脚本中

我试图在启动时运行一个python脚本,在应用外部输入(例如按钮、红外传感器等,在我们的例子中是超声波传感器)时需要10秒钟的视频,然后使用python的SMTPlib库将此视频发送到指定的电子邮件地址

所有这些都很好。但是,当多次使用此输入时,Raspberry Pi会将多个视频(过去通过按下按钮拍摄)发送到电子邮件地址,而不是上次输入时启动的视频。因此,按下按钮1次将发送1个视频;按两次将发送一个新的和最后一个一起发送;按三次会发送一个新的和最后两个,以此类推

我甚至尝试在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")
从email.mime.multipart导入MIMEMultipart
从电子邮件导入编码器
从email.message导入消息
从email.mime.audio导入MIMEAudio
从email.mime.base导入MIMEBase
从email.mime.image导入MIMEImage
从email.mime.text导入MIMEText
emailfrom=”xyz@abc.com"
电子邮件收件人=”xyz123@abc.com"
用户名=”xyz@abc.com"
password=“pass”
msg=MIMEMultipart()
msg[“发件人”]=电子邮件发件人
msg[“收件人”]=电子邮件收件人
msg[“主题”]=“电子邮件主题--”
msg.preamble=“电子邮件正文--”
虽然(正确):
d=0
#可能是相关章节
d=脉冲d*17150
d=圆形(d,2)

如果(d我认为你应该创建新消息,而不是重复使用旧消息

将您创建的
msg
代码移动到
中,而
循环

问题在于:

msg.attach(attachment)
将文件附加到同一邮件,但不删除旧的附件