Browse Source

feat: 发送一个附件

SongZihuan 2 years ago
parent
commit
1cd8333f50
3 changed files with 18 additions and 2 deletions
  1. 9 0
      templates/base.html
  2. 2 1
      templates/sender/sender.html
  3. 7 1
      web/sender.py

+ 9 - 0
templates/base.html

@@ -29,6 +29,15 @@
     </div>
     </div>
 {% endmacro %}
 {% endmacro %}
 
 
+{% macro render_file_field(field) %}
+    <div class="form-group my-3 pb-2">
+        {{ field(class="form-control") }}
+        {% for error in field.errors %}
+            <div class="invalid-feedback d-block"> {{ error }} </div>
+        {% endfor %}
+    </div>
+{% endmacro %}
+
 {% macro render_text_field(field) %}
 {% macro render_text_field(field) %}
     <div class="form-group form-floating my-3">
     <div class="form-group form-floating my-3">
         {% if not field.errors %}
         {% if not field.errors %}

+ 2 - 1
templates/sender/sender.html

@@ -3,7 +3,7 @@
 
 
 {% block content %}
 {% block content %}
 <div class="container">
 <div class="container">
-    <form method="post" action="{{ url_for("sender.send_page") }}" class="was-validated">
+    <form method="post" action="{{ url_for("sender.send_page") }}" class="was-validated" enctype="multipart/form-data">
         {{ form.hidden_tag() }}
         {{ form.hidden_tag() }}
 
 
         {{ render_field(form.sender_name) }}
         {{ render_field(form.sender_name) }}
@@ -15,6 +15,7 @@
         {{ render_field(form.bcc) }}
         {{ render_field(form.bcc) }}
 
 
         {{ render_text_field(form.content) }}
         {{ render_text_field(form.content) }}
+        {{ render_file_field(form.file) }}
 
 
         <div class="text-end">
         <div class="text-end">
             {{ form.submit(class='btn btn-success me-2') }}
             {{ form.submit(class='btn btn-success me-2') }}

+ 7 - 1
web/sender.py

@@ -1,8 +1,9 @@
-from flask import Blueprint, render_template, flash, redirect, url_for
+from flask import Blueprint, render_template, flash, redirect, url_for, request
 from flask_wtf import FlaskForm
 from flask_wtf import FlaskForm
 from wtforms import (StringField,
 from wtforms import (StringField,
                      SubmitField,
                      SubmitField,
                      TextAreaField,
                      TextAreaField,
+                     FileField,
                      ValidationError)
                      ValidationError)
 from wtforms.validators import DataRequired, Regexp
 from wtforms.validators import DataRequired, Regexp
 from flask_login import login_required, current_user
 from flask_login import login_required, current_user
@@ -30,6 +31,7 @@ class MailInputForm(FlaskForm):
     bcc = StringField("密送人", description="密送人")
     bcc = StringField("密送人", description="密送人")
 
 
     content = TextAreaField("普通邮件正文", description="邮件正文")
     content = TextAreaField("普通邮件正文", description="邮件正文")
+    file = FileField("附件", description="邮件附件")
 
 
     submit = SubmitField("发送")
     submit = SubmitField("发送")
 
 
@@ -97,8 +99,12 @@ def send_page():
                       to_addr=form.rc_,
                       to_addr=form.rc_,
                       cc_addr=form.cc_,
                       cc_addr=form.cc_,
                       bcc_addr=form.bcc_)
                       bcc_addr=form.bcc_)
+
         email.add_text(form.content.data)
         email.add_text(form.content.data)
 
 
+        if len(form.file.data.filename) != 0:
+            email.add_bytes(form.file.data.filename, form.file.data.stream.read())
+
         if len(form.rc_) + len(form.cc_) + len(form.bcc_) <= 0:
         if len(form.rc_) + len(form.cc_) + len(form.bcc_) <= 0:
             flash("没有收件人")
             flash("没有收件人")
         else:
         else: