Полетата за изпращане на имейл не се изобразяват в уеб формуляри на Sitecore за търговци

Имам проблем с действието за запазване на WFFM Send Email Message (Sitecore 6.5.0). Опитвам се да изпратя имейл, който включва контейнерите за формуляри от падащото меню „Вмъкване на поле“ в редактора за изпращане на имейл. Понякога полетата ще се визуализират правилно, но повечето пъти имейлът ще включва текста на контейнера вместо действителната стойност на полето.

Например, това е имейлът, който идва през:

First Name: [First Name] 
Last Name: [Last Name] 
Email: [Email Address] 
Company Name: [Company Name] 
Phone Number: [Phone Number] 

Мисля, че това е свързано с редактора за изпращане на имейл, използващ редактор с форматиран текст за шаблона за имейл, но се опитах да коригирам HTML на съобщението без резултат. Ето как изглежда маркирането: (маркерите и етикетите <p> бяха вградени, но и това не работеше)

<p>First Name:
[<label id="{F49F9E49-626F-44DC-8921-023EE6D7948E}">First Name</label>]
</p>
<p>Last Name:
[<label id="{9CE3D48C-59A0-432F-B6F1-3AFD03687C94}">Last Name</label>]
</p>
<p>Email:
[<label id="{E382A37E-9DF5-4AFE-8780-17169E687805}">Email Address</label>]
</p>
<p>Company Name:
[<label id="{9C08AC2A-4128-47F8-A998-12309B381CCD}">Company Name</label>]
</p>
<p>Phone Number:
[<label id="{4B0C5FAC-A08A-4EF2-AD3E-2B7FDF25AFA7}">Phone Number</label>]
</p>

Някой знае ли какво може да се обърка?


person amklose    schedule 02.09.2014    source източник


Отговори (2)


Срещал съм този проблем и преди, но използвах персонализирано действие за имейл. Успях да го поправя, като не използвах отхвърлените методи в класа SendMail и вместо това използвах класовете ProcessMessage и ProcessMessageArgs на пространството от имена Sitecore.Form.Core.Pipelines.ProcessMessage.

Моят случай на използване беше малко по-сложен от вашия, тъй като ние също прикачвахме PDF брошура към нашето съобщение (поради което използвахме персонализираното имейл действие на първо място), но ето кодът:

public class SendBrochureEmail : SendMail, ISaveAction, ISubmit
{

    public new void Execute(ID formId, AdaptedResultList fields, params object[] data)
    {
        try
        {
            var formData = new NameValueCollection();

            foreach (AdaptedControlResult acr in fields)
            {
                formData[acr.FieldName] = acr.Value;
            }

            var senderName = formData["Your Name"];
            var emailTo = formData["Recipient Email"];
            var recipientName = formData["Recipient Name"];

            var documentTitle = formData["Document Title"];
            if (documentTitle.IsNullOrEmpty())
            {
                documentTitle = String.Format("Documents_{0}", DateTime.Now.ToString("MMddyyyy"));
            }
            Subject = documentTitle;

            if (!String.IsNullOrEmpty(emailTo))
            {
                BaseSession.FromName = senderName;
                BaseSession.CatalogTitle = documentTitle;
                BaseSession.ToName = recipientName;

                var tempUploadPath = Sitecore.Configuration.Settings.GetSetting("TempPdfUploadPath");
                var strPdfFilePath =
                    HttpContext.Current.Server.MapPath(tempUploadPath + Guid.NewGuid().ToString() + ".pdf");

                //initialize object to hold WFFM mail/message arguments
                var msgArgs = new ProcessMessageArgs(formId, fields, MessageType.Email);

                var theDoc = PdfDocumentGenerator.BuildPdfDoc();
                theDoc.Save(strPdfFilePath);
                theDoc.Clear();

                FileInfo fi = null;
                FileStream stream = null;
                if (File.Exists(strPdfFilePath))
                {
                    fi = new FileInfo(strPdfFilePath);
                    stream = fi.OpenRead();
                    //attach the file with the name specified by the user
                    msgArgs.Attachments.Add(new Attachment(stream, documentTitle + ".pdf", "application/pdf"));
                }

                //get the email's "from" address setting
                var fromEmail = String.Empty;
                var fromEmailNode = Sitecore.Configuration.Factory.GetConfigNode(".//sc.variable[@name='fromEmail']");
                if (fromEmailNode != null && fromEmailNode.Attributes != null)
                {
                    fromEmail = fromEmailNode.Attributes["value"].Value;
                }

                //the body of the email, as configured in the "Edit" pane for the Save Action, in Sitecore
                msgArgs.Mail.Append(base.Mail);
                //The from address, with the sender's name (specified by the user) in the meta
                msgArgs.From = senderName + "<" + fromEmail + ">";
                msgArgs.Recipient = recipientName;
                msgArgs.To.Append(emailTo);
                msgArgs.Subject.Append(Subject);
                msgArgs.Host = Sitecore.Configuration.Settings.MailServer;
                msgArgs.Port = Sitecore.Configuration.Settings.MailServerPort;
                msgArgs.IsBodyHtml = true;

                //initialize the message using WFFM's built-in methods
                var msg = new ProcessMessage();
                msg.AddAttachments(msgArgs);
                msg.BuildToFromRecipient(msgArgs);
                //change links to be absolute instead of relative
                msg.ExpandLinks(msgArgs);
                msg.AddHostToItemLink(msgArgs);
                msg.AddHostToMediaItem(msgArgs);
                //replace the field tokens in the email body with the user-specified values
                msg.ExpandTokens(msgArgs);
                msg.SendEmail(msgArgs);

                //no longer need the file or the stream - safe to close stream and delete delete it
                if (fi != null && stream != null)
                {
                    stream.Close();
                    fi.Delete();
                }
            }
            else
            {
                Log.Error("Email To is empty", this);
                throw new Exception("Email To is empty");
            }
        }
        catch (Exception ex)
        {
            Log.Error("Test Failed.", ex, (object) ex);
            throw;
        }
        finally
        {
            BrochureItems.BrochureItemIds = null;
        }
    }

    public void Submit(ID formid, AdaptedResultList fields)
    {
        Execute(formid, fields);
    }

    public void OnLoad(bool isPostback, RenderFormArgs args)
    {
    }

}

Много е възможно имейл действието, с което се доставя WFFM, да използва отхвърлените методи, което може да е вашият проблем. Нямам време да го разгледам, но можете да декомпилирате DLL и да видите какво прави тяхното имейл действие. Независимо от това, горният код трябва да работи веднага, с изключение на актуализирането на полетата до тези, които използвате, и премахването на кода за прикачване на PDF, ако решите да нямате прикачени файлове.

Успех и приятно кодиране :)

person Zachary Kniebel    schedule 05.09.2014

Ако промените поле във формуляра по някакъв начин (caption, name, type и т.н.), връзката ще се промени и трябва да вмъкнете отново контейнера и да го преместите нагоре до местоположението му в очаквания имейл. Това е вярно и ако дублирате формуляр. Ще трябва да поставите отново всички полета в имейла или просто ще получите резултата, който показвате по-горе.

Повторното вмъкване при промяна ще гарантира събирането на стойността!

person Jennifer Rose    schedule 12.06.2015