2013-10-30 43 views
1

我想獲得收件人&發件人從前端的電子郵件地址!自定義保存操作不發送電子郵件?

我創建了一個「自定義電子郵件發送」拯救行動在這個位置: 「Sitecore的/系統/模塊/設置/保存操作/」 &添加它放在一個表格的提交按鈕的保存操作。

在「自定義電子郵件發送」在「數據」部分行動內容標籤我宣佈「大會:.Helper,等級: .Helper.CustomEmail」

和「提交」科'參數' 字段我宣佈: 主機:smtp.gmail.com,端口:587,登錄:[email protected],密碼:*,IsBodyHtml:真,enableSSL:真

和「編輯器'fieldsection我已經聲明'Editor:control:SendMail.Editor'。

但在「自定義電子郵件發送的行動在形式上我沒有要輸入的值,CC的點擊,BCC等

而且在形式上我已經採取了三場「到」,「從」, '信息'。所有我想要的是

  • 「我想從前端得到RECEIPIENT &發件人地址」

這是我在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 
    } 

在網頁.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身份驗證 必需。瞭解更多信息

請解決此問題。

回答

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); 
+0

這個。 Gmail的SMTP服務器絕對需要認證 – ddysart

+0

現在是它的工作。但如果想從前端(意味着從字段)採取「發件人」,並且不想提供用戶名和密碼,那麼該怎麼辦? –

相關問題