【问题标题】:Accessing Current Recipient in Sitecore 8 Email Experience Manager在 Sitecore 8 Email Experience Manager 中访问当前收件人
【发布时间】:2015-11-09 18:35:46
【问题描述】:

如何从 EXM 创建的 URL 上的 ec_contact_id 获取原始联系人 ID?

我们正在使用 Sitecore 的 EXM 向收件人发送包含调查链接的电子邮件。当收件人接受调查时,我们希望将回复与收件人联系起来。由于 EXM 为联系人(加密)放置了一个唯一的 ID,ec_contact_id,我们希望使用它来确定收件人,而不是添加我们自己的自定义 ID。

我们找到了这篇文章 https://briancaos.wordpress.com/2015/04/27/sitecore-8-exm-get-the-email-recipient-from-a-sublayout/,并尝试在 Sitecore 控制器中实现它,当收件人单击链接时会调用该控制器,但生成的收件人名称返回为空。我们没有“sc_item_id”值,因此我们尝试了“_id”和“ec_message_id”,但是这两个值都没有生成有效的联系人 ID 或收件人姓名。我们还尝试使用解密后的 contactId 在 MongoDB 中查找,但找不到匹配项。

【问题讨论】:

  • 只是为了确认链接在查询字符串中是否包含 sc_item_id? ECM 电子邮件中的链接应自动生成查询字符串中的参数,并且您应该对原始电子邮件有一些参考。
  • 没有。该链接不包含 sc_item_id 参数。除了 ec_contact_id 之外,URL 上的唯一值是 ec_message_id 和 _id。

标签: sitecore sitecore8 sitecore-mvc sitecore-exm


【解决方案1】:

你可以试试这样的:

//get value of the ec_contact_id parameter for current request
string queryString = WebUtil.GetQueryString( Sitecore.Modules.EmailCampaign.GlobalSettings.AnalyticsContactIdQueryKey); 

var shortID =  ShortID.TryParse(queryString, out shortID);

System.Guid contactId;

// where initializationVector is System.Guid of your email message item.
using (var cryptoServiceProvider = new GuidCryptoServiceProvider(System.Text.Encoding.UTF8.GetBytes(GlobalSettings.PrivateKey), initializationVector.ToByteArray())) 
{
       contactId = cryptoServiceProvider.Decrypt(shortID.Guid);
}

【讨论】:

    【解决方案2】:

    当您在电子邮件列表中创建新用户时,Sitecore 会在 xDB Mongo 数据库中创建一条记录。您应该能够从用户个人资料中获取电子邮件地址。

    Tracker.Current.Contact.GetFacet<IContactEmailAddresses>("Emails").Entries[Tracker.Current.Contact.GetFacet<IContactEmailAddresses>("Emails").Preferred]
    
    Tracker.Current.Contact.GetFacet<IContactEmailAddresses>("Emails").Entries["work_email"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2012-12-17
      相关资源
      最近更新 更多