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

时间:2015-05-19 06:20:16

标签: python raspberry-pi

我试图在启动时运行一个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")

1 个答案:

答案 0 :(得分:0)

我认为您应该创建新消息,而不是重用旧消息。

msg循环

中移动您创建while的代码

问题在于:

msg.attach(attachment)

您将文件附加到同一邮件,但不删除旧附件。