Поскольку я отправляю несколько электронных писем после отправки формы в моем web2py-приложении, я бы хотел поставить их в очередь и отправить с помощью отдельного сценария.Я следовал инструкциям из книги web2py, и она, кажется, работает нормально, пока я не использую зашифрованный tls сервер smtp.Если я не ставлю электронные письма в базу данных и не отправляю их через контроллер, они отправляются правильно.Очередь в базу данных работает нормально, включая обновления статуса.
Почему при отправке электронной почты из базы данных происходит сбой при использовании tls зашифрованного сервера smtp?Опять же, настройки сервера и отправка электронных писем непосредственно с контроллера работают нормально, но постановка их в очередь в базе данных и отправка через скрипт не удаются (только при использовании сервера smtp с шифрованием tls).
Редактировать: Сообщение об ошибке Iget is: WARNING Ошибка web2py.Mail.send: соединение неожиданно закрыто.
Кто-нибудь еще сталкивался с этим?
Большое спасибо!A.
Ниже мой код:
В контроллере:
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