【发布时间】:2018-07-17 03:44:28
【问题描述】:
我正在尝试使用email 模块将一堆照片发送到我的电子邮件地址。但是当我运行我的程序时,什么都没有发生。我无法弄清楚我的程序出了什么问题。我该如何解决这个问题?
Python 代码:
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
fromadd = 'fromadd@gmail.com'
toadd = 'toadd@gmail.com'
def send():
msg = MIMEMultipart()
msg['From'] = fromadd
msg['To'] = toadd
msg['Subject'] = 'Photos'
text = MIMEText('Pics')
msg.attach(text)
screenshot_data = open(files, 'rb').read()
webcam_data = open(files, 'rb').read()
send_image = MIMEImage(screenshot_data, name=os.path.basename(files))
send_images = MIMEImage(webcam_data, name=os.path.basename(files))
msg.attach(send_image)
msg.attach(send_images)
sessions = smtplib.SMTP('smtp.gmail.com', '587')
sessions.ehlo()
sessions.starttls()
sessions.ehlo()
sessions.login(fromadd, 'Password')
sessions.sendmail(fromadd, toadd, msg.as_string())
sessions.quit()
def main():
global files
for files in os.listdir(r'C:\NONE'):
if os.path.isfile(files) and files.endswith(".jpg"):
send()
print('File Sent: ' + files)
os.remove(files)
else:
pass
if __name__ == '__main__':
main()
【问题讨论】:
-
附带说明:您为什么将
files设为全局变量,而不是将其作为参数传递给send?另外,为什么用一个变量来表示单个文件名files而不是file或filename? -
这不是您将参数传递给函数的方式。删除
global files并将files变量(顺便考虑将其重命名为单数名词)传递给您的send()函数。 -
不管怎样,你确定你确实有直接在
C:\NONE目录中以.jpg结尾的文件吗?因为如果是这样,print应该打印出一些东西。如果什么都没有打印出来,要么你那里没有任何文件,要么main中的逻辑有问题;由于从未调用过send,因此您要询问的错误不能在send中。 (当然,你也可能有错误,但如果你连那一步都做不到,那也无所谓了。) -
我认为 files 只能在 main 函数中访问,所以我为文件声明了全局变量。我只是在我的程序中调用了 ** files** 变量来简化程序
-
是的,我在 C:\NONE 目录中有以 .jpg 结尾的文件。我在主函数中调用了发送。我仍然无法发送邮件。 -- abarnert
标签: python windows python-2.7 email