2015-05-30 1 views
0

Это мой код для моего файла main.py, который предназначен для простой формы контакта, созданной в колбе.Извините, непредвиденная ошибка: объект 'module' не имеет атрибута 'SMTP_SSL'

from flask import Flask, render_template, request 
from flask_mail import Mail, Message 
from forms import ContactForm 


app = Flask(__name__) 
app.secret_key = 'YourSuperSecreteKey' 

# add mail server config 
app.config['MAIL_SERVER'] = 'smtp.gmail.com' 
app.config['MAIL_PORT'] = 465 
app.config['MAIL_USE_SSL'] = True 
app.config['MAIL_USERNAME'] = '[email protected]' 
app.config['MAIL_PASSWORD'] = 'yourMailPassword' 

mail = Mail(app) 

@app.route('/') 
def hello(): 
    """Return a friendly HTTP greeting.""" 
    return 'Hello World!' 


@app.errorhandler(404) 
def page_not_found(e): 
    """Return a custom 404 error.""" 
    return 'Sorry, Nothing at this URL.', 404 


@app.errorhandler(500) 
def application_error(e): 
    """Return a custom 500 error.""" 
    return 'Sorry, unexpected error: {}'.format(e), 500 

@app.route('/contact', methods=('GET', 'POST')) 
def contact(): 
    form = ContactForm() 

    if request.method == 'POST': 
     if form.validate() == False: 
      return 'Please fill in all fields <p><a href="/contact">Try Again!!!</a></p>' 
     else: 
      msg = Message("Message from your visitor" + form.name.data, 
          sender='[email protected]', 
          recipients=['[email protected]', '[email protected]']) 
      msg.body = """ 
      From: %s <%s>, 
      %s 
      """ % (form.name.data, form.email.data, form.message.data) 
      mail.send(msg) 
      return "Successfully sent message!" 
    elif request.method == 'GET': 
     return render_template('contact.html', form=form) 

if __name__ == '__main__': 
    app.run() 

Я получаю ошибку: Sorry, unexpected error: 'module' object has no attribute 'SMTP_SSL'

Я назвал мой файл "main.py". Все работает нормально, пока я не попытаюсь отправить фактический адрес электронной почты. Это только потому, что я не заполнял настройки или что-то еще пропустил?

Жаль только понял, как видеть отслеживающий на GAE:

Exception on /contact [POST] 
Traceback (most recent call last): 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/main.py", line 50, in contact 
    mail.send(msg) 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask_mail.py", line 491, in send 
    with self.connect() as connection: 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask_mail.py", line 144, in __enter__ 
    self.host = self.configure_host() 
    File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask_mail.py", line 156, in configure_host 
    host = smtplib.SMTP_SSL(self.mail.server, self.mail.port) 
AttributeError: 'module' object has no attribute 'SMTP_SSL' 
+0

У вас есть * полная трассировка * исключения? Что-то пытается импортировать объект 'SMTP_SSL', и все, что было импортировано, не имеет этого имени. Но без полного следа мы не можем сказать ничего более. –

+1

Посмотрите на свою консоль, или если вы используете Flask на WSGI-сервере, вывод журнала ошибок этого сервера. –

+0

@MartijnPieters Извините! Включена полная трассировка. – Jimmy

ответ

2

Вы установили MAIL_USE_SSL вариант True:

app.config['MAIL_USE_SSL'] = True 

, что означает, что расширение Колба-Mail будет want to use the smtplib.SMTP_SSL class, но этот класс обычно недоступен в Google App Engine.

Этот класс доступен только в том случае, если доступен Python ssl module, что имеет место только в том случае, если ваш Python был создан с поддержкой SSL. Обычно это не так в среде GAE.

Модуль недоступен в Google App Engine, если вы не specifically enable it. Включите его в app.yaml:

libraries: 
- name: ssl 
    version: latest 

Обратите внимание, что поддержка сокета на GAE является экспериментальным.

Для отправки электронной почты на GAE вам лучше использовать функцию mail.send_mail(), чтобы вместо этого вы могли использовать инфраструктуру GAE.

 Смежные вопросы

  • Нет связанных вопросов^_^