在 Sitecore 8 电子邮件体验管理器中访问当前收件人

Accessing Current Recipient in Sitecore 8 Email Experience Manager

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

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

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

您可以尝试这样的操作:

//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);
}

当您在电子邮件列表中创建新用户时,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"]