/// <summary> /// Creates the specified message. /// </summary> /// <param name="EMailRouterPop3BoxId">The E mail router POP3 box id.</param> /// <param name="message">The message.</param> /// <returns></returns> public static int Create(int EMailRouterPop3BoxId, Pop3Message message) { if (message == null) { throw new ArgumentNullException("message"); } EMailMessageRow newRow = new EMailMessageRow(); newRow.EMailRouterPop3BoxId = EMailRouterPop3BoxId; //newRow.Created = DateTime.UtcNow; newRow.From = EMailMessage.GetSenderEmail(message); //if (message.Sender != null) // newRow.From = EMailMessage.ExtractFirstEmail(message.Sender.Email); //else // newRow.From = EMailMessage.ExtractFirstEmail(message.From.Email); newRow.To = EMailMessage.ExtractFirstEmail(message.To); newRow.Subject = message.Subject == null ? string.Empty : message.Subject; newRow.EmlMessage = GetPop3MessageBytes(message); newRow.Update(); return(newRow.PrimaryKeyId); }
/// <summary> /// Creates the single. /// </summary> /// <param name="EMail">The E mail.</param> /// <returns></returns> protected OutputMessage CreateSingle(string ToEMail, NameValueCollection headers) { Pop3MessageModifier md = new Pop3MessageModifier(EMailMessage.GetPop3MessageBytes(_sourceMsg)); // Step 1. Change Headers md.Headers["From"] = this.From; md.Headers["To"] = ToEMail; // Step 2. Remove Headers md.Headers.Remove("cc"); md.Headers.Remove("bcc"); md.Headers.Remove("Sender"); md.Headers.Remove("Reply-To"); md.Headers.Remove("Reply-To"); // OZ 2009-01-22 Exchange 2007 Problem md.Headers.Remove("Thread-Topic"); md.Headers.Remove("Thread-Index"); // OZ 2009-02-05 Gmail Problem md.Headers.Remove("Message-ID"); if (this.Subject != null) { md.Headers["Subject"] = this.Subject; } // Remove all incoming command foreach (string Key in md.Headers.AllKeys) { string UKey = Key.ToUpper(); if (UKey.StartsWith("X-IBN-")) { md.Headers.Remove(Key); } } foreach (string Key in headers.AllKeys) { md.Headers.Remove(Key); md.Headers.Add(Key, headers[Key]); } foreach (string Key in this.AdditionalHeaders.AllKeys) { md.Headers.Remove(Key); md.Headers.Add(Key, this.AdditionalHeaders[Key]); } OutputMessage retVal = new OutputMessage(); retVal.Data = md.GetBuffer(); retVal.MailFrom = this.MailFrom; retVal.RcptTo = ToEMail; retVal.Subject = md.Headers["Subject"]; return(retVal); }
/// <summary> /// Gets the sender email. /// </summary> /// <param name="message">The message.</param> /// <returns></returns> internal static string GetSenderEmail(Pop3Message message) { if (message.Headers["Reply-To"] != null) { return(EMailMessage.ExtractFirstEmail(message.Headers["Reply-To"])); } //if (message.Headers["Sender"] != null) // return EMailMessage.ExtractFirstEmail(message.Headers["Sender"]); return(EMailMessage.ExtractFirstEmail(message.Headers["From"])); }
/// <summary> /// Approves the pending. /// </summary> public static void ApprovePending() { using (DbTransaction tran = DbTransaction.Begin()) { foreach (int EMailMessageId in EMailMessage.ListPendigEMailMessageIds()) { ApprovePending(EMailMessageId); } tran.Commit(); } }
public static IncidentInfo CreateMapping(int EMailMessageId) { // Load Message Info EMailMessageInfo mi = EMailMessageInfo.Load(EMailMessageId); // Load Emal Box EMailRouterPop3Box emailBox = EMailRouterPop3Box.Load(mi.EMailRouterPop3BoxId); // Load Mapping Handler By EMail Box IEMailIncidentMapping mappingHandler = EMailIncidentMappingHandler.LoadHandler(emailBox.Settings.SelectedHandlerId); // Mapping return(mappingHandler.Create(emailBox, EMailMessage.GetPop3Message(EMailMessageId))); }
/// <summary> /// Sends the outgoing. /// </summary> /// <param name="IncidentId">The incident id.</param> /// <param name="email">The email.</param> /// <returns></returns> //public static ArrayList SendOutgoing(int IncidentId, EMailOutgoingMessage email) //{ // ArrayList retVal = new ArrayList(); // // TODO: Not implemented yet // return retVal; //} /// <summary> /// Sends the outgoing. /// </summary> /// <param name="IncidentId">The incident id.</param> /// <returns></returns> // public static ArrayList SendOutgoing(int IncidentId, int ThreadNodeId) // { // // 2007-02-15: OZ: New Messagew Addon // Issue2.SetNewMessage(IncidentId, false); // // // ArrayList retVal = new ArrayList(); // IncidentBox incidentBox = IncidentBox.Load( Incident.GetIncidentBox(IncidentId)); // bool AllowEMailRouting = true; // EMailRouterIncidentBoxBlock settings = IncidentBoxDocument.Load(incidentBox.IncidentBoxId).EMailRouterBlock; // if(!settings.AllowEMailRouting) // AllowEMailRouting = false; // EMailRouterPop3Box internalPop3Box = EMailRouterPop3Box.ListInternal(); // if(internalPop3Box==null) // AllowEMailRouting = false; // EMailRouterPop3Box pop3Box = internalPop3Box; // BaseIbnContainer foContainer = BaseIbnContainer.Create("FileLibrary",string.Format("IncidentId_{0}",IncidentId)); // ForumStorage forumStorage = (ForumStorage)foContainer.LoadControl("ForumStorage"); // ForumThreadNodeInfo node = forumStorage.GetForumThreadNode(ThreadNodeId); // BaseIbnContainer fsContainer = BaseIbnContainer.Create("FileLibrary",string.Format("ForumNodeId_{0}",node.Id)); // FileStorage fileStorage = (FileStorage)fsContainer.LoadControl("FileStorage"); // string IncidentTitle = Incident.GetIncidentTitle(IncidentId); // string IncidentTicket = TicketUidUtil.Create(incidentBox.IdentifierMask,IncidentId); // string subject; // if(incidentBox.Document.GeneralBlock.AllowOutgoingEmailFormat) // { // StringBuilder sb = new StringBuilder(incidentBox.Document.GeneralBlock.OutgoingEmailFormatSubject,4096); // sb.Replace("[=Title=]", IncidentTitle); // sb.Replace("[=Ticket=]", IncidentTicket); // sb.Replace("[=Text=]", node.Text); // sb.Replace("[=FirstName=]", Security.CurrentUser.FirstName); // sb.Replace("[=LastName=]", Security.CurrentUser.LastName); // subject = sb.ToString(); // } // else // { // subject = string.Format("RE: [{0}] {1}", // IncidentTicket, // IncidentTitle); // } // // Create Pop3 Message Stream // MemoryStream emlMessage = new MemoryStream(); // byte[] tmpBuffer = null; // #region Fill Pop3 Message Stream // // Create Pop3 Message Headers // StringBuilder sbHeaders = new StringBuilder(); // sbHeaders.AppendFormat("Date: {0}", GetEMailCreationDate()).Append("\r\n"); // sbHeaders.Append("From: [email protected]").Append("\r\n"); // sbHeaders.Append("To: [email protected]").Append("\r\n"); // sbHeaders.AppendFormat("Subject: {0}", Rfc822HeaderCollection.Encode2AsciiString(subject)).Append("\r\n"); // sbHeaders.Append("MIME-Version: 1.0").Append("\r\n"); // sbHeaders.Append("Content-Type: multipart/mixed; boundary=\"----------7E143249668A83E\"").Append("\r\n"); // sbHeaders.Append("\r\n"); // tmpBuffer = Encoding.ASCII.GetBytes(sbHeaders.ToString()); // emlMessage.Write(tmpBuffer,0, tmpBuffer.Length); // // Create Pop3 Message Entry // StringBuilder sbMessage = new StringBuilder(); // sbMessage.Append("------------7E143249668A83E").Append("\r\n"); // // IF MESSAGE IS PLAIN TEXT // //sbMessage.Append("Content-Type: text/plain; charset=utf-8").Append("\r\n"); // // IF MESSAGE IS HTML TEXT // sbMessage.Append("Content-Type: text/html; charset=utf-8").Append("\r\n"); // sbMessage.Append("Content-Transfer-Encoding: base64").Append("\r\n"); // sbMessage.Append("\r\n"); // string FullMessage; //// if(incidentBox.Document.GeneralBlock.AllowOutgoingEmailFormat) //// { //// StringBuilder sb = new StringBuilder(incidentBox.Document.GeneralBlock.OutgoingEmailFormatBody,4096); //// //// sb.Replace("[=Title=]", IncidentTitle); //// sb.Replace("[=Ticket=]", IncidentTicket); //// sb.Replace("[=Text=]", node.Text); //// sb.Replace("[=FirstName=]", Security.CurrentUser.FirstName); //// sb.Replace("[=LastName=]", Security.CurrentUser.LastName); //// //// FullMessage = sb.ToString(); //// } //// else //// { // FullMessage = node.Text; //// } // sbMessage.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes(FullMessage))).Append("\r\n"); // tmpBuffer = Encoding.ASCII.GetBytes(sbMessage.ToString()); // emlMessage.Write(tmpBuffer,0, tmpBuffer.Length); // Hashtable contentTypeHash = new Hashtable(); // using(IDataReader reader = ContentType.GetListContentTypes()) // { // while(reader.Read()) // { // contentTypeHash.Add(((string)reader["Extension"]).ToLower(), (string)reader["ContentTypeString"]); // } // } // // Add Pop3 Message Attachements // foreach(Mediachase.IBN.Business.ControlSystem.FileInfo fileInfo in fileStorage.GetFiles()) // { // StringBuilder sbFile = new StringBuilder(); // sbFile.Append("------------7E143249668A83E").Append("\r\n"); // sbFile.AppendFormat("Content-Type: {0}; name=\"{1}\"", fileInfo.FileBinaryContentType, Rfc822HeaderCollection.Encode2AsciiString(fileInfo.Name)).Append("\r\n"); // sbFile.Append("Content-Transfer-Encoding: base64").Append("\r\n"); // sbFile.AppendFormat("Content-Disposition: attachment; filename=\"{0}\"", Rfc822HeaderCollection.Encode2AsciiString(fileInfo.Name)).Append("\r\n"); // sbFile.Append("\r\n"); // using(MemoryStream fs = new MemoryStream()) // { // FileStorage.LightLoadFile(fileInfo, fs); // fs.Capacity = (int)fs.Length; // sbFile.Append(Convert.ToBase64String(fs.GetBuffer())); // } // sbFile.Append("\r\n"); // tmpBuffer = Encoding.ASCII.GetBytes(sbFile.ToString()); // emlMessage.Write(tmpBuffer,0, tmpBuffer.Length); // } // // Add Final Line // tmpBuffer = Encoding.ASCII.GetBytes("------------7E143249668A83E--\r\n\r\n"); // emlMessage.Write(tmpBuffer,0, tmpBuffer.Length); // #endregion // Pop3Message InMsg = new Pop3Message(emlMessage); // // Send Email // #region Internal -> Internal Info // // Internal -> Internal Info // if(AllowEMailRouting) // { // // 2007-02-12 OZ: "FN LN" <*****@*****.**> // string FromEmail = string.Format("\"{0} {1}\" <{2}>", // Security.CurrentUser.FirstName, // Security.CurrentUser.LastName, // pop3Box.EMailAddress); // OutputMessageCreator output2Iternal = new OutputMessageCreator(InMsg, IncidentId, pop3Box.EMailAddress, FromEmail); // // Exclude a message sender // output2Iternal.AddIgnoreRecipient(EMailMessage.GetSenderEmail(InMsg)); // // Load InternalUser // foreach(int UserId in GetInternalUsersByIncidentId(IncidentId)) // { // output2Iternal.AddRecipient(UserId); // retVal.Add(UserId); // } // foreach(OutputMessage outputMsg in output2Iternal.Create()) // { // try // { // SmtpClient.SendMessage(outputMsg.MailFrom, outputMsg.RcptTo, outputMsg.Subject, outputMsg.Data); // } // catch(Exception ex) // { // System.Diagnostics.Trace.WriteLine(ex); // Log.WriteError(ex.ToString()); // } // } // } // #endregion // #region Internal -> Extrenal // // Internal -> Extrenal // string fromEMailAddress = FindEMailRouterPublicEmail(IncidentId); // if(fromEMailAddress!=string.Empty) // { // //EMailRouterPop3Box externalPop3Box = EMailRouterPop3Box.Load(realEMailBoxId); // OutputMessageCreator output2External = new OutputMessageCreator(InMsg, IncidentId, fromEMailAddress, fromEMailAddress); // // Load External Senders // //foreach(string exRecipient in EMailMessage.GetExternalSendersByIncidentId(IncidentId)) // // 2006-12-12 OZ: Load External Senders // foreach(EMailIssueExternalRecipient exRecipient in EMailIssueExternalRecipient.List(IncidentId)) // { // output2External.AddRecipient(exRecipient.EMail); // } // foreach(OutputMessage outputMsg in output2External.Create()) // { // try // { // SmtpClient.SendMessage(outputMsg.MailFrom, outputMsg.RcptTo, outputMsg.Subject, outputMsg.Data); // } // catch(Exception ex) // { // System.Diagnostics.Trace.WriteLine(ex); // Log.WriteError(ex.ToString()); // } // } // } // #endregion // return retVal; // } public static string FindEMailRouterPublicEmail(int IncidentId) { int realEMailBoxId = EMailMessage.GetEMailRouterPop3BoxIdByIssueId(IncidentId); if (realEMailBoxId == -1) { EMailRouterPop3Box[] emailBoxList = EMailRouterPop3Box.ListExternal(); // OZ 2009-01-20 Find EmailBox mapped with IncidentBox int incidentBoxId = Incident.GetIncidentBox(IncidentId); foreach (EMailRouterPop3Box emailBox in emailBoxList) { if (emailBox.Settings.DefaultEMailIncidentMappingBlock.IncidentBoxId == incidentBoxId) { return(emailBox.EMailAddress); } } // // try to find active foreach (EMailRouterPop3Box emailBox in emailBoxList) { if (emailBox.Activity.IsActive) { return(emailBox.EMailAddress); } } if (emailBoxList.Length > 0) { return(emailBoxList[0].EMailAddress); } if (Security.CurrentUser != null) { return(Security.CurrentUser.Email); } return(Alerts2.AlertSenderEmail); } else { EMailRouterPop3Box emailBox = EMailRouterPop3Box.Load(realEMailBoxId); return(emailBox.EMailAddress); } }
/// <summary> /// Finds the E mail router public id. /// </summary> /// <param name="IncidentId">The incident id.</param> /// <returns></returns> public static int FindEMailRouterPublicId(int IncidentId) { int realEMailBoxId = EMailMessage.GetEMailRouterPop3BoxIdByIssueId(IncidentId); if (realEMailBoxId == -1) { EMailRouterPop3Box[] emailBoxList = EMailRouterPop3Box.ListExternal(); // OZ 2009-01-20 Find EmailBox mapped with IncidentBox int incidentBoxId = Incident.GetIncidentBox(IncidentId); foreach (EMailRouterPop3Box emailBox in emailBoxList) { if (emailBox.Settings.DefaultEMailIncidentMappingBlock.IncidentBoxId == incidentBoxId) { return(emailBox.EMailRouterPop3BoxId); } } // // try to find firt active foreach (EMailRouterPop3Box emailBox in emailBoxList) { if (emailBox.Activity.IsActive) { return(emailBox.EMailRouterPop3BoxId); } } // if (emailBoxList.Length > 0) { return(emailBoxList[0].EMailRouterPop3BoxId); } return(-1); } else { return(realEMailBoxId); } }
// public static string[] GetExternalSendersByIncidentId(int IncidentId) // { // return EMailMessageRow.GetExternalSendersByIncidentId(IncidentId); // } /// <summary> /// Logs the on creator. /// </summary> /// <param name="DefaultCreatorId">The default creator id.</param> /// <param name="msg">The MSG.</param> /// <returns></returns> internal static UserLight LogOnCreator(int DefaultCreatorId, Pop3Message msg) { if (Security.CurrentUser != null) { return(Security.CurrentUser); } int creatorId = DefaultCreatorId; int emailUser = DBUser.GetUserByEmail(EMailMessage.GetSenderEmail(msg), false); if (emailUser > 0) { // OZ: 2007-01-26: Fix problem: Mediachase.IBN.Business.AccessDeniedException: Access denied. // at Mediachase.IBN.Business.Incident.CreateFromEmail using (IDataReader reader = DBUser.GetUserInfo(emailUser)) { if (reader.Read()) { if (!(bool)reader["IsActive"]) { emailUser = -1; } } else { emailUser = -1; } } // } if (emailUser > 0) { creatorId = emailUser; } UserLight creator = UserLight.Load(creatorId); return(Security.SetCurrentUser(creator)); }
public static void OpenEml(int IncidentId, int EMailMessageId, Stream outputStream) { Pop3Message message = EMailMessage.GetPop3Message(EMailMessageId); IncidentBox incidentBox = IncidentBox.Load(Incident.GetIncidentBox(IncidentId)); EMailRouterPop3Box emailBox = EMailRouterPop3Box.ListInternal(); string SenderName = EMailMessage.GetSenderName(message); string FromEmail = SenderName == string.Empty?emailBox.EMailAddress: string.Format("\"{0}\" <{1}>", SenderName, emailBox.EMailAddress); OutputMessageCreator output = new OutputMessageCreator(message, IncidentId, emailBox.EMailAddress, FromEmail); output.AddRecipient(Security.CurrentUser.UserID); string Subject = (message.Subject == null?string.Empty:message.Subject); if (Subject == string.Empty) { // OZ: Maybe: Set Default Inicdent Title if subject is empty //Subject = Incident.GetIncidentTitle(IncidentId); } if (TicketUidUtil.LoadFromString(Subject) == string.Empty) { output.Subject = string.Format("[{0}] {1}", TicketUidUtil.Create(incidentBox.IdentifierMask, IncidentId), Subject); } OutputMessage outputMsg = (OutputMessage)output.Create()[0]; outputStream.Write(outputMsg.Data, 0, outputMsg.Data.Length); outputStream.Flush(); }
/// <summary> /// Initializes a new instance of the <see cref="EMailMessageInfo"/> class. /// </summary> /// <param name="EMailMessageId">The E mail message id.</param> protected EMailMessageInfo(int EMailMessageId) { _EMailMessageId = EMailMessageId; // Load Message Row EMailMessageRow row = new EMailMessageRow(EMailMessageId); ///////////////// Test // E:\Util\BlobDataExtractor\output24700.eml //System.IO.StreamReader st = new System.IO.StreamReader(@"D:\EMailMessage_72848.eml", System.Text.Encoding.Default); //string strmsg = st.ReadToEnd(); //byte[] buffer = System.Text.Encoding.Default.GetBytes(strmsg); //System.IO.MemoryStream memStream = new System.IO.MemoryStream(buffer, 0, buffer.Length, true, true); /////////////// _created = Database.DBCommon.GetLocalDate(Security.CurrentUser.TimeZoneId, row.Created); MemoryStream memStream = new MemoryStream(row.EmlMessage.Length); memStream.Write(row.EmlMessage, 0, row.EmlMessage.Length); memStream.Position = 0; Pop3Message message = new Pop3Message(memStream); // Load Headers _headers.Add(message.Headers); // Extract Html Body _htmlBody = ConvertBody(message); // Extract Attachments _attachments = (AttachmentInfo[])ExtractAttachments(message.MimeEntries).ToArray(typeof(AttachmentInfo)); _senderEmail = EMailMessage.GetSenderEmail(message); _senderName = EMailMessage.GetSenderName(message); _emailBoxId = row.EMailRouterPop3BoxId; }
/// <summary> /// Adds to incident message. /// </summary> /// <param name="IsInternal">if set to <c>true</c> [is internal].</param> /// <param name="IncidentId">The incident id.</param> /// <param name="EMailMessageId">The E mail message id.</param> /// <param name="msg">The MSG.</param> /// <returns></returns> public static int AddToIncidentMessage(bool IsInternal, int IncidentId, int EMailMessageId, Pop3Message msg) { IncidentBox incidentBox = IncidentBox.Load(Incident.GetIncidentBox(IncidentId)); if (IsInternal) { // 2007-02-15: OZ: New Messagew Addon Issue2.SetNewMessage(IncidentId, false); // // TODO: If Responsible is Group, set current user as responsible return(AddInternalEMail2Incident(IncidentId, EMailMessageId, EMailMessage.GetSenderName(msg), EMailMessage.GetSenderEmail(msg))); } else { // 2007-02-15: OZ: New Messagew Addon Issue2.SetNewMessage(IncidentId, true); // return(AddExternalEMail2Incident(IncidentId, EMailMessageId, EMailMessage.GetSenderName(msg), EMailMessage.GetSenderEmail(msg))); } }
public static ArrayList Send(int IncidentId, int EMailMessageId) { EMailMessageRow row = new EMailMessageRow(EMailMessageId); return(Send(IncidentId, EMailRouterPop3Box.Load(row.EMailRouterPop3BoxId), EMailMessage.GetPop3Message(row.EmlMessage))); }
/// <summary> /// Adds to incident message. /// </summary> /// <param name="IsInternal">if set to <c>true</c> [is internal].</param> /// <param name="IncidentId">The incident id.</param> /// <param name="EMailMessageId">The E mail message id.</param> /// <returns></returns> public static int AddToIncidentMessage(bool IsInternal, int IncidentId, int EMailMessageId) { Pop3Message message = EMailMessage.GetPop3Message(EMailMessageId); return(AddToIncidentMessage(IsInternal, IncidentId, EMailMessageId, message)); }
/// <summary> /// Copies to incident. /// </summary> /// <param name="emailMessageId">The email message id.</param> /// <param name="incidentId">The incident id.</param> public static void CopyToIncident(int emailMessageId, int incidentId) { using (DbTransaction tran = DbTransaction.Begin()) { // Remove from pending PendingEMailMessageRow.DeleteByEMailMessageId(emailMessageId); // Load Pop3 Message EMailMessageInfo msgInfo = EMailMessageInfo.Load(emailMessageId); EMailRouterPop3Box emailBox = EMailRouterPop3Box.Load(msgInfo.EMailRouterPop3BoxId); Pop3Message msg = EMailMessage.GetPop3Message(emailMessageId); // Add User to White Lits string SenderEmail = EMailMessage.GetSenderEmail(msg); //if(!WhiteListItem.Contains(SenderEmail)) if (PortalConfig.UseAntiSpamFilter && PortalConfig.AutoFillWhiteList) { WhiteListItem.Create(SenderEmail); } int creatorId, issueBoxId; using (IDataReader reader = Incident.GetIncident(incidentId)) { reader.Read(); creatorId = (int)reader["CreatorId"]; issueBoxId = (int)reader["IncidentBoxId"]; } int stateId, managerId, responsibleId; bool isResposibleGroup; ArrayList users = new ArrayList(); Issue2.GetIssueBoxSettings(issueBoxId, out stateId, out managerId, out responsibleId, out isResposibleGroup, users); UserLight prevUser = LogOnCreator(creatorId, msg); int ThreadNodeId = AddToIncidentMessage(emailBox.IsInternal, incidentId, emailMessageId, msg); if (ProcessXIbnHeaders(incidentId, ThreadNodeId, msg)) { ArrayList excludeUsers = EMailRouterOutputMessage.Send(incidentId, emailBox, msg); // O.R. [2008-09-09]: Exclude inactive users if (responsibleId > 0 && User.GetUserActivity(responsibleId) != User.UserActivity.Active) { responsibleId = -1; } ArrayList activeUsers = new ArrayList(); foreach (int userId in users) { if (User.GetUserActivity(userId) == User.UserActivity.Active) { activeUsers.Add(userId); } } // Issue2.SendAlertsForNewIssue(incidentId, managerId, responsibleId, activeUsers, excludeUsers); } tran.Commit(); } }
/// <summary> /// Approves the pending. /// </summary> /// <param name="EMailMessageId">The E mail message id.</param> public static void ApprovePending(int EMailMessageId) { // Stop Double Approve if (!PendingEMailMessageRow.Contains(EMailMessageId)) { return; } using (DbTransaction tran = DbTransaction.Begin()) { // Remove from pending PendingEMailMessageRow.DeleteByEMailMessageId(EMailMessageId); // Load Pop3 Message EMailMessageInfo msgInfo = EMailMessageInfo.Load(EMailMessageId); EMailRouterPop3Box emailBox = EMailRouterPop3Box.Load(msgInfo.EMailRouterPop3BoxId); Pop3Message msg = EMailMessage.GetPop3Message(EMailMessageId); // Add User to White Lits string SenderEmail = EMailMessage.GetSenderEmail(msg); //if(!WhiteListItem.Contains(SenderEmail)) if (PortalConfig.UseAntiSpamFilter && PortalConfig.AutoFillWhiteList) { WhiteListItem.Create(SenderEmail); } string TicketUID = TicketUidUtil.LoadFromString(msg.Subject == null ? string.Empty : msg.Subject); if (TicketUID == string.Empty) { int IncidentId = CreateNewIncident(EMailMessageId, emailBox, msg); // Automaticaly by Incident.CreateFromEmail //EMailRouterOutputMessage.Send(IncidentId, emailBox, msg); } else { // Assign By Ticket int IncidentId = FindIncidentByTicket(TicketUID); if (IncidentId != -1) { int creatorId, issueBoxId; using (IDataReader reader = Incident.GetIncident(IncidentId)) { reader.Read(); creatorId = (int)reader["CreatorId"]; issueBoxId = (int)reader["IncidentBoxId"]; } int stateId, managerId, responsibleId; bool isResposibleGroup; ArrayList users = new ArrayList(); Issue2.GetIssueBoxSettings(issueBoxId, out stateId, out managerId, out responsibleId, out isResposibleGroup, users); UserLight prevUser = LogOnCreator(creatorId, msg); int ThreadNodeId = AddToIncidentMessage(emailBox.IsInternal, IncidentId, EMailMessageId, msg); if (ProcessXIbnHeaders(IncidentId, ThreadNodeId, msg)) { ArrayList excludeUsers = EMailRouterOutputMessage.Send(IncidentId, emailBox, msg); // O.R. [2008-09-09]: Exclude inactive users if (responsibleId > 0 && User.GetUserActivity(responsibleId) != User.UserActivity.Active) { responsibleId = -1; } ArrayList activeUsers = new ArrayList(); foreach (int userId in users) { if (User.GetUserActivity(userId) == User.UserActivity.Active) { activeUsers.Add(userId); } } // Issue2.SendAlertsForNewIssue(IncidentId, managerId, responsibleId, activeUsers, excludeUsers); } } else { IncidentId = CreateNewIncident(EMailMessageId, emailBox, msg); // Automaticaly by Incident.CreateFromEmail //EMailRouterOutputMessage.Send(IncidentId, emailBox, msg); } } tran.Commit(); } }
private void OnNewMessage(object sender, EventArgs e) { if (e is NewPop3MessageEventArgs && sender is EMailRouterPop3BoxMessageLoader) { EMailRouterPop3Box internalPop3Box = EMailRouterPop3Box.ListInternal(); if (internalPop3Box != null && !internalPop3Box.Activity.IsActive) { internalPop3Box = null; } UserLight prevUser = Security.CurrentUser; Alerts2.SendToCurrentUser = true; try { using (DbTransaction tran = DbTransaction.Begin()) { EMailRouterPop3BoxMessageLoader loader = (EMailRouterPop3BoxMessageLoader)sender; Pop3Message msg = ((NewPop3MessageEventArgs)e).Message; string TicketUID = TicketUidUtil.LoadFromString(msg.Subject == null ? string.Empty : msg.Subject); EMailMessageAntiSpamRuleRusult result = EMailMessageAntiSpamRuleRusult.Deny; if (loader.Owner.IsInternal) { int UserId = DBUser.GetUserByEmail(EMailMessage.GetSenderEmail(msg), false); if (TicketUID != string.Empty && UserId > 0) { result = EMailMessageAntiSpamRuleRusult.Accept; } } else { if (PortalConfig.UseAntiSpamFilter) { result = EMailMessageAntiSpamRule.Check(loader.Owner, msg); } else { result = EMailMessageAntiSpamRuleRusult.Accept; } } int EMailMessageId = -1; // OZ: [2007-01-29] EMailMessageLog if (EmailLogSettings != null) { string from = string.Empty; if (msg.Headers["Reply-To"] != null) { from = msg.Headers["Reply-To"]; } //else if (msg.Headers["Sender"] != null) //{ // from = msg.Headers["Sender"]; //} else if (msg.Headers["From"] != null) { from = msg.Headers["From"]; } EMailMessageLog.Add(from, msg.Headers["To"] != null ? msg.Headers["To"] : string.Empty, msg.Headers["Subject"] != null ? msg.Headers["Subject"] : string.Empty, loader.Owner.EMailRouterPop3BoxId, result); } // switch (result) { case EMailMessageAntiSpamRuleRusult.Pending: // Register Email Message EMailMessageId = RegisterEmail(loader.Owner.EMailRouterPop3BoxId, msg); // Add to pending email table EMailMessage.MarkAsPendingMessage(EMailMessageId); break; case EMailMessageAntiSpamRuleRusult.Accept: // Register Email Message EMailMessageId = RegisterEmail(loader.Owner.EMailRouterPop3BoxId, msg); if (TicketUID == string.Empty) { int IncidentId = EMailMessage.CreateNewIncident(EMailMessageId, loader.Owner, msg); } else { // Assign By Ticket int IncidentId = FindIncidentByTicket(TicketUID); if (IncidentId != -1) { int creatorId, issueBoxId; using (IDataReader reader = DBIncident.GetIncident(IncidentId, 0, 1)) { reader.Read(); creatorId = (int)reader["CreatorId"]; issueBoxId = (int)reader["IncidentBoxId"]; } int stateId, managerId, responsibleId; bool isResposibleGroup; ArrayList users = new ArrayList(); Issue2.GetIssueBoxSettings(issueBoxId, out stateId, out managerId, out responsibleId, out isResposibleGroup, users); EMailMessage.LogOnCreator(creatorId, msg); int ThreadNodeId = EMailMessage.AddToIncidentMessage(loader.Owner.IsInternal, IncidentId, EMailMessageId, msg); if (EMailMessage.ProcessXIbnHeaders(IncidentId, ThreadNodeId, msg)) { try { ArrayList excludeUsers = EMailRouterOutputMessage.Send(IncidentId, loader.Owner, msg); SystemEvents.AddSystemEvents(SystemEventTypes.Issue_Updated_Forum_MessageAdded, IncidentId, -1, excludeUsers); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex); Log.WriteError(ex.ToString()); } } } else { // Add to pending email table if (!loader.Owner.IsInternal) { EMailMessage.MarkAsPendingMessage(EMailMessageId); } } } break; case EMailMessageAntiSpamRuleRusult.Deny: // Do nothing break; } tran.Commit(); } } finally { Alerts2.SendToCurrentUser = false; if (Security.CurrentUser != prevUser) { Security.SetCurrentUser(prevUser); } } } }
public static ArrayList Send(int IncidentId, EMailRouterPop3Box pop3Box, Pop3Message InMsg, string[] RecipientEmails) { ArrayList retVal = new ArrayList(); IncidentBox incidentBox = IncidentBox.Load(Incident.GetIncidentBox(IncidentId)); EMailRouterIncidentBoxBlock settings = IncidentBoxDocument.Load(incidentBox.IncidentBoxId).EMailRouterBlock; if (pop3Box.IsInternal) { #region Internal -> Extrenal // Internal -> Internal Info // 2009-06-16 OZ: Add Chech send emails to internal users if (settings.AllowEMailRouting) { // 2007-02-12 OZ: "FN LN" <*****@*****.**> string FromEmail = string.Format("\"{0} {1}\" <{2}>", Security.CurrentUser.LastName, Security.CurrentUser.FirstName, pop3Box.EMailAddress); OutputMessageCreator output2Iternal = new OutputMessageCreator(InMsg, IncidentId, pop3Box.EMailAddress, FromEmail); // Exclude a message sender //output2Iternal.AddIgnoreRecipient(EMailMessage.GetSenderEmail(InMsg)); // Load InternalUser foreach (int UserId in GetInternalUsersByIncidentId(IncidentId)) { output2Iternal.AddRecipient(UserId); retVal.Add(UserId); } // Load InformationRecipientList // foreach(int infoRecipient in IncidentBoxDocument.Load(incidentBox.IncidentBoxId).EMailRouterBlock.InformationRecipientList) // { // output2Iternal.AddRecipient(infoRecipient); // } foreach (OutputMessage outputMsg in output2Iternal.Create()) { //try //{ SmtpClientUtility.SendMessage(OutgoingEmailServiceType.HelpDeskEmailBox, pop3Box.EMailRouterPop3BoxId, outputMsg.MailFrom, outputMsg.RcptTo, outputMsg.Subject, outputMsg.Data); //} //catch(Exception ex) //{ // System.Diagnostics.Trace.WriteLine(ex); // Log.WriteError(ex.ToString()); //} } } // Internal -> Extrenal string publicEmail = FindEMailRouterPublicEmail(IncidentId); if (publicEmail != string.Empty) { //EMailRouterPop3Box externalPop3Box = EMailRouterPop3Box.Load(realEMailBoxId); OutputMessageCreator output2External = new OutputMessageCreator(InMsg, IncidentId, publicEmail, publicEmail); // Load External Senders // foreach(string exRecipient in EMailMessage.GetExternalSendersByIncidentId(IncidentId)) // { // output2External.AddRecipient(exRecipient); // } // Load External Senders foreach (EMailIssueExternalRecipient exRecipient in EMailIssueExternalRecipient.List(IncidentId)) { output2External.AddRecipient(exRecipient.EMail); } // 2007-03-12 RecipientEmails Addon if (RecipientEmails != null) { foreach (string exItem in RecipientEmails) { int emailUserId = DBUser.GetUserByEmail(exItem, false); if (emailUserId > 0) { if (!retVal.Contains(emailUserId)) { output2External.AddRecipient(exItem); retVal.Add(emailUserId); } } else { output2External.AddRecipient(exItem); } } } // int emailBoxId = EMail.EMailRouterOutputMessage.FindEMailRouterPublicId(IncidentId); foreach (OutputMessage outputMsg in output2External.Create()) { //try //{ SmtpClientUtility.SendMessage(OutgoingEmailServiceType.HelpDeskEmailBox, emailBoxId, outputMsg.MailFrom, outputMsg.RcptTo, outputMsg.Subject, outputMsg.Data); //} //catch(Exception ex) //{ // System.Diagnostics.Trace.WriteLine(ex); // Log.WriteError(ex.ToString()); //} } } #endregion } else { if (!settings.AllowEMailRouting) { return(retVal); } EMailRouterPop3Box internalPop3Box = EMailRouterPop3Box.ListInternal(); if (internalPop3Box == null) { return(retVal); } #region // External -> Internal // External -> Internal string SenderName = EMailMessage.GetSenderName(InMsg); string FromEmail = SenderName == string.Empty?internalPop3Box.EMailAddress: string.Format("\"{0}\" <{1}>", SenderName, internalPop3Box.EMailAddress); OutputMessageCreator output = new OutputMessageCreator(InMsg, IncidentId, internalPop3Box.EMailAddress, FromEmail); string Subject = (InMsg.Subject == null?string.Empty:InMsg.Subject); if (Subject == string.Empty) { // OZ: Maybe: Set Default Inicdent Title if subject is empty //Subject = Incident.GetIncidentTitle(IncidentId); } if (TicketUidUtil.LoadFromString(Subject) == string.Empty) { output.Subject = string.Format("[{0}] {1}", TicketUidUtil.Create(incidentBox.IdentifierMask, IncidentId), Subject); } foreach (int UserId in GetInternalUsersByIncidentId(IncidentId)) { output.AddRecipient(UserId); retVal.Add(UserId); } // IncidentBoxDocument incidentDoc = IncidentBoxDocument.Load(incidentBox.IncidentBoxId); // // foreach(int infoRecipient in incidentDoc.EMailRouterBlock.InformationRecipientList) // { // output.AddRecipient(infoRecipient); // } foreach (OutputMessage outputMsg in output.Create()) { //try //{ SmtpClientUtility.SendMessage(OutgoingEmailServiceType.HelpDeskEmailBox, internalPop3Box.EMailRouterPop3BoxId, outputMsg.MailFrom, outputMsg.RcptTo, outputMsg.Subject, outputMsg.Data); //} //catch(Exception ex) //{ // System.Diagnostics.Trace.WriteLine(ex); // Log.WriteError(ex.ToString()); //} } #endregion } return(retVal); }
public IncidentInfo Create(EMailRouterPop3Box box, Mediachase.Net.Mail.Pop3Message msg) { IncidentInfo retVal = new IncidentInfo(); retVal.CreatorId = box.Settings.DefaultEMailIncidentMappingBlock.DefaultCreator; retVal.EMailBox = box.EMailRouterPop3BoxId; retVal.Title = msg.Subject == null?string.Empty:msg.Subject; if (retVal.Title == string.Empty) { // Set Default Inicdent Title if subject is empty string SenderID = EMailMessage.GetSenderName(msg); if (SenderID == string.Empty) { SenderID = EMailMessage.GetSenderEmail(msg); } retVal.Title = string.Format("{0} ({1})", SenderID, DateTime.Now.ToString("d")); } // OZ: 2008-07-30 Added description defenition rules if (box.Settings.DefaultEMailIncidentMappingBlock.DescriptionId == -1) { retVal.Description = string.Empty; retVal.EMailBody = EMailMessageInfo.ExtractTextFromHtml(msg); } else { retVal.Description = EMailMessageInfo.ExtractTextFromHtml(msg); retVal.EMailBody = retVal.Description; } // int priorityId = GetPriorityId(box, msg); if (priorityId < 0) // <0 From Email { retVal.PriorityId = 500; string importance = msg.Importance; if (importance != null) { switch (importance.ToLower()) { case "low": retVal.PriorityId = 0; break; case "normal": retVal.PriorityId = 500; break; case "high": retVal.PriorityId = 750; break; } } } else { retVal.PriorityId = priorityId; } retVal.MailSenderEmail = EMailMessage.GetSenderEmail(msg); retVal.SeverityId = GetSeverityId(box, msg); retVal.TypeId = GetTypeId(box, msg); retVal.GeneralCategories.AddRange(GetGeneralCategories(box, msg)); retVal.IncidentCategories.AddRange(GetIncidentCategories(box, msg)); // OZ: 2007-01-11 retVal.ProjectId = box.Settings.DefaultEMailIncidentMappingBlock.ProjectId; retVal.IncidentBoxId = box.Settings.DefaultEMailIncidentMappingBlock.IncidentBoxId; // OZ: 2007-01-22 retVal.OrgUid = box.Settings.DefaultEMailIncidentMappingBlock.OrgUid; retVal.ContactUid = box.Settings.DefaultEMailIncidentMappingBlock.ContactUid; return(retVal); }
public static void Open(int IncidentId, int EMailMessageId, Stream outputStream) { System.Reflection.Assembly asm = typeof(MsgMessage).Assembly; Pop3Message message = EMailMessage.GetPop3Message(EMailMessageId); IncidentBox incidentBox = IncidentBox.Load(Incident.GetIncidentBox(IncidentId)); EMailRouterPop3Box box = EMailRouterPop3Box.ListInternal(); string receiver = Security.CurrentUser.Email; //EMailMessage.GetSenderEmail(message); string sender = box.EMailAddress; using (Stream stream = asm.GetManifestResourceStream("Mediachase.IBN.Business.Resources.template.msg")) { using (MemoryStream memStream = new MemoryStream()) { using (MsgHelper helper = new MsgHelper(stream)) { helper.SetSenderEmail(sender); //string SenderName = EMailMessage.GetSenderName(message); //helper.SetSenderName(SenderName==string.Empty?sender:SenderName); helper.SetSenderName(sender); string IncidentTitle = Incident.GetIncidentTitle(IncidentId); string IncidentTicket = TicketUidUtil.Create(incidentBox.IdentifierMask, IncidentId); string Subject = (message.Subject == null?string.Empty:message.Subject); if (Subject == string.Empty) { // OZ: Maybe: Set Default Inicdent Title if subject is empty //Subject = Incident.GetIncidentTitle(IncidentId); } if (TicketUidUtil.LoadFromString(Subject) == string.Empty) { Subject = string.Format("[{0}] {1}", TicketUidUtil.Create(incidentBox.IdentifierMask, IncidentId), Subject); } helper.SetReceiverName(Security.CurrentUser.DisplayName); helper.SetDisplayTo(receiver); helper.SetReceiverEmail(receiver); helper.SetCreationTimes(DateTime.UtcNow); helper.SetSubject(Subject); helper.SetBody(message.BodyText); if (message.BodyHtml == null || message.BodyHtml.Trim() == String.Empty) { helper.SetHtmlBody(message.BodyText); } else { helper.SetHtmlBody(message.BodyHtml); } helper.Commit(); helper.createMSG(memStream); memStream.Flush(); memStream.Seek(0, SeekOrigin.Begin); const int bufLen = 1024; byte[] buffer = new byte[bufLen]; int bytesRead; while ((bytesRead = memStream.Read(buffer, 0, bufLen)) > 0) { outputStream.Write(buffer, 0, bytesRead); } outputStream.Flush(); } } } }
/// <summary> /// Checks the specified email box. /// </summary> /// <param name="emailBox">The email box.</param> /// <param name="message">The message.</param> /// <returns></returns> public static EMailMessageAntiSpamRuleRusult Check(EMailRouterPop3Box emailBox, Pop3Message message) { // 2007-01-09: Check Empty From and Sender if (message.Sender == null && message.From == null || message.To == null) { return(EMailMessageAntiSpamRuleRusult.Deny); } EMailMessageAntiSpamRule[] antiSpamRules = EMailMessageAntiSpamRule.List(); // Load Rules //EMailMessageAntiSpamRule[] antiSpamRules = _antiSpamRules; // Check Rules foreach (EMailMessageAntiSpamRule rule in antiSpamRules) { if (((EMailMessageAntiSpamRuleType)rule.RuleType) != EMailMessageAntiSpamRuleType.Service) { string KeyValue = GetStringFromEmailByKey(message, rule.Key); if (KeyValue != null) { switch ((EMailMessageAntiSpamRuleType)rule.RuleType) { case EMailMessageAntiSpamRuleType.Contains: foreach (string ContainsSubStr in rule.Value.Split(';')) { string TrimContainsSubStr = ContainsSubStr.Trim(); if (TrimContainsSubStr != string.Empty) { if (TrimContainsSubStr.IndexOfAny(new char[] { '*', '?' }) != -1) { if (Pattern.Match(KeyValue, TrimContainsSubStr)) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } } else { if (KeyValue.IndexOf(TrimContainsSubStr) != -1) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } } } } break; case EMailMessageAntiSpamRuleType.IsEqual: if (string.Compare(KeyValue, rule.Value, true) == 0) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } break; case EMailMessageAntiSpamRuleType.RegexMatch: Match match = Regex.Match(KeyValue, rule.Value); if ((match.Success && (match.Index == 0)) && (match.Length == KeyValue.Length)) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } break; } } } else { string FromEmail = EMailMessage.GetSenderEmail(message); switch (rule.Key) { case BlackListServiceName: if (BlackListItem.Contains(FromEmail)) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } break; case WhiteListServiceName: if (WhiteListItem.Contains(FromEmail)) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } break; case TicketServiceName: if (message.Subject != null && TicketUidUtil.LoadFromString(message.Subject) != string.Empty) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } break; case IncidentBoxRulesServiceName: // Step 1. Get Incident Info IEMailIncidentMapping mappingHandler = EMailIncidentMappingHandler.LoadHandler(emailBox.Settings.SelectedHandlerId); IncidentInfo incidentInfo = mappingHandler.Create(emailBox, message); // Step 2. Evaluate IncidentBoxRules IncidentBox box = IncidentBoxRule.Evaluate(incidentInfo, false); if (box != null) { return(rule.Accept ? EMailMessageAntiSpamRuleRusult.Accept : EMailMessageAntiSpamRuleRusult.Deny); } break; } } } return(EMailMessageAntiSpamRuleRusult.Pending); }
private int RegisterEmail(int EMailRouterPop3BoxId, Pop3Message msg) { return(EMailMessage.Create(EMailRouterPop3BoxId, msg)); }