python - 为什么 SendGrid 允许我从任何地址发送电子邮件?
问题描述
我有一个本地 python 文件,用于通过 sendgrid 的 SMTP 发送电子邮件:
gmail_sender = "example@gmail.com"
server_username = "apikey"
server_password = prod.CONFIG['sendgrid_SMTP']
server = smtplib.SMTP_SSL('smtp.sendgrid.net', 465)
server.login(server_username, server_password)
email_information['From'] = gmail_sender
server.sendmail(email_information['From'], email_information['To'],
email_information.as_string())
我对谁在发送电子邮件感到困惑。我用多个不同的电子邮件替换了 gmail_sender,并且无需为这些电子邮件提供密码,我可以通过 sendgrid 的 SMTP 发送电子邮件。在我发送的电子邮件的发件人部分中,它显示了我作为 gmail_sender 加上“通过 sendgrid.net”的电子邮件。我可以让它看起来像是有人发送了电子邮件,这不是安全问题吗?
任何指导表示赞赏:)
解决方案
替代方案相当令人生畏。您必须在技术上向他们证明您要发送的每个地址实际上都是您的。
某些服务要求您通过向您提供唯一的 cookie 并告诉您将其发布到域的 DNS 记录中来证明域是您的。如果您可以控制某个域的 DNS,那么您就可以控制该域。但是电子邮件没有类似的机制 - 您可以简单地在电子邮件上伪造发件人,这应该证明您拥有该地址。
无论如何,为您要使用的每个域经历这个考验已经是一件苦差事了。想象一下,对于想要使用数十个、数百个甚至数千个不同发件人地址的客户来说,这意味着什么。
Sendgrid 服务条款有一些关于网络滥用的通用语言,这可能适用于使用他人的电子邮件地址。我在他们的 ToS 中找不到任何关于地址伪造的具体内容。在合同中有法律限制(并强制执行!)使他们无需实施技术限制。
推荐阅读
- javascript - 使用 javascript 在字符串中搜索单词
- python - 错误类型错误:“str”对象不可调用
- math - 如何找到 nxn 中心的索引位置
- ios - 如何创建触发函数时通过的测试?
- jquery - Laravel - 使用 Ajax 删除数据而不刷新
- typescript - Cloud Functions 删除文件夹:TypeScript
- c - 在C中获取带有和不带有&符号的指针地址,有什么区别?
- c# - 基于输入请求c#设计wcf服务响应属性动态分组
- javascript - 使用 Firebase 云功能发送通知
- parsing - 解析描述字符串以填充 NULL 字段