访问Sitecore 8 Email Experience Manager中的当前收件人

时间:2015-11-09 18:35:46

标签: sitecore sitecore8 sitecore-mvc sitecore-exm

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

我们正在使用Sitecore的EXM向收件人发送包含调查链接的电子邮件。当收件人进行调查时,我们希望将响应绑定回收件人。由于EXM为联系人(加密)提供了唯一的ID,ec_contact_id,我们希望使用它来确定收件人与添加我们自己的自定义ID。

我们发现了这篇文章Pipeline graph with autovideosink which uses glimagesink, without videoconvert,并试图在Sitecore控制器中实现它,当收件人点击链接但被生成的收件人名称返回为空时,它会被调用。我们没有" sc_item_id"价值所以我们试过" _id"和" ec_message_id"在它的位置,但两个值都没有产生有效的联系人ID或收件人名称。我们也尝试使用解密的contactId查看MongoDB,但无法找到匹配项。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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