2015-07-21 96 views
1

我试图写一个简单的应用程序来发送(并可能收到)来自我的gmail帐户的电子邮件。我设法在我的源代码中对我的账户信息进行硬编码,但现在我想在GUI字段中输入它们并从那里读取信息。下面是代码:TypeError:'在<string>'需要字符串作为左操作数,而不是QString

import sys 
import smtplib 
from PyQt4 import QtCore, QtGui 
from Notifier_Main import Ui_Notifier_Main_GUI 

class MainGUI(QtGui.QWidget, Ui_Notifier_Main_GUI): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.setupUi(self) 
     self.sendButton.clicked.connect(self.send) 

    def send(self): 
     fromaddr = self.senderEmailLineEdit.text() 
     toaddrs = self.receiverEmailLineEdit.text() 
     msg = self.msgTextEdit.toPlainText() 
     username = self.senderEmailLineEdit.text() 
     server = smtplib.SMTP("smtp.gmail.com:587") 
     server.starttls() 
     server.login(username, 'password') 
     server.sendmail(fromaddr, toaddrs, msg) 
     server.quit() 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    main_gui = MainGUI() 
    main_gui.show() 
sys.exit(app.exec_()) 

当我运行它,我得到这个长屁股的错误:

C:\Python27\python.exe "E:/Python Projekti/Notifier/src/main.py" 
Traceback (most recent call last): 
    File "E:/Python Projekti/Notifier/src/main.py", line 20, in send 
    server.sendmail(fromaddr, toaddrs, msg) 
    File "C:\Python27\lib\smtplib.py", line 728, in sendmail 
    (code, resp) = self.mail(from_addr, esmtp_opts) 
    File "C:\Python27\lib\smtplib.py", line 480, in mail 
    self.putcmd("mail", "FROM:%s%s" % (quoteaddr(sender), optionlist)) 
    File "C:\Python27\lib\smtplib.py", line 141, in quoteaddr 
    m = email.utils.parseaddr(addr)[1] 
    File "C:\Python27\lib\email\utils.py", line 214, in parseaddr 
    addrs = _AddressList(addr).addresslist 
    File "C:\Python27\lib\email\_parseaddr.py", line 457, in __init__ 
    self.addresslist = self.getaddrlist() 
    File "C:\Python27\lib\email\_parseaddr.py", line 218, in getaddrlist 
    ad = self.getaddress() 
    File "C:\Python27\lib\email\_parseaddr.py", line 228, in getaddress 
    self.gotonext() 
    File "C:\Python27\lib\email\_parseaddr.py", line 204, in gotonext 
    if self.field[self.pos] in self.LWS + '\n\r': 
TypeError: 'in <string>' requires string as left operand, not QString 

我试着用搜索引擎这种类型的错误,发现的一些spyderlib某种联系,但因为我敢所有这一切都是新的,我不知道该怎么做。

+0

尝试server.sendmail(str(fromaddr),str(toaddrs),str(msg)) – csunday95

+0

它的工作!非常感谢:)有趣的是,我想到了这一点,并尝试把str,但可能错过了其中一个变量。 – Luka

回答

3

对具有文本的Qt元素的大多数请求都会返回QStrings,这是Qt使用的简单字符串容器。大多数其他库会期望普通的python字符串,因此使用str()进行强制转换可能是必要的。全部:

fromaddr = self.senderEmailLineEdit.text() 
toaddrs = self.receiverEmailLineEdit.text() 
msg = self.msgTextEdit.toPlainText() 
username = self.senderEmailLineEdit.text() 

是QString对象。

相关问题