python使用flask-mai邮箱附件发送

作者:admin 发布日期:2024年7月26日 16:58 浏览量:46

main.py代码:    

from flask import Flask, request, redirect, url_for, render_template, flash
    from flask_mail import Mail, Message
    app = Flask(__name__)
    # 配置邮件服务器
    app.config['MAIL_SERVER'] = 'smtp.163.com'
    app.config['MAIL_PORT'] = 465
    app.config['MAIL_USE_SSL'] = True
    app.config['MAIL_USERNAME'] = '******@163.com'  # smtp的邮箱
    app.config['MAIL_PASSWORD'] = '******'  # 安全授权码
    app.config['SECRET_KEY'] = '******'  # 填一个SECRET_KEY
    # 初始化邮件对象
    mail = Mail(app)
    @app.route('/', methods=['GET', 'POST'])
    def send_email():
        if request.method == 'POST':
            emai = request.form['email']  # 接收人邮箱
            subject = '测试邮件'
            body = '邮件内容'
            sender = app.config['MAIL_USERNAME']
            msg = Message(subject, sender=sender, recipients=[emai], body=body)
            try:
                # 添加附件
                with app.open_resource('D:\\image\\1.jpg') as file:
                    msg.attach('1.jpg', "image/jpeg", file.read())
                mail.send(msg)
                flash('邮件发送成功!')
                return render_template('success.html')
            except Exception as e:
                flash('邮件发送失败:' + str(e))
                return str(e)
            return redirect(url_for('send_email'))
        return render_template('index.html')
    if __name__ == '__main__':
        app.run(debug=True, host='0.0.0.0')
    

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>发送邮件</title>
<!-- CSS -->
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.2/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <h1 class="mt-4">发送邮件</h1>
        <form  id="sendEmailForm" method="post">
            <div class="form-group">
                <label for="downurl">链接地址:</label>
                <textarea class="form-control" id="downurl" name="downurl" rows="3" placeholder="在这里粘贴链接地址..." required onblur="extractURL(this)"></textarea>
            </div>
            <div class="form-group">
                <label for="email">邮箱地址:</label>
                <input type="email" class="form-control" id="email" name="email" required>
            </div>
            <button type="submit" class="btn btn-primary">发送邮件</button>
        </form>
    </div>
</body>

<script>
        let url;
        function extractURL(inputElement) {
            var downurl = inputElement.value;
            var urlRegex = /(https?:\/\/[^\s]+)/g;
            var urls = downurl.match(urlRegex);

            if (urls && urls.length > 0) {
                inputElement.value = urls[0]; // 替换为第一个匹配的 URL
            } else {
                inputElement.value = ""; // 或者其他提示信息
                url = false
            }
        }

        document.getElementById('sendEmailForm').addEventListener('submit', function(event) {
            if(!url){
                alert('链接输入不正确')
              event.preventDefault(); // 阻止表单默认提交行为
            }
            var downurl = document.getElementById('downurl').value;
            var email = document.getElementById('email').value;
            // 这里可以添加发送邮件的逻辑
            console.log('链接地址:', downurl);
            console.log('邮箱地址:', email);
        });
    </script>

</html>

success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>发送成功</title>
    <!-- 引入 Bootstrap CSS -->
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.2/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
</head>
<body>
    <div class="container mt-5">
        <div class="alert alert-success" role="alert">
            <h4 class="alert-heading">发送成功</h4>
            <hr>
            <p class="mb-0">
                <a href="/" class="btn btn-primary">返回首页</a>
            </p>
        </div>
    </div>
</body>
</html>