web2py - сообщения в очереди, не отправленные через зашифрованный tls сервер smtp - PullRequest
0 голосов
/ 24 августа 2018

Поскольку я отправляю несколько электронных писем после отправки формы в моем 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

1 Ответ

0 голосов
/ 26 августа 2018

Я последовал совету Энтони и сделал новую установку моего приложения.Хотя я не знаю, почему я столкнулся с проблемами ранее, теперь я могу отправлять электронные письма в очереди через зашифрованный tls сервер (здесь office365) без проблем.Кроме того, редактирование кода и переключение между различными серверами работает нормально.

...