排队的电子邮件不通过 TLS 加密的 SMTP 服务器发送



由于我在web2py应用程序中提交表单时发送了几封电子邮件,因此我想将它们排队并通过单独的脚本发送。 我已经按照 web2py 书中的说明进行操作,它似乎工作正常,直到我使用 tls 加密的 smtp 服务器。 如果我没有将电子邮件排入数据库并通过控制器发送电子邮件,则电子邮件将正确发送出去。 排队进入数据库工作正常,包括状态更新。

为什么使用 TLS 加密的 SMTP 服务器时从数据库发送电子邮件会失败?同样,服务器设置和直接从控制器发送电子邮件工作正常,但是将其排队到数据库中并通过脚本发送失败(仅在使用TLS加密的smtp服务器时(。

编辑: 我收到的错误消息是:警告web2py。邮件发送失败:连接意外关闭。

还有其他人遇到过这种情况吗?

非常感谢! 一个。

下面是我的代码:

在控制器中:

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 applications/myapp/private/mail_queue.py

我听从了安东尼的建议,重新安装了我的应用程序。 虽然我不知道为什么我以前遇到问题,但现在我可以通过 tls 加密服务器(此处为 office365(发送排队的电子邮件而不会出现问题。 此外,编辑代码并在不同服务器之间切换也可以正常工作。

最新更新