Письмо не будет отправлено с помощью приложения cpanel python - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь использовать приложение Python cpanel для своего приложения python из-за проблем с доменом на моем сервере NGINX.

Я настроил приложение python и установил все модули для запуска приложения.Приложение работает нормально, но на странице контактов, когда я пытаюсь отправить информацию контактной формы, я получаю внутреннюю ошибку сервера 500.

Код отлично работал на сервере NGINX.Мне пришлось изменить несколько вещей, чтобы заставить код работать в приложении python в cpanel, но это был просто файл passenger_wsgi.py и app.run в моем файле main.py

Вот мой код дляapp.py (основной файл Python)

import os

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

mail = Mail()

app = Flask(__name__)

app.secret_key = os.urandom(32)
app.config["MAIL_SERVER"] = "mail.example.co.za"
app.config["MAIL_PORT"] = 25
app.config["MAIL_USE_SSL"] = False
app.config["MAIL_USE_TLS"] = False
app.config["MAIL_USERNAME"] = 'info@exmple.co.za'
app.config["MAIL_PASSWORD"] = 'example'

mail.init_app(app)
application = app

@app.route('/')
def home():
    return render_template('index.jinja2')


@app.route('/contact_us', methods=['GET', 'POST'])
def contact_us():
    form = ContactForm()
    if request.method == 'POST':
        msg = Message(form.subject.data, sender=form.email.data, recipients=['info@example.co.za'])
        msg.body = """
              From: %s 
              Company Name: %s
              Message: %s
              """ % (form.full_name.data, form.company.data, form.message.data)
        mail.send(msg)

        return render_template('contact_us.jinja2', success=True, form=form)

    elif request.method == 'GET':
        return render_template('contact_us.jinja2', form=form)


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

Это код form.py

from flask_wtf import Form
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import DataRequired, Email


class ContactForm(Form):
    full_name = StringField('Name', validators=[DataRequired('Please add your name')])
    email = StringField('Email',
                        validators=[DataRequired('Please enter your email'), Email('Please enter a valid email')])
    subject = StringField('Subject', validators=[DataRequired('Please enter the subject of this email')])
    company = StringField('Company', validators=[DataRequired('Please enter your company name')])
    message = TextAreaField('message', validators=[DataRequired('Please enter a message')])
    submit = SubmitField("Send")

Это форма на странице контактов

<div class="card-body form">
                        {% if success %}
                            <p class="lead text-success">Thank you for feedback !</p>
                        {% endif %}
                        <form method="post" action="{{ url_for('contact_us') }}">
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="md-form mb-0">
                                        {% for error in form.full_name.errors %}
                                            <span style="color: red;">[{{ error }}]</span>
                                        {% endfor %}
                                        {{ form.full_name(class='form-control', id='form-contact-name') }}
                                        {{ form.full_name.label(for='form-contact-name') }}
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="md-form mb-0">
                                        {% for error in form.email.errors %}
                                            <span style="color: red;">[{{ error }}]</span>
                                        {% endfor %}
                                        {{ form.email(class='form-control', id='form-contact-email') }}
                                        {{ form.email.label(for='form-contact-email') }}
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="md-form mb-0">
                                        {% for error in form.company.errors %}
                                            <span style="color: red;">[{{ error }}]</span>
                                        {% endfor %}
                                        {{ form.company(class='form-control', id='form-contact-company') }}
                                        {{ form.company.label(for='form-contact-company') }}
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="md-form mb-0">
                                        {% for error in form.subject.errors %}
                                            <span style="color: red;">[{{ error }}]</span>
                                        {% endfor %}
                                        {{ form.subject(class='form-control', id='form-contact-subject') }}
                                        {{ form.subject.label(for='form-contact-subject') }}
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-md-12">
                                    <div class="md-form mb-0">
                                        {% for error in form.message.errors %}
                                            <span style="color: red;">[{{ error }}]</span>
                                        {% endfor %}
                                        {{ form.message(class='form-control md-textarea', id='form-contact-message') }}
                                        {{ form.message.label(for='form-contact-message') }}
                                        <div class="text-center text-md-left">
                                            {{ form.submit(class='btn btn-sm rounded btn-primary') }}
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </form>
                    </div>

Я изменил адрес электронной почты и пароль к примеру.Нет журналов ошибок или кодов, только выдает мне 500 Внутренняя ошибка сервера после нажатия кнопки отправки.Иначе все остальное в приложении загружается отлично.

Если есть какие-либо документы по этой проблеме, было бы здорово.Я около 4 дней гуглял и не смог найти какую-либо достоверную информацию о проблеме или о том, как заставить ее работать.

1 Ответ

0 голосов
/ 13 июня 2019

Удалось выяснить проблему, Cpanel не разрешил отправителю отправлять пользователю form.email.data.Поэтому мне пришлось изменить его на адрес электронной почты отправителя: info@example.co.za.После этого я добавил ответ, чтобы вы могли ответить клиенту.

Мне также пришлось изменить конфигурацию

app.config["SECRET_KEY"] = "Long Secret Key"
app.config["MAIL_SERVER"] = "mail.example.co.za"
app.config["MAIL_PORT"] = 25
app.config["MAIL_USE_SSL"] = False
app.config["MAIL_USERNAME"] = 'info@example.co.za'
app.config["MAIL_PASSWORD"] = 'password'

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

    if request.method == 'POST':
        msg = Message(form.subject.data, sender=("Contact Form", "info@example.co.za"), recipients=['info@example.com'], reply_to=form.email.data)
        msg.body = """
              From: %s
              Email: %s
              Company Name: %s
              Message: %s
              """ % (form.full_name.data, form.email.data, form.company.data, form.message.data)
        mail.send(msg)

        return render_template('contact_us.jinja2', success=True, form=form)

    elif request.method == 'GET':
        return render_template('contact_us.jinja2', form=form)
...