无法使用 CID 添加文件作为内联附件 python flask
Cannot add file as inline attachment python flask using CID
我花了几个小时寻找解决方案,但无济于事。我试图在自动生成的电子邮件中包含一些图像,但遇到了一些问题。我无法包含实际的 url,因为 gmail 完全阻止了图像,所以我尝试作为附件发送,然后使用 Cids 来引用附件。问题是我还没有找到一种方法来做到这一点。任何帮助都是王牌。
我 运行 python 3.6 在 Ubuntu 服务器上使用 Apache2。我曾尝试使用 base64 对图像进行编码,但这根本不起作用。电子邮件中的图片根本没有显示。
def createVoucher(email, expiry):
voucherId = str(uuid.uuid4())
email = email
value = 1
expiryDate = expiry
redeemed = 1
connection = mysql.get_db()
cursor = connection.cursor()
cursor.execute("INSERT INTO vouchers (VoucherID, Value, ExpiryDate, Redeemed, Email) VALUES (%s,%s,%s,%s,%s)", (voucherId, value, expiryDate, redeemed, email))
msgBody = render_template('admin/eVoucherEmail.html', voucherId=voucherId, expiry=expiry)
msg = Message('New Sunday Funday eVoucher Received', sender = MAIL_USERNAME, recipients = [email])
msg.html = msgBody
with app.open_resource("static/img/Facebook.jpg") as fp:
msg.attach("Facebook.jpg", "image/jpg", fp.read())
mail.send(msg)
connection.commit()
所以发布的代码可以很好地附加文件,它只是分配一个内容 ID,我可以在我遇到困难的地方使用它。
下面是我如何使用 flask_mail 插入内联 jpg。
版本:python=3.7.6,flask=1.1.2,flask-mail=0.9.1
message.attach 中的“配置”需要是“内联”,img 的 html 应该包含“cid:my_cid”作为 src。
import uuid
from flask import Flask
from flask_mail import Mail, Message
from pathlib import Path
app = Flask(__name__)
app.config.update(
MAIL_SERVER='smtp.gmail.com', MAIL_PORT=465, MAIL_USE_SSL=True,
MAIL_USERNAME="myfakeemail54858939@gmail.com", MAIL_PASSWORD="myfakepw54858939")
flask_mail = Mail(app)
def test_send_voucher():
to_addr = "myfakeemail54858939@gmail.com"
expiry = "29 February"
voucher_png_path = Path(__file__).parent / "static/Facebook.jpg"
sendVoucherEmail(app, to_addr, expiry, voucher_png_path)
def sendVoucherEmail(app: Flask, to_addr: str, expiry: str, voucher_png_path: Path):
voucher_id = str(uuid.uuid4())
html = f"""<html><head></head><body>
<p>Congratulations on your voucher!<br>Your voucher code is {voucher_id}.
The offer expires on {expiry}.<br>
<img src="cid:voucher_png" width=200>
</p></body></html>"""
with app.app_context():
mail = Mail(app)
message: Message = Message(subject="my subject", sender="myfakeemail54858939@gmail.com",
recipients=[to_addr], html=html)
with app.open_resource(voucher_png_path) as fp:
message.attach(filename="myfilename.png", content_type="image/png", data=fp.read(),
disposition="inline", headers=[['Content-ID', '<voucher_png>']])
mail.send(message)
此示例通过 gmail 成功发送了一封电子邮件,其中包含内联图像“Facebook.jpg”,与原始问题中的一样。
screenshot of received email
我花了几个小时寻找解决方案,但无济于事。我试图在自动生成的电子邮件中包含一些图像,但遇到了一些问题。我无法包含实际的 url,因为 gmail 完全阻止了图像,所以我尝试作为附件发送,然后使用 Cids 来引用附件。问题是我还没有找到一种方法来做到这一点。任何帮助都是王牌。
我 运行 python 3.6 在 Ubuntu 服务器上使用 Apache2。我曾尝试使用 base64 对图像进行编码,但这根本不起作用。电子邮件中的图片根本没有显示。
def createVoucher(email, expiry):
voucherId = str(uuid.uuid4())
email = email
value = 1
expiryDate = expiry
redeemed = 1
connection = mysql.get_db()
cursor = connection.cursor()
cursor.execute("INSERT INTO vouchers (VoucherID, Value, ExpiryDate, Redeemed, Email) VALUES (%s,%s,%s,%s,%s)", (voucherId, value, expiryDate, redeemed, email))
msgBody = render_template('admin/eVoucherEmail.html', voucherId=voucherId, expiry=expiry)
msg = Message('New Sunday Funday eVoucher Received', sender = MAIL_USERNAME, recipients = [email])
msg.html = msgBody
with app.open_resource("static/img/Facebook.jpg") as fp:
msg.attach("Facebook.jpg", "image/jpg", fp.read())
mail.send(msg)
connection.commit()
所以发布的代码可以很好地附加文件,它只是分配一个内容 ID,我可以在我遇到困难的地方使用它。
下面是我如何使用 flask_mail 插入内联 jpg。
版本:python=3.7.6,flask=1.1.2,flask-mail=0.9.1
message.attach 中的“配置”需要是“内联”,img 的 html 应该包含“cid:my_cid”作为 src。
import uuid
from flask import Flask
from flask_mail import Mail, Message
from pathlib import Path
app = Flask(__name__)
app.config.update(
MAIL_SERVER='smtp.gmail.com', MAIL_PORT=465, MAIL_USE_SSL=True,
MAIL_USERNAME="myfakeemail54858939@gmail.com", MAIL_PASSWORD="myfakepw54858939")
flask_mail = Mail(app)
def test_send_voucher():
to_addr = "myfakeemail54858939@gmail.com"
expiry = "29 February"
voucher_png_path = Path(__file__).parent / "static/Facebook.jpg"
sendVoucherEmail(app, to_addr, expiry, voucher_png_path)
def sendVoucherEmail(app: Flask, to_addr: str, expiry: str, voucher_png_path: Path):
voucher_id = str(uuid.uuid4())
html = f"""<html><head></head><body>
<p>Congratulations on your voucher!<br>Your voucher code is {voucher_id}.
The offer expires on {expiry}.<br>
<img src="cid:voucher_png" width=200>
</p></body></html>"""
with app.app_context():
mail = Mail(app)
message: Message = Message(subject="my subject", sender="myfakeemail54858939@gmail.com",
recipients=[to_addr], html=html)
with app.open_resource(voucher_png_path) as fp:
message.attach(filename="myfilename.png", content_type="image/png", data=fp.read(),
disposition="inline", headers=[['Content-ID', '<voucher_png>']])
mail.send(message)
此示例通过 gmail 成功发送了一封电子邮件,其中包含内联图像“Facebook.jpg”,与原始问题中的一样。
screenshot of received email