如何解决如何将 Sengrid 链接到 Flask 中的联系表单以转发电子邮件
我正在编写一个 Web 应用程序并尝试使用 sendgrid 来处理电子邮件传送服务。
我正在用 Flask 编写应用程序。
现在我有一个联系表格,我的问题是只有当我使用 sendgrid 从我预先批准的电子邮件地址发送电子邮件时,电子邮件才会被发送。显然这不好,因为其他填写电子邮件表格的人都不会通过。
这是我拥有的代码:
路线
app.config['MAIL_SERVER'] = 'smtp.sendgrid.net'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'apikey'
app.config['MAIL_PASSWORD'] = os.environ.get('SENDGRID_API_KEY')
app.config['MAIL_DEFAULT_SENDER'] = os.environ.get('MAIL_DEFAULT_SENDER')
@app.route('/contact',methods=['GET','POST'])
def contactpage():
if request.method == 'POST':
print("Message sent")
print(request.form.to_dict())
m = message(request.form.to_dict())
m.send()
title = "Jonathan Bechtel contact form"
description = "Contact Jonathan Bechtel with questions about teaching or working with him"
return render_template("contact.html",title=title,description=description)
import os
from sendgrid import SendGridapiclient
from sendgrid.helpers.mail import Mail
class message():
def __init__(self,message_data):
for key in message_data:
print(key,message_data[key])
setattr(self,key,message_data[key])
def send(self):
message = Mail(
from_email = self.email,to_emails = 'jonathanbechtel@gmail.com',subject = 'Sample Email Message',html_content = f'<strong>From: {self.email}</strong><br><strong>Reason: {self.reason}</strong><br><strong>Message:</strong>{self.message}')
try:
sg = SendGridapiclient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
except Exception as e:
print(e)
如果我将联系表单中的 from
地址设置为我自己的地址,则电子邮件可以正常工作。但是,如果我使用任何其他消息,则消息不会通过并生成 403
状态代码。
我认为这意味着我没有使用正确的 API 部分,但不确定从哪里开始。
谢谢。
解决方法
这里是 Twilio SendGrid 开发者布道者。
SendGrid 不允许您仅从任何电子邮件地址发送电子邮件。我可以看到,在这种情况下,您只是想创建一个仅向您的电子邮件地址发送电子邮件的联系表单,因此能够从任何电子邮件地址发送电子邮件可能会有用。但是考虑一个允许用户设置收件人和发件人地址的表单,您会发现这可能会被滥用。
你可以read more about sender identity and SendGrid here。
与此同时,对于您的用例,这是我的建议。
将发件人电子邮件设置为您预先批准的电子邮件地址,在电子邮件正文中包含用户的电子邮件地址,就像您已经在做的那样。然后将用户的电子邮件也添加为回复电子邮件,这样您就可以回复电子邮件并将其直接发送给用户。
我相信您可以使用 mail
对象的 reply_to
方法设置回复:
def send(self):
message = Mail(
from_email = APPROVED_SENDGRID_EMAIL,to_emails = 'jonathanbechtel@gmail.com',subject = 'Sample Email Message',html_content = f'<strong>From: {self.email}</strong><br><strong>Reason: {self.reason}</strong><br><strong>Message:</strong>{self.message}')
# Set the reply-to email
message.reply_to(self.email)
try:
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
except Exception as e:
print(e)
有关详细信息,请参阅 the examples in the helper library。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。