我们正在整合我们的电子邮件应用程序与SparkPost。我们唯一的问题是从SparkPost得到反弹的电子邮件,以排除他们从未来的邮件。我们的应用程序直接从邮件服务器检索反弹电子邮件。当用户使用SparkPost SMTP设置在我们的软件,他不能检索和处理反弹邮件,因为SparkPost不转发反弹消息到用户的反弹电子邮件地址。
Webhooks不适合我们,因为它们只实时提取数据。如果我们的软件是关闭时,反弹的电子邮件来了,反弹将不会被捕获,并将丢失为我们的软件,因为没有办法检索它在以后的时间。
所以,请让我知道是否有一种方法可以通过API或通过电子邮件从SparkPost获得反弹电子邮件,就像亚马逊SES一样。Amazon SES只是将反弹的电子邮件转发到用户在应用程序中指定的电子邮件地址(在消息头中返回电子邮件头字段)。
如果你不能接受通过HTTP推送的数据,比如事件webhook或者我们的中继webhook,那么下一个最好的选择就是我们的Message Events API(https://www.sparkpost.com/api#/reference/message-events/message-events/search-for-message-events)
你可以像这样请求获取最后一个小时的跳票:
https://api.sparkpost.com/api/v1/message-events?events=bounce,out_of_band
如果您想要更具体的时间范围,只需添加from/to以及时区,如果您需要的话:
https://api.sparkpost.com/api/v1/message-events?from=2015-09-10T00:00&to=2015-09-10T23:59&timezone=America/New_York
我编写了以下ruby代码以获取CSV:
require 'net/http'
require 'json'
require 'csv'
uri = URI('https://api.sparkpost.com/api/v1/message-events?events=bounce,out_of_band')
req = Net::HTTP::Get.new(uri)
req['Content-Type'] = 'application/json'
req['Authorization'] = ENV['API_KEY'] || raise('please provide API_KEY env variable')
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |https|
https.request(req)
end
bounces = JSON.parse(res.body)['results']
puts "#{bounces.count} bounces found"
CSV.open("bounces.csv", "wb") do |csv|
csv << %w(Timestamp Recipient Reason)
bounces.each do |bounce|
csv << [bounce['timestamp'], bounce['rcpt_to'], bounce['reason']]
end
end
要点在此:https://gist.github.com/schmijos/05d2f989c7a5854fe2cd31c666f61c39