python - 类型错误 : 'in <string>' requires string as left operand, 不是 QString

标签 python pyqt smtplib

我正在尝试编写一个简单的应用程序来从我的 Gmail 帐户发送(并可能接收)电子邮件。我设法在源代码中硬编码我的帐户信息时做到了这一点,但现在我想在 GUI 字段中输入它们并从那里读取信息。这是代码:

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的链接,但由于我对这一切还很陌生,所以我不知道该怎么处理。

最佳答案

大多数对包含文本的 Qt 元素的请求将返回 QString,这是 Qt 使用的简单字符串容器。大多数其他库都需要常规的 python 字符串,因此可能需要使用 str() 进行转换。全部:

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

是QString对象。

关于python - 类型错误 : 'in <string>' requires string as left operand, 不是 QString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31550249/

相关文章:

python - qt设计器如何创建彩色面板?

python - PyQt 从 TableView 获取带有标题标签的单元格

python 3 smtplib sendmail/send_message(mail_options=[], rcpt_options=[])

python - 在 django/tastypie 资源中传递请求变量

python - 我可以覆盖 QListWidgetItem 的 __lt__ 比较器的输入吗? (PyQt)

python - 替换字符串中一组字符的最快方法

python - 如何获取从 smtplib 发送的电子邮件的消息 ID

python - 如何在函数中使用 LOCAL VARIABLE,就像其他函数的 GLOBAL VARIABLE 变量一样

python - 使用 BeautifulSoup 从 <a> 抓取一系列链接(在其他两个标签之间)

python - 从 sqlalchemy 获取关系元数据