Sendgrid - SMTP 还是 CURL?

Posted

技术标签:

【中文标题】Sendgrid - SMTP 还是 CURL?【英文标题】:Sendgrid - SMTP or CURL? 【发布时间】:2011-09-05 19:51:28 【问题描述】:

我们正在建立一个以 sendgrid 为核心的群发邮件系统。

我们自己管理列表,sendgrid 只是我们的传输工具,并且正在使用代码点火器来构建系统。

我们想知道您会推荐我们使用什么,将 sendgrid 作为 smtp 服务器,或者使用它的 curl API。

我们每天向 x00,000 人发送电子邮件,这些电子邮件都具有相同的内容。

我们找到了SendGrid's integration documentation for code igniter,它只有 smtp 示例,所以这可能是要走的路吗?

问题的另一部分是,如果我们要使用 SMTP api,代码点火器 bcc_batch_mode 是如何工作的?

【问题讨论】:

【参考方案1】:

阅读http://sendgrid.com/documentation/map/version/v2#api 的文档 他们之间几乎没有选择。无论哪种方式,所有功能都可用。对于 php,我推荐 smtp 服务器及其 SMTP API,以利用现有的正确格式化、mime 编码和发送电子邮件的库。值得注意的是,示例 PHP 代码仅适用于 SMTP API。

为添加问题而编辑

sendgrid 文档说在自定义邮件标头中使用其 API 对多个收件人进行编码 - X-SMTPAPI - 不使用 CC 和 BCC。见http://sendgrid.com/documentation/display/api/SMTPDevelopersGuide

http://sendgrid.com/documentation/display/api/SMTP 常规邮件标题中存在多个收件人问题的最佳实践部分。

【讨论】:

您好 Magicianeer,有趣的是他们说您应该使用自定义标头,但他们的代码点火器示例代码仅用于电子邮件类的 to、cc 和 bcc 函数,我应该怎么做使用? 好的,所以在使用 to 与他们的现场支持交谈后,bcc 就可以了,您可以使用标准方法或 header,使用 header 的原因是提供与其他更好的互操作性语言。【参考方案2】:

好的,我将粘贴我的支持聊天,作为任何人的参考。请注意,此聊天内容涵盖范围很广,因此将其存储在这里可能会很有用

我:使用代码点火器发送给多个收件人? 您好,我是使用代码点火器的 php 开发人员,我们使用 sendgrid 作为我们的电子邮件发送平台,

支持:您好。


:嗨,
支持:让我看看能否在我们的文档中找到参考。
:相信你会参考:http://bit.ly/jL1Pde
支持:那是我一直在寻找的。
:是的,我看到了,但我也看到http://bit.ly/jvowuk 说你应该使用X-SMTPAPI 标头,所以我有点困惑我应该使用吗?
支持:使用上一个链接中的 Codeigniter 示例。您可以使用 X-SMTPAPI,但在这种情况下不需要。原因是为了更好地与其他语言一起移植。
:哦,我明白了,非常感谢,我还有一个问题。
支持:好的。
:发送电子邮件时,我们是否可以发送任何标题以将额外信息与电子邮件相关联(例如我们系统中的 id)以帮助查找?
支持:您可以根据需要设置自定义类别。 setCategory(cat) 为要记录的电子邮件设置一个类别。您可以使用任何您喜欢的类别名称。这是来自http://bit.ly/iYjq2G
:哦,我明白了,谢谢,很抱歉让您感到痛苦,但我还有一个问题,
支持:好的。
:我们希望为我们的用户提供取消订阅接收电子邮件的功能,在特定批次中发送的所有电子邮件(例如 100,000 封电子邮件)都将具有完全相同的内容,但我们想要的除外要将取消订阅消息附加到底部,我们希望能够将取消订阅跟踪回从我们的系统发送的特定消息,因此我们希望 url 看起来像 http://example.com/unsubscribe/1234,1234 是唯一的 id发送的消息,sendgrid 是否提供了一种简单的方法来完成此操作,还是我们必须对每条消息进行单独的请求?
支持:好的,您可以使用:addFilterSetting(filter, setting, val) 添加/更改过滤器的设置。标题中指定的设置将覆盖配置的设置。下面是在 PHP 中启用参数的示例:$hdr->addFilterSetting('subscriptiontrack', 'enable', 1);
:好吧,看看http://bit.ly/k49a57,上面写着你的自定义名称出现在链接中,这到底是什么意思?因为我们不希望用户被发送到 sendgrid 以取消订阅。
支持:因此,它可以让您在链接中显示与我们提供的内容不同的内容,例如“从这家公司中删除我自己”。
:哦,我明白了,所以如果我们希望 URL 是个人的,我们必须自己管理,这很好,我不记得在哪里,但我注意到某处有一些关于替换电子邮件的东西内容,这是否允许我们通过 id 列表发送,并且在我们的电子邮件正文中,我们可以有 *example.com/unsubscribe/--email_id--* 并让它用传递的 id 替换 *--email_id--* ?
:啊,http://bit.ly/jvowuk 第 2 点就是我所说的,我可以用那个吗?
支持:是的,您可以这样做。
:啊,这是一个更好的例子,http://bit.ly/lK6ltE
支持:是的,这显示了替换的电子邮件。因此,可以针对每个进行修改。
:所以,如果我发送出去,我可以在代码点火器中使用 *$this->email->_set_header('Custom-Header', 'value');* 来设置自定义标头比如说 3000 封电子邮件,我有一个看起来像 array(5,6,7,8...) 的数组,其中包含 3000 个 ID,我将如何发送这些? (如果这不是一个快速的答案,我可以通过查看 SmtpApiHeader 类来解决)
支持SmtpApiHeader 是最好的方法。将它们添加为替换的参数。每个索引 ID。
会话断开。

【讨论】:

【参考方案3】:

我目前在 SendGrid 工作。我们的 Web API 实际上比 SMTP 运行得更快,因为您只需向我们发出一个 cURL 请求即可发送消息,而使用 SMTP 时,连接、HELO 等需要大量来回 TCP 聊天。

我们最近发布了一个新的 PHP 库,您可以在我们的 github 帐户上找到它:http://github.com/sendgrid/

如果您有任何问题,请随时与我们联系。

【讨论】:

令人惊讶...Web API 比 SMTP 快,真的吗? 嘿,@iandouglas,对 necro-res 有点抱歉......如果你已经完成了整个发送网格的事情,我很抱歉。 SendGrid 的 CTO 似乎一直在建议使用 SMTP 选项,但您确定您认为 Web API 更好吗? @BoLi 我还是喜欢 SG。我一直推荐使用 SMTP 上的 Web API。 “更好”是主观的,就像随机询问人们是否认为外面很冷。 :) 对,这是有道理的。看到一个组织内的推荐差异很有趣——有点让人难以做出决定。谢谢! 同意。如果您对系统有完全的操作控制权,并且知道如何正确保护它等,那么您可以通过各种方式探索 SMTP 并使用您的语言/库将传出消息推送到 SMTP。但我一直很享受使用 Web API 的灵活性。 Tim(首席技术官)负责 SMTP 端点,我为 Web API 做出了贡献,所以也许我们只是在玩最爱。 :)

以上是关于Sendgrid - SMTP 还是 CURL?的主要内容,如果未能解决你的问题,请参考以下文章

提交时出现 SMTP 邮件服务器 (sendgrid) 错误

将 SendGrid SMTP 集成用于批量电子邮件

Laravel 项目 - 托管在 Heroku - SendGrid SMTP 连接问题

在 Heroku 中使用 Sendgrid 为 Django 应用程序设置电子邮件

自动安装后创建SendGrid API密钥

如果使用 SendGrid API,则禁用 PHP mail() 函数