smtplib 有时无法将字符串变量从 sqlite 连接到字符串文本



我正在尝试使用smtplib在Python中发送消息。 我有一个发送电子邮件(消息)功能:

def sendEmail(message)
    server = smtplib.SMTP_SSL('mailserver.example.com', 465)
    server.ehlo()
    server.login("username", "password")
    print message
    msg = message
    fromaddr = "myaddr@someplace.com"
    toaddr = "theiraddr@someotherplace.com"
    server.sendmail(fromaddr, toaddr, msg)
    server.quit()

我正在尝试做这样的事情:

myMessage = "A String Literal" + someString
sendEmail(myMessage)

但是当我这样做时,我有时会收到一封空的电子邮件。 someString 是从 sqlite 中提取的 unicode 字符串。 我已经尝试了各种字符串连接,将文字与文字、sqlite 字符串与 sqlite 字符串、sqlite 字符串与文字相结合,每个都单独存在。 我已经使用了 + 和 .join 以及我能想到的任何其他东西来连接字符串。 似乎有时一切正常,但每次都不起作用。

sendEmail 函数中的"打印消息"始终打印我期望的字符串。 smtplib 始终将电子邮件发送到正确的电子邮件地址而不会抱怨,它有时只是一条空消息。

由于我已经让一切都工作了,也没有工作,如果我不完全了解发生了什么,我真的不相信我想出的任何解决方案。 任何人都可以帮助我了解这些字符串发生了什么,以便我能够以最合适的方式构造我的消息,并确信我的应用程序将可靠地工作?

以下是我正在尝试执行的操作的更详细示例:

#connect to the database
dbconn = sqlite3.connect(config["database"])
dbconn.row_factory = sqlite3.Row
dbc = dbconn.cursor()
while true:
    #step 1: Check the things and set alarm status in the alarms table
    #this step reads from and writes to the database
    #step 2: Check each alarm and send a message if necessary
    dbc.execute('SELECT * FROM alarms')
    theAlarms = dbc.fetchall()
    for theAlarm in theAlarms:
        if bool(theAlarm['alertShouldBeSent'):
            sendEmail('ALARM!!: ' + theAlarm['message'])
            dbc.execute('UPDATE alarms SET alertShouldBeSent=0 WHERE id=?',(theAlarm['id']),)
        elif bool(theAlarm['allClearShouldBeSent']):
            sendEmail('NORMAL: ' + theAlarm['message'])
            dbc.execute('UPDATE alarms SET allClearShouldBeSent=0 WHERE id=?',(theAlarm['id'],))
    dbconn.commit()
警报

表中的每一行定义一个应触发警报的条件,并具有一个字段,该字段指示是否满足警报条件以使警报处于活动状态

数据库中的警报["消息"]类似于"电池着火"或"有人把门打开了"。警报表中目前只有 4 或 5 行。 确定警报['alertShouldBeSent']的逻辑确保每个警报条件仅发送一次警报,并且如果警报未首先重置,则不会连续发送警报。theAlarm['allClearShouldBeSent']也是如此。 循环连续运行,但发送电子邮件的频率不高。 在测试中,我将一行设置为闹钟状态。我可以验证发送电子邮件的代码是否在应该触发时触发。

和你有同样的问题,所以我去谷歌搜索,我找到了你的帖子。当我阅读时,我意识到它一定是该死的解析器 smtplib 正在使用。它不知道如何解析":"。

可能还有其他字符无法解析,但我还没有找到。

最新更新