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

时间:2015-02-01 10:58:25

标签: python string smtplib

我正在尝试使用smtplib在Python中发送消息。我有一个sendEmail(消息)函数:

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']也是如此。循环连续运行,但不经常发送电子邮件。在测试中,我将一行设置为警报状态。我可以验证发送电子邮件的代码是否应该被触发。

0 个答案:

没有答案