Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python smtplib有时无法从连接到字符串文字的sqlite发送字符串变量_Python_String_Smtplib - Fatal编程技术网

Python smtplib有时无法从连接到字符串文字的sqlite发送字符串变量

Python smtplib有时无法从连接到字符串文字的sqlite发送字符串变量,python,string,smtplib,Python,String,Smtplib,我正在尝试用Python和smtplib发送消息。我有一个sendEmailmessage功能: def sendEmail(message) server = smtplib.SMTP_SSL('mailserver.example.com', 465) server.ehlo() server.login("username", "password") print message msg = message fromaddr = "myaddr

我正在尝试用Python和smtplib发送消息。我有一个sendEmailmessage功能:

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以及我能想到的任何其他方法来连接字符串。似乎每件事有时都会起作用,但每次都不起作用

sendmail函数中的printmessage总是打印我期望的字符串。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()
报警表中的每一行定义了一个应触发报警的条件,并有一个字段指示是否满足报警条件以激活报警


来自数据库的警报['message']类似于电池着火或有人把门开着。报警表中当前只有4或5行。确定报警['alertShouldBeSent']的逻辑确保每个报警条件只发送一次报警,如果报警未首先重置,则不会连续发送报警。同样的情况也适用于Alarm['allClearShouldBeSent']。循环持续运行,但电子邮件很少发送。在测试中,我将一行设置为报警状态。我可以验证发送电子邮件的代码是否在应该的时候触发。

查看一下您能否发布sqlite代码和示例数据?理想情况下,将代码浓缩成一个小的可重复程序,显示issue@AndrewE我已经发布了一些更详细的代码,我认为这些代码显示了这个特定组件的核心。@KasraAD我正在研究您链接的示例。