Python smtplib有时无法从连接到字符串文字的sqlite发送字符串变量
我正在尝试用Python和smtplib发送消息。我有一个sendEmailmessage功能: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
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我正在研究您链接的示例。