1

我想从前端获取收件人和发件人的电子邮件地址!

我在此位置创建了一个“自定义电子邮件发送”保存操作:“Sitecore/System/Modules/Settings/Save Actions/”并将其添加到表单的提交按钮的保存操作中。

在“数据”部分的“内容”选项卡中的“自定义电子邮件发送”操作中,我声明了“程序集:.Helper,类: .Helper.CustomEmail”

并在“参数”字段的“提交”部分中声明:主机:smtp.gmail.com,端口:587,登录:example@gmail.com,密码:*,IsBodyHtml:true,enableSSL:true

并在“编辑器”字段部分中声明了“编辑器:控制:SendMail.Editor”。

但是在单击表单中的“自定义电子邮件发送”操作时,我没有在 To、CC、BCC 等中输入值。

在表格中,我采用了三个字段“收件人”、“发件人”、“消息”。我想要的只是

  • “我想从前端获取收件人和发件人地址”

这是我在 CustomEmail.cs 类中的代码:

public class CustomEmail : ISaveAction, ISubmit
    {
        public void Execute(Sitecore.Data.ID formid, AdaptedResultList fields, params object[] data)
        {
            NameValueCollection formData = new NameValueCollection();
            foreach (AdaptedControlResult acr in fields)
            {
                formData[acr.FieldName] = acr.Value;
            }
            try
            {
                // get field values of form
                string emailTo = formData["To"];
                string emailFrom = formData["From"];
                string personalMsg = formData["Message"];

                bool result = false;
                if (!string.IsNullOrEmpty(emailFrom) && !string.IsNullOrEmpty(emailTo))
                {
                    // send mail
                    result = SendEmail(emailTo, emailFrom, personalMsg);

                }
                // if mail sending fail then show error massege
                if (result == false)
                {
                    Sitecore.Diagnostics.Log.Error("Some error occcured while sending email", this);
                }

            }
            catch (Exception ex)
            {
                Sitecore.Diagnostics.Log.Error(ex.Message.ToString(), this);
            }
        }


        #region SendEmail function
        /// <summary>
        ///  send mail
        /// </summary>
        /// <param name="To"></param>
        /// <param name="From"></param>
        /// <param name="Message"></param>
        public static bool SendEmail(string To, string From, string Message)
        {
            bool result = true;

            try
            {

                MailMessage mailMsg = new MailMessage();

                MailAddress mailFrom = new MailAddress(From);
                mailMsg.From = mailFrom;

                try
                {
                    MailAddress mailTo = new MailAddress(To);
                    mailMsg.To.Add(mailTo);
                }
                catch
                {

                }
                mailMsg.Body = Message;
                mailMsg.IsBodyHtml = true;

                var smtp = new SmtpClient(Sitecore.Configuration.Settings.MailServer, Sitecore.Configuration.Settings.MailServerPort);
                smtp.EnableSsl = true;
                smtp.Send(mailMsg);
            }
            catch
            {
                result = false;

            }

            return result;
        }



        #endregion

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

        #region IOnLoad Members

        public void OnLoad(bool isPostback, RenderFormArgs args)
        {


        }

        #endregion
    }

在 web.config 我添加了代码:

<setting name="MailServer" value="smtp.gmail.com" />
   <setting name="MailServerUserName" value="***@gmail.com" />
   <setting name="MailServerPassword" value="***" />
   <setting name="MailServerPort" value="587" />

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network enableSsl="true" />
      </smtp>
    </mailSettings>
  </system.net>

我得到了这个例外:

  • SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息

请解决这个问题。

4

1 回答 1

2

在我看来,您需要向 SmtpClient 添加凭据。

var smtp = new SmtpClient(Sitecore.Configuration.Settings.MailServer, Sitecore.Configuration.Settings.MailServerPort);
smtp.Credentials = new System.Net.NetworkCredential("username", "password")
smtp.EnableSsl = true;
smtp.Send(mailMsg);
于 2013-10-30T10:32:42.177 回答