/// <summary>
        /// Waits until the specified file is accessible and then sets its file attributes to
        /// readonly to block the access of other processes such as pop3 clients. The mail is
        /// scanned for viruses first and deleted when infected. Second step is to scan the
        /// mail for spam issues. If the mail seem to be spam its subject is marked. Finally
        /// the file attributes are set to normal and the thread terminates.
        /// </summary>
        private void BeginScanThreadStart()
        {
            try
            {
                this.WaitForAccessAndBlock(this.file);

                //Virusscann
                if (VirusScanner.Scan(this.file) == VirusScanResult.Infected)
                {
                    this.UnblockFile(this.file);
                    this.file.Delete();
                }
                else
                {
                    //Spamm scann
                    if (SpamScanner.Scan(this.file) == SpamScanResult.Spam)
                    {
                        EmlFile.MarkAsSpam(this.file);
                    }
                }
            }
            catch (Exception ex)
            {
                Tracing.Exception(ex);
            }
            finally
            {
                if (this.file.Exists)
                {
                    this.UnblockFile(this.file);
                }
            }
        }
        /// <summary>
        /// Forwards the eml file to the recepient that is determined from the folder of the eml file.
        /// </summary>
        /// <param name="destinationIp">The destinationIp.</param>
        /// <param name="destinationHostname">The destinationHostname.</param>
        /// <returns>True if the mail was forwarded. False otherwise.</returns>
        public static Boolean Forward(FileInfo file, String destinationIp, String destinationHostname)
        {
            Boolean result = false;

            try
            {
                LumiSoft.Net.Mime.Mime mimemessage   = LumiSoft.Net.Mime.Mime.Parse(file.FullName);
                MemoryStream           messageStream = new MemoryStream();
                mimemessage.ToStream(messageStream);
                messageStream.Position = 0;

                LumiSoft.Net.SMTP.Client.SmtpClientEx smtpClient = new LumiSoft.Net.SMTP.Client.SmtpClientEx();
                smtpClient.Connect(destinationIp, 25);
                smtpClient.Ehlo(destinationHostname);
                smtpClient.SetSender(EmlFile.GetSender(mimemessage), messageStream.Length);
                smtpClient.AddRecipient(EmlFile.GetRecepient(file));
                smtpClient.SendMessage(messageStream);
                smtpClient.Disconnect();

                messageStream.Close();
                result = true;
            }
            catch (Exception ex)
            {
                throw new Exception("Forwarding failed", ex);
            }

            return(result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Handles the file system watcher created event.
        /// </summary>
        private void Watcher_Created(object sender, FileSystemEventArgs e)
        {
            FileInfo file = new FileInfo(e.FullPath);

            if (EmlFile.IsUnsentMail(file))
            {
                this.OnNewEmail(file);
            }
        }
        private static String GetRecepient(FileInfo file)
        {
            String result = "<{0}@{1}>";

            result = String.Format(
                result,
                EmlFile.GetRecepientMailbox(file),
                EmlFile.GetRecepientDomain(file));
            return(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Gets all eml-files from the mailfolder that are marked as unsent.
        /// </summary>
        /// <param name="start">The start.</param>
        /// <param name="mails">The mails.</param>
        private void GetUnblockedAndUnsentEmlFilesInDirectory(DirectoryInfo start, ref List <FileInfo> mails)
        {
            foreach (DirectoryInfo current in start.GetDirectories())
            {
                this.GetUnblockedAndUnsentEmlFilesInDirectory(current, ref mails);
            }

            foreach (FileInfo current in start.GetFiles())
            {
                if (
                    EmlFile.IsUnblocked(current) &&
                    EmlFile.IsUnsentMail(current) &&
                    ForwardingConfiguration.IsConfiguredForForwarding(EmlFile.GetRecepientDomain(current)))
                {
                    mails.Add(current);
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Forwards all files in the files parameter to the configured destination.
        /// </summary>
        /// <param name="files">The files.</param>
        private void ForwardMails(List <FileInfo> files)
        {
            foreach (FileInfo current in files)
            {
                try
                {
                    String ip   = ForwardingConfiguration.IpOfDomain(EmlFile.GetRecepientDomain(current));
                    String host = ForwardingConfiguration.HostnameOfDomain(EmlFile.GetRecepientDomain(current));

                    if (EmlFile.Forward(current, ip, host))
                    {
                        EmlFile.MarkAsSent(current);
                    }
                }
                catch (Exception ex)
                {
                    Tracing.Exception(ex);
                }
            }
        }