长臂猿更新电子邮件

Posted

技术标签:

【中文标题】长臂猿更新电子邮件【英文标题】:Gibbon Update EMail 【发布时间】:2014-03-13 23:08:38 【问题描述】:

我正在后台启动一个 sidekiq-job,它通过 after_commit 回调在后台异步更新用户 newsletter_info。因此,如果用户在他的设置中更新他的语言,MailChimp 中的语言也会更新。一切正常,除了电子邮件地址。如果用户更新他的电子邮件地址,它将显示在日志消息中,并且它会在正确的位置,但不会在 mailchimp 中更新。相反,具有新电子邮件地址的新用户会被添加到 mailchimp 列表中......

所以一种选择可能是删除旧的,但我认为该解决方案并不干净。

我的另一个想法是电子邮件地址可能是订阅者 ID,并且可能会出现错误。

非常感谢您的帮助,

问候,哈立德。

def update_newsletter_info(args)
  NDC.push "KHALED -- "
  Rails.logger.debug "UPDATENEWSLETTERINFO ARGS: #args"
  XIXI::Workflow.for(TwitterUsersMaintainer, args) do |workflow, user|
    Rails.logger.debug "INFOS IN UPDATENEWSLETTERINFO #user.locale #user.email"
    gb = Gibbon::API.new
    cfg = XOXO::Mailchimp.config

    gb.lists.subscribe(
      :id    => cfg.list_id,
      :email =>  :email => user.email ,
      :merge_vars => 
        :mc_language => user.locale,
        :groupings => [
           name: cfg.group_name, groups: [ user.recurring_payment? ? 'basic' : 'free' ] 
        ]
      ,
      :double_optin    => !!cfg.double_optin,
      :update_existing => true,
      :send_welcome    => !!cfg.send_welcome
    )

    # continue
    workflow.continue_with(user)
  end
  NDC.pop
end

【问题讨论】:

【参考方案1】:

我的问题的答案是: 我已经提到电子邮件地址可能是 mailchimp 订阅者列表中的 id。就是这样。

所以我在模型中使用此代码取消订阅旧电子邮件地址并将新用户添加到订阅者列表:

if self.previous_changes.include?("email")
      email = self.previous_changes[:email][0]
      UsersMaintainer.perform_async( action: :unsubscribe_newsletter, email: email )
    end
    UsersMaintainer.perform_async( action: :update_newsletter_info, user_id: self.id )

并将新成员添加到列表中。

也许这不是最好的方法,但它确实有效! ;)

感谢阅读问题的任何人!

【讨论】:

【参考方案2】:

电子邮件地址可以用长臂猿更改:

gibbon.lists(list_id).members(Digest::MD5.hexdigest(old_email))
  .upsert(
    body:  email_address: new_email 
  )

【讨论】:

以上是关于长臂猿更新电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

rails - Gibbon mailchimp gem 将订阅者添加到列表中,但不发送确认电子邮件

关爱颈椎,有长臂猿陪伴

长臂猿的 Rails Mailchimp API 错误

我如何在不使用 Rails Gem 的情况下直接使用 Mailchimp API

Mailchimp API 和配置文件更新电子邮件

为啥长臂猿会抛出“未初始化的常量 Gibbon::API (NameError)”