如何创建flask api调用,从文件中创建动态html电子邮件内容主体,并使用smtplib发送邮件



主要是如何仅使用API为电子邮件创建动态html正文内容?

简单的邮件创建和发送很容易。我尝试过的:

import smtplib
from os.path import basename
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from flask import Flask, request, jsonify
import re
import csv
app = Flask(__name__)
app.run(debug=True,host='0.0.0.0', port=8085)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
#curl -F 'files=@email_body.html'  -F metadata="{'send_from':'abc@mydomain.com', 'subject':'Hi from massmail api', 'send_to':'xyz2020@gmail.com'}"  -X POST http://localhost:8085/mail

@app.route("/mail", methods=['POST'])
def send_mail():
server = "127.0.0.1"
smtp = smtplib.SMTP(server)
data = request.get_json(force=True)
files = request.files['files']
metadata = request.form.get("metadata")
send_from = None
mmeta = eval(metadata)
send_from = mmeta['send_from']
subject = mmeta["subject"]
text = 'Hi, how do you do. We are fine mailing'
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = mmeta["send_to"]
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = mmeta["subject"]
msg.attach(MIMEText(text))
#for f in files or []:
#    print(f,' ---file attachment')
#    with open(f, "rb") as fil:
#with app.open_resource(f, "rb") as fil:
#         part = MIMEApplication(
#             fil.read(),
#             Name=basename(f)
#         )
# After the file is closed
#         part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
#        msg.attach(part)
smtp.sendmail(send_from, msg["To"], msg.as_string())
#print('mail sent:', row['email'])
smtp.close()
return jsonify({'Mail sent successfully' : subject}), 200

if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0', port=8085)

我还需要为邮件创建普通的文本正文,就像为同一封电子邮件创建一样。最好的选择是上传文本和html正文内容文件。但是如何使用api和相应的curl进行同样的工作,请指导。

根据你的问题下面的评论,这似乎是你问的主要问题:我如何通过curl将html和txt文件上传到你的flask应用程序我的建议是查看这个答案,这是一篇通过curl发布的帖子,使用文本的名称字段和文件存储的文件数据字段:

根据mata的回答:

curl -i -X PUT -F name=Test -F filedata=@SomeFile.pdf "http://localhost:5000/" 

python:

file = request.files['filedata']   # gives you a FileStorage
test = request.form['name']        # gives you the string 'Test'

最新更新