none
System.Net.Mail.SmtpException: Почтовый ящик недоступен RRS feed

  • Общие обсуждения

  • Добрый день!

    Создал на сервере SharePoint пользовательское задание таймера, которое должно отсылать сообщения пользователям об окончании срока выполнения их задач. Ниже представлен код нового класса таймера.


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    using System.Net.Mail;
    
    namespace AlertMessage
    {
    public class AlertMessageJob: SPJobDefinition
     {
     static String[] SPFieldTitle = new String[8] { "Кому назначено", "Название", "Важность", "Состояние", "% завершения", "Описание", "Срок", "Дата начала" }; 
     
     public AlertMessageJob()
     : base() { } 
     
     public AlertMessageJob(string jobName, SPService service, SPServer server, SPJobLockType targetType)
     : base(jobName, service, server, targetType) { }
     
     public AlertMessageJob(string jobName, SPWebApplication webApplication)
     : base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
     {
     this.Title = "Уведомление об окончании срока выполнения задачи";
     }
     
     public static object IsNull(Object oObject, Object ifTrue, Object ifFalse)
     {
     if (oObject == null || oObject == DBNull.Value) return ifTrue; else return ifFalse;
     }
     
     private static Type ObjectType(Object oObject)
     {
     try
     {
     return oObject.GetType();
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in ObjectType(): {0}", ex.ToString()));
     return null;
     }
     }
     
     //static bool mailSent = false;
     
     public static void Log(String logMessage, TextWriter w)
     {
     w.Write("\r\nLog Entry : ");
     w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
     w.WriteLine(" :");
     w.WriteLine(" :{0}", logMessage);
     w.WriteLine("-------------------------------");
     // Update the underlying file.
     w.Flush();
     }
     
     public static void AppendLogFile(string logText)
     {
     using (StreamWriter w = File.AppendText(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS\AlertMessageJobLog.txt"))
     {
     Log(logText, w);
     // Close the writer and underlying file.
     w.Close();
     }
     }
    
     private static SPUser GetSPUser(SPListItem spListItem)
     {
     string strUserValue = "";
     try
     {
     object o = spListItem[SPFieldTitle[0]];
     if (ObjectType(o) != null)
     {
      strUserValue = o.ToString();
      if (strUserValue != null)
      {
      int intIndex = strUserValue.IndexOf(';');
      if (intIndex > 0)
      {
      int intID = Int32.Parse(strUserValue.Substring(0, intIndex));
      SPUser spUser = spListItem.Web.SiteUsers.GetByID(intID);
      return spUser;
      }
      else
      {
      return null;
      }
      }
      else
      {
      return null;
      }
     }
     else
     {
      return null;
     }
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("SPListItem: {0} - {1}\nstrUserValue: {2}\nException caught in GetSPUser(): {3}", spListItem.ID, spListItem.Name, strUserValue, ex.ToString()));
     return null;
     }
     }
    
     private static string GetTextFieldValue(object o)
     {
     try
     {
     if (ObjectType(o) != null)
     {
      Type type = o.GetType();
      switch (type.FullName)
      {
      case "System.String":
      return (string)o;
      break;
      case "System.DateTime":
      DateTime dt = (DateTime)o;
      return dt.ToLongDateString();
      break;
      case "System.Double":
      Double d = (Double)o;
      return String.Format("{0}%", d * 100);
      break;
      default:
      return " ";
      break;
      }
     }
     else
     {
      return " ";
     }
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in GetTextFieldValue(): {0}", ex.ToString()));
     return " ";
     }
     }
    
     private static void SendMesage(string spWebTitle, string spUserEmail, string htmlBody, string messageSubject)
     {
     SmtpClient client = new SmtpClient("mailserver");
     MailAddress from = new MailAddress("SharePointServer@mh.ru", spWebTitle, System.Text.Encoding.UTF8);
     MailAddress to = new MailAddress(spUserEmail);
     MailMessage message = new MailMessage(from, to);
     message.Body = htmlBody;
     message.IsBodyHtml = true;
     message.BodyEncoding = System.Text.Encoding.UTF8;
     message.Subject = messageSubject;
     message.SubjectEncoding = System.Text.Encoding.UTF8;
     client.UseDefaultCredentials = true;
     try
     {
     client.Send(message);
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("InputParameters: spWebTitle - {0}, spUserEmail - {1}, messageSubject - {2}. Exception caught in SendMessage(): {3}", spWebTitle, spUserEmail, messageSubject, ex.ToString()));
     }
     }
    
     private static string MessageBody(SPListItem spListItem)
     {
     try
     {
     SPUser spUser = GetSPUser(spListItem);
     string fldTitle = GetTextFieldValue(spListItem[SPFieldTitle[1]]);
     string fldImpotance = GetTextFieldValue(spListItem[SPFieldTitle[2]]);
     string fldState = GetTextFieldValue(spListItem[SPFieldTitle[3]]);
     string fldComplete = GetTextFieldValue(spListItem[SPFieldTitle[4]]);
     string fldDescription = GetTextFieldValue(spListItem[SPFieldTitle[5]]);
     string fldDateEnd = GetTextFieldValue(spListItem[SPFieldTitle[6]]);
     string fldDateBegin = GetTextFieldValue(spListItem[SPFieldTitle[7]]);
     string fldShotTitle;
     if (fldTitle.Length > 31)
     {
      fldShotTitle = fldTitle.Substring(0, 30) + "...";
     }
     else
     {
      fldShotTitle = fldTitle;
     }
     string Msg = "<STYLE>";
     Msg += ".ms-formlabel{text-align:left;font-family:verdana;font-size:.7em;border-top:1px solid #d8d8d8;padding-top:3px;padding-right:8px;padding-bottom:6px;color:#525252;font-weight:bold;width:165px;}";
     Msg += ".ms-standardheader{font-size:1em;margin:0em;text-align:left;color:#525252;}";
     Msg += ".ms-formbody{font-family:verdana;font-size:.7em;vertical-align:top;background:#ebf3ff;border-top:1px solid #d8d8d8;padding:3px 6px 4px 6px;width:450px;}";
     Msg += ".ms-formlink{font-size:8.0pt;font-family:Verdana,sans-serif;text-decoration: none;text-underline:none;}</STYLE>";
     Msg += "<p><a href='" + spListItem.Web.Url + "'><span style='font-size:8.0pt;font-family:Tahoma,sans-serif'>" + spListItem.Web.Title + "</span></a></p>";
     Msg += "<p><span style='font-size:16.0pt;font-family:Verdana,sans-serif;mso-fareast-font-family:Times New Roman;color:black'>Срок выполнения вашей задачи <b><i>&quot;" + fldShotTitle + "&quot;</b></i> истекает через три дня. Укажите выполненную Вами работу по поставленной задаче в поле 'Заметки'. Если задача выполнена полность, то укажите Статус задачи, как 'Завершенные', и % завершения - 100%.</span></p>";
     Msg += "<TABLE>";
     Msg += "<TR>";
     Msg += "<td>";
     Msg += "<p>";
     Msg += "<a href='" + spListItem.Web.Url + "/" + spListItem.ParentList.RootFolder.Url + "/DispForm.aspx?ID=" + spListItem.ID + "'>";
     Msg += "<span class=ms-formlink>";
     Msg += "Представление " + fldShotTitle;
     Msg += "</span>";
     Msg += "</a>";
     Msg += "</p>";
     Msg += "</td>";
     Msg += "<td style='padding:0cm 2.25pt 0cm 2.25pt'>";
     Msg += "<p >";
     Msg += "<span style='font-size:8.0pt;font-family:Verdana,sans-serif;color:#C7CBD1'>|</span>";
     Msg += "</p>";
     Msg += "</td>";
     Msg += "<td>";
     Msg += "<p>";
     Msg += "<a href='" + spListItem.Web.Url + "/" + spListItem.ParentList.RootFolder.Url + "'>";
     Msg += "<span class=ms-formlink>";
     Msg += "Представление " + spListItem.ParentList.Title;
     Msg += "</span>";
     Msg += "</a>";
     Msg += "</p>";
     Msg += "</td>";
     Msg += "</TR>";
     Msg += "</TABLE>";
     Msg += "<TABLE style='margin-top: 8px;' border=0 cellpadding=0 cellspacing=0 width=100%>";
     Msg += "<TR>";
     Msg += "<TD nowrap=true valign=top class=ms-formlabel>";
     Msg += "<H3 class=ms-standardheader>" + SPFieldTitle[1] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody'>";
     Msg += fldTitle;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[2] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody'>";
     Msg += fldImpotance;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[3] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldState;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[4] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldComplete;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[0] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += spUser.Name;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[5] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += "<div dir=''>" + fldDescription + " </div>";
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[7] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldDateBegin;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[6] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldDateEnd;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "</TABLE>";
     return Msg;
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("SPListItem: {0} - {1}\nException caught in GetSPUser(): {2}", spListItem.ID, spListItem.Name, ex.ToString()));
     return null;
     }
     }
    
     private static void SendAlertTask(string spWebTitle, string spListTitle)
     {
     try
     {
     SPSite spSite = new SPSite("http://servername/");
     SPWeb spWeb = spSite.AllWebs[spWebTitle];
     SPList spList = spWeb.Lists[spListTitle];
     foreach (SPListItem spListItem in spList.Items)
     {
      object o = spListItem["Срок"];
      if (ObjectType(o) != null)
      {
      string taskStatus = GetTextFieldValue(spListItem[SPFieldTitle[3]]);
      DateTime todayDate = DateTime.Today;
      DateTime endDate = (DateTime)o;
      DateTime notificationDate = endDate.AddDays(-3);
      SPUser spUser = GetSPUser(spListItem);
      if (spUser != null && notificationDate.Date == todayDate.Date && taskStatus != "Завершенные" && taskStatus != "Отложенные")
      {
      string messageBody = MessageBody(spListItem);
      if (messageBody != null)
      {
      string spItemShotName;
      if (spListItem.Name.Length > 31)
      {
       spItemShotName = spListItem.Name.Substring(0, 30) + "...";
      }
      else
      {
       spItemShotName = spListItem.Name;
      }
      SendMesage(spWeb.Title, spUser.Email, messageBody, spList.Title + " - " + spItemShotName);
      }
      }
      }
     }
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in SendAlertTask(): {0}", ex.ToString()));
     }
     }
    
     public override void Execute(Guid targetInstanceId)
     {
     try
     {
     string spWebTitle = "test";
     string spListTitle = "Задачи";
     SendAlertTask(spWebTitle, spListTitle);
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in Execute(): {0}", ex.ToString()));
     SPWebApplication webApplication = this.Parent as SPWebApplication;
     System.Diagnostics.EventLog.WriteEntry(webApplication.Name, ex.ToString()); 
     }
     }
     }
    }
    

    Новое задание без ошибок развертывается на сервере и в работе особых проблем связанных с классом нет. Проблема заключается в том, что сообщения не отправляются из за ошибки "System.Net.Mail.SmtpException: Почтовый ящик недоступен"

    Тестировал отправку сообщений через консольное приложение (код приведен ниже), так сообщения без проблем отсылаются адресатам.


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    using Microsoft.SharePoint;
    using System.Net.Mail;
    
    namespace SendMail
    {
     class Program
     {
     static String[] SPFieldTitle = new String[8] { "Кому назначено", "Название", "Важность", "Состояние", "% завершения", "Описание", "Срок", "Дата начала" }; 
    
     public static object IsNull(Object oObject, Object ifTrue, Object ifFalse)
     {
     if (oObject == null || oObject == DBNull.Value) return ifTrue; else return ifFalse;
     }
     private static Type ObjectType(Object oObject)
     {
     try
     {
     return oObject.GetType();
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in ObjectType(): {0}", ex.ToString()));
     return null;
     }
     }
    
     //static bool mailSent = false;
    
     public static void Log(String logMessage, TextWriter w)
     {
     w.Write("\r\nLog Entry : ");
     w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
     w.WriteLine(" :");
     w.WriteLine(" :{0}", logMessage);
     w.WriteLine("-------------------------------");
     // Update the underlying file.
     w.Flush();
     }
     
     public static void AppendLogFile(string logText)
     {
     using (StreamWriter w = File.AppendText(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS\AlertMessageJobLog.txt"))
     {
     Log(logText, w);
     // Close the writer and underlying file.
     w.Close();
     }
     }
    
     private static SPUser GetSPUser(SPListItem spListItem)
     {
     string strUserValue = "";
     try
     {
     object o = spListItem[SPFieldTitle[0]];
     if (ObjectType(o) != null)
     {
      strUserValue = o.ToString();
      if (strUserValue != null)
      {
      int intIndex = strUserValue.IndexOf(';');
      if (intIndex > 0)
      {
      int intID = Int32.Parse(strUserValue.Substring(0, intIndex));
      SPUser spUser = spListItem.Web.SiteUsers.GetByID(intID);
      return spUser;
      }
      else
      {
      return null;
      }
      }
      else
      {
      return null;
      }
     }
     else
     {
      return null;
     }
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("SPListItem: {0} - {1}\nstrUserValue: {2}\nException caught in GetSPUser(): {3}", spListItem.ID, spListItem.Name, strUserValue, ex.ToString()));
     return null;
     }
     }
    
     private static string GetTextFieldValue(object o)
     {
     try
     {
     if (ObjectType(o) != null)
     {
      Type type = o.GetType();
      switch (type.FullName)
      {
      case "System.String":
      return (string)o;
      break;
      case "System.DateTime":
      DateTime dt = (DateTime)o;
      return dt.ToLongDateString();
      break;
      case "System.Double":
      Double d = (Double)o;
      return String.Format("{0}%", d * 100);
      break;
      default:
      return "&nbsp;";
      break;
      }
     }
     else
     {
      return "&nbsp;";
     }
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in GetTextFieldValue(): {0}", ex.ToString()));
     return "&nbsp;";
     }
     }
    
     private static void SendMesage(string spWebTitle, string spUserEmail, string htmlBody, string messageSubject)
     {
     SmtpClient client = new SmtpClient("mailserver");
     MailAddress from = new MailAddress("SharePointServer@mh.ru", spWebTitle, System.Text.Encoding.UTF8);
     MailAddress to = new MailAddress(spUserEmail);
     MailMessage message = new MailMessage(from, to);
     message.Body = htmlBody;
     message.IsBodyHtml = true;
     message.BodyEncoding = System.Text.Encoding.UTF8;
     message.Subject = messageSubject;
     message.SubjectEncoding = System.Text.Encoding.UTF8;
     client.UseDefaultCredentials = true;
     try
     {
     client.Send(message);
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("InputParameters: spWebTitle - {0}, spUserEmail - {1}, messageSubject - {2}. Exception caught in SendMessage(): {3}", spWebTitle, spUserEmail, messageSubject, ex.ToString()));
     }
     }
    
     private static string MessageBody(SPListItem spListItem)
     {
     try
     {
     SPUser spUser = GetSPUser(spListItem);
     string fldTitle = GetTextFieldValue(spListItem[SPFieldTitle[1]]);
     string fldImpotance = GetTextFieldValue(spListItem[SPFieldTitle[2]]);
     string fldState = GetTextFieldValue(spListItem[SPFieldTitle[3]]);
     string fldComplete = GetTextFieldValue(spListItem[SPFieldTitle[4]]);
     string fldDescription = GetTextFieldValue(spListItem[SPFieldTitle[5]]);
     string fldDateEnd = GetTextFieldValue(spListItem[SPFieldTitle[6]]);
     string fldDateBegin = GetTextFieldValue(spListItem[SPFieldTitle[7]]);
     string fldShotTitle;
     if (fldTitle.Length > 31)
     {
      fldShotTitle = fldTitle.Substring(0, 30) + "...";
     }
     else
     {
      fldShotTitle = fldTitle;
     }
     string Msg = "<STYLE>";
     Msg += ".ms-formlabel{text-align:left;font-family:verdana;font-size:.7em;border-top:1px solid #d8d8d8;padding-top:3px;padding-right:8px;padding-bottom:6px;color:#525252;font-weight:bold;width:165px;}";
     Msg += ".ms-standardheader{font-size:1em;margin:0em;text-align:left;color:#525252;}";
     Msg += ".ms-formbody{font-family:verdana;font-size:.7em;vertical-align:top;background:#ebf3ff;border-top:1px solid #d8d8d8;padding:3px 6px 4px 6px;width:450px;}";
     Msg += ".ms-formlink{font-size:8.0pt;font-family:Verdana,sans-serif;text-decoration: none;text-underline:none;}</STYLE>";
     Msg += "<p><a href='" + spListItem.Web.Url + "'><span style='font-size:8.0pt;font-family:Tahoma,sans-serif'>" + spListItem.Web.Title + "</span></a></p>";
     Msg += "<p><span style='font-size:16.0pt;font-family:Verdana,sans-serif;mso-fareast-font-family:Times New Roman;color:black'>Срок выполнения вашей задачи <b><i>&quot;" + fldShotTitle + "&quot;</b></i> истекает через три дня. Укажите выполненную Вами работу по поставленной задаче в поле 'Заметки'. Если задача выполнена полность, то укажите Статус задачи, как 'Завершенные', и % завершения - 100%.</span></p>";
     Msg += "<TABLE>";
     Msg += "<TR>";
     Msg += "<td>";
     Msg += "<p>";
     Msg += "<a href='" + spListItem.Web.Url + "/" + spListItem.ParentList.RootFolder.Url + "/DispForm.aspx?ID=" + spListItem.ID + "'>";
     Msg += "<span class=ms-formlink>";
     Msg += "Представление " + fldShotTitle;
     Msg += "</span>";
     Msg += "</a>";
     Msg += "</p>";
     Msg += "</td>";
     Msg += "<td style='padding:0cm 2.25pt 0cm 2.25pt'>";
     Msg += "<p >";
     Msg += "<span style='font-size:8.0pt;font-family:Verdana,sans-serif;color:#C7CBD1'>|</span>";
     Msg += "</p>";
     Msg += "</td>";
     Msg += "<td>";
     Msg += "<p>";
     Msg += "<a href='" + spListItem.Web.Url + "/" + spListItem.ParentList.RootFolder.Url + "'>";
     Msg += "<span class=ms-formlink>";
     Msg += "Представление " + spListItem.ParentList.Title;
     Msg += "</span>";
     Msg += "</a>";
     Msg += "</p>";
     Msg += "</td>";
     Msg += "</TR>";
     Msg += "</TABLE>";
     Msg += "<TABLE style='margin-top: 8px;' border=0 cellpadding=0 cellspacing=0 width=100%>";
     Msg += "<TR>";
     Msg += "<TD nowrap=true valign=top class=ms-formlabel>";
     Msg += "<H3 class=ms-standardheader>" + SPFieldTitle[1] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody'>";
     Msg += fldTitle;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[2] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody'>";
     Msg += fldImpotance;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[3] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldState;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[4] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldComplete;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[0] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += spUser.Name;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[5] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += "<div dir=''>" + fldDescription + " </div>";
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[7] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldDateBegin;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "<TR>";
     Msg += "<TD nowrap='true' valign='top' class='ms-formlabel'>";
     Msg += "<H3 class='ms-standardheader'>" + SPFieldTitle[6] + "</H3>";
     Msg += "</TD>";
     Msg += "<TD valign='top' class='ms-formbody' >";
     Msg += fldDateEnd;
     Msg += "</TD>";
     Msg += "</TR>";
     Msg += "</TABLE>";
     return Msg;
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("SPListItem: {0} - {1}\nException caught in GetSPUser(): {2}", spListItem.ID, spListItem.Name, ex.ToString()));
     return null;
     }
     }
    
     private static void SendAlertTask(string spWebTitle, string spListTitle)
     {
     try
     {
     SPSite spSite = new SPSite("http://servername/");
     SPWeb spWeb = spSite.AllWebs[spWebTitle];
     SPList spList = spWeb.Lists[spListTitle];
     foreach (SPListItem spListItem in spList.Items)
     {
      object o = spListItem["Срок"];
      if (ObjectType(o) != null)
      {
      string taskStatus = GetTextFieldValue(spListItem[SPFieldTitle[3]]);
      DateTime todayDate = DateTime.Today;
      DateTime endDate = (DateTime)o;
      DateTime notificationDate = endDate.AddDays(-3);
      SPUser spUser = GetSPUser(spListItem);
      if (spUser != null && notificationDate.Date == todayDate.Date && taskStatus != "Завершенные" && taskStatus != "Отложенные")
      {
      string messageBody = MessageBody(spListItem);
      if (messageBody != null)
      {
      string spItemShotName;
      if (spListItem.Name.Length > 31)
      {
       spItemShotName = spListItem.Name.Substring(0, 30) + "...";
      }
      else
      {
       spItemShotName = spListItem.Name;
      }
      SendMesage(spWeb.Title, spUser.Email, messageBody, spList.Title + " - " + spItemShotName);
      }
      }
      }
     }
     }
     catch (Exception ex)
     {
     AppendLogFile(String.Format("Exception caught in SendAlertTask(): {0}", ex.ToString()));
     }
     }
    
     static void Main(string[] args)
     {
     try
     {
     string spWebTitle = "test";
     string spListTitle = "Задачи";
     SendAlertTask(spWebTitle, spListTitle);
     }
     catch (Exception ex)
     {
     Console.WriteLine("{0}", ex.ToString());
     }
     Console.WriteLine("Press Enter ... ");
     Console.ReadLine();
     }
     }
    }
    

    В чем может быть связана ошибка "System.Net.Mail.SmtpException: Почтовый ящик недоступен"?

    30 июня 2010 г. 8:26

Все ответы

  • Добрый день.

    А зачем так надо было замарачиваться. Что бизнес процесс уже не в моде? Можно там указать, что бы разсылать письма :)


    Sergey A Belskiy - Team Leader of developers, DEV-pro || My blog || My twitter || My space || My video
    30 июня 2010 г. 11:41
    Модератор
  • Добрый день.

    А зачем так надо было замарачиваться. Что бизнес процесс уже не в моде? Можно там указать, что бы разсылать письма :)


    Sergey A Belskiy - Team Leader of developers, DEV-pro || My blog || My twitter || My space || My video


    Можно, конечно, было сделать рабочий процесс для отправки сообщений, но все равно нужно было бы создавать пользовательское задание таймера для запуска рабочего процесса, т.к. обычные рабочие процессы, построенные в SharePoint Designer, запускаются при создании или изменении элемента. Также рабочий процесс прикрепляется к определенному списку, и каждый раз для нового списка прийдется строить новый рабочий процесс, а при использовании задания таймера достаточно будет указать имя нового списка и его расположение.

  • Ну можно также использовать EventReciever. Вот статья - http://blogs.it-club.in.ua/sbelskiy/Lists/Posts/Post.aspx?ID=11

    Ну это другая тема :)

    Попробуйте написать так:

    private void SendEmail(MailAddress masTo, string subject, string body)
        {
          using (MailMessage mail = new MailMessage())
          {
            mail.From = new MailAddress(this.WebApplication.OutboundMailSenderAddress);
            mail.To.Add(masTo);
            mail.Subject = subject;
            mail.IsBodyHtml = true;
            mail.Body = body;
            SmtpClient smtp = new SmtpClient(this.WebApplication.OutboundMailServiceInstance.Server.Address);
    
            smtp.UseDefaultCredentials = (smtp.Credentials == null);
            smtp.Send(mail);
          }
        }

    Sergey A Belskiy - Team Leader of developers, DEV-pro || My blog || My twitter || My space || My video
    Модератор