在 Flask 中发送电子邮件通常使用 Flask-Mail 扩展。以下是一个简单的例子,演示如何在 Flask 应用中使用 Flask-Mail 发送电子邮件。

首先,你需要安装 Flask-Mail:
pip install Flask-Mail

然后,你可以使用以下代码配置并使用 Flask-Mail:
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_mail import Mail, Message

app = Flask(__name__)

# 配置邮件服务器
app.config['MAIL_SERVER'] = 'smtp.example.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'your_username'
app.config['MAIL_PASSWORD'] = 'your_password'
app.config['MAIL_DEFAULT_SENDER'] = 'your_email@example.com'

# 初始化 Mail
mail = Mail(app)

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

@app.route('/send_email', methods=['POST'])
def send_email():
    if request.method == 'POST':
        recipient = request.form['recipient']
        subject = request.form['subject']
        body = request.form['body']

        # 创建邮件对象
        message = Message(subject, recipients=[recipient], body=body)

        try:
            # 发送邮件
            mail.send(message)
            flash('Email sent successfully!', 'success')
        except Exception as e:
            flash(f'Error sending email: {str(e)}', 'error')

        return redirect(url_for('index'))

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

在上述代码中,首先配置了邮件服务器的信息,包括 SMTP 服务器、端口、使用 SSL 连接、用户名、密码等。然后,使用 Mail 类初始化邮件对象。

在路由 /send_email 中,从表单获取收件人、主题和邮件正文,然后使用 Message 类创建邮件对象。最后,通过 mail.send(message) 发送邮件。

确保在实际应用中将敏感信息(如用户名和密码)存储在安全的方式,并不要将其硬编码在应用代码中。可以使用环境变量、配置文件或其他安全的方式来管理这些信息。

在模板文件 index.html 中,你可以添加一个简单的表单,用于输入收件人、主题和邮件正文。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask Email Example</title>
</head>
<body>
    <h1>Email Example</h1>

    <form action="/send_email" method="post">
        <label for="recipient">Recipient:</label>
        <input type="email" id="recipient" name="recipient" required>
        <br>
        <label for="subject">Subject:</label>
        <input type="text" id="subject" name="subject" required>
        <br>
        <label for="body">Body:</label>
        <textarea id="body" name="body" rows="4" required></textarea>
        <br>
        <button type="submit">Send Email</button>
    </form>

    {% with messages = get_flashed_messages(with_categories=true) %}
        {% if messages %}
            <ul>
                {% for message, category in messages %}
                    <li class="{{ category }}">{{ message }}</li>
                {% endfor %}
            </ul>
        {% endif %}
    {% endwith %}
</body>
</html>

在这个例子中,用户可以通过表单输入收件人、主题和邮件正文,点击 "Send Email" 按钮后,应用程序会尝试发送邮件,并根据结果显示成功或错误消息。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7314/Flask