Sitecore 8 EXM add a contact to list from listmanager

前端 未结 4 1235
臣服心动
臣服心动 2021-01-19 11:06

I\'m using Sitecore 8 and the new Email Experience Manager module. I have configured a newsletter email message with an empty list from the listmanager as recipients.

4条回答
  •  孤街浪徒
    2021-01-19 11:14

    in case you have a tracker available and you dont need the update immediately, the following should work (note that the contact is added to the list upon session expiration):

    //private const string ContactListTagName = "ContactLists";
    
    var contact = Tracker.Current.Contact;
    
    // Identify
    if (contact.Identifiers.IdentificationLevel < ContactIdentificationLevel.Known)
    {
        Tracker.Current.Session.Identify(email);
    }
    
    // Set Email
    var contactEmail = contact.GetFacet("Emails");
    
    // Create an email address if not already present
    
    // This can be named anything, but must be the same as "Preferred" if you want
    // this email to show in the Experience Profiles backend. 
    if (!contactEmail.Entries.Contains("Preferred"))
        contactEmail.Entries.Create("Preferred");
    
    // set the email
    var emailEntry = contactEmail.Entries["Preferred"];
    emailEntry.SmtpAddress = email;
    contactEmail.Preferred = "Preferred";
    
    // set FirstName and Surname (required for List Manager, "N/A" might not be ideal but I don't know how Sitecore behaves with empty strings)
    var personal = contact.GetFacet("Personal");
    personal.FirstName = personal.FirstName ?? "N/A";
    personal.Surname = personal.Surname ?? "N/A";
    
    // Add preferred language
    var preferences = contact.GetFacet("Preferences");
    preferences.Language = Context.Language.Name;
    
    // Here is the actual adding to the list by adding tags
    using (new SecurityDisabler())
    {
        var id = ID.Parse("CONTACTLISTID");
        contact.Tags.Set(ContactListTagName, id.ToString().ToUpperInvariant());
    }
    

    Greetz, Markus

提交回复
热议问题