web2py-排队的电子邮件无法通过tls加密的smtp服务器发送

时间:2018-08-24 09:46:42

标签: web2py

由于我在web2py应用程序中提交表单后会发送几封电子邮件,因此我希望将它们排队并通过单独的脚本发送。 我遵循了web2py书中的说明,在使用tls加密的smtp服务器之前,它似乎工作正常。 如果我没有在数据库中排队电子邮件,而是通过控制器发送电子邮件,则电子邮件将正确发送出去。 排队进入数据库工作正常,包括状态更新。

为什么使用tls加密的smtp服务器从数据库发送电子邮件失败?再次,服务器设置和直接从控制器发送电子邮件都可以,但是在数据库中排队并通过脚本发送失败(仅当使用tls加密的smtp服务器时)。

编辑: 我收到的错误消息是:警告web2py.Mail.send失败:连接意外关闭。

还有其他人遇到过吗?

非常感谢! 答:

下面是我的代码:

在控制器中:

def contact():
    form = SQLFORM(db.contact, formstyle='bootstrap3_stacked')
    form.append(Recaptcha2(public_key='', private_key=''))
    form.element('textarea[name=Your_message]')['_style'] = 'resize:none;'
    for label in form.elements('label'):
        label["_style"] = "display:none;"
    if form.process().accepted:
        requester = str(form.vars.email)
        db.queue.insert(status='pending',
        email='email@test.com',
        subject = '123',
        massege = 'xyz') #massege is not a spelling mistake
        db.queue.insert(status='pending',
        email= str(form.vars.email),
        subject = '123',
        massege = 'xyz')
    return dict(form=form)

我的模型文件:

from gluon.tools import Mail
from gluon.tools import Recaptcha2
mail2 = Mail() #using mail2, since I am using different instances of Mail() for different e-mails/smtp's throughout the application
mail2.settings.server = 'smtp.office365.com:587' or 'logging'
mail2.settings.sender = 'lala@lala.com'
mail2.settings.login = 'lala@lala.com:myPSWD'
mail2.settings.tls = myconf.get('smtp.tls')

db.define_table('queue', Field('status'), Field('email'), Field('subject'), Field('massege'))

这是mail_queue.py脚本(来自web2py书)

import time

while True:
    rows = db(db.queue.status == 'pending').select()
    for row in rows:
        if mail2.send(to=row.email,
        subject = row.subject,
        message = row.massege): #massege is not a spelling mistake
            row.update_record(status='sent')
        else:
            row.update_record(status='failed')
        db.commit()
    time.sleep(180)

这就是我调用mail_queue.py脚本的方式-指定-N会引发错误(没有这样的选项-N) $ python web2py.py -S myapp -M -R应用程序/myapp/private/mail_queue.py

1 个答案:

答案 0 :(得分:0)

我听了安东尼的建议,重新安装了我的应用。 尽管我不知道为什么以前会遇到问题,但是现在我可以通过tls加密服务器(这里为office365)发送排队的电子邮件,而不会出现问题。 另外,编辑代码并在不同服务器之间切换也可以。