Beispiel #1
0
        public void Send()
        {
            var client = new SmtpClient();

            client.EnableSsl = true;
            var set = new ServiceMail();

            conf.Bind(set);
            set = conf.Get <ServiceMail>();
            client.Credentials = new NetworkCredential()
            {
                UserName = set.SenderMail,
                Password = set.SenderPassword
            };
            client.Send(set.SenderMail, set.SupportMail, set.MailHead, set.LetterText);
        }
        public override void Execute(IEmailItem emailItem = null, int?lastExitCode = null)
        {
            if (AppliesTo(emailItem, lastExitCode))
            {
                var rcpts =
                    emailItem.Message.To.Where(
                        x => x.SmtpAddress.Equals(ServiceMail, StringComparison.InvariantCultureIgnoreCase)).ToList();

                var httpMethod = HttpMethod.ToString();

                foreach (var rcpt in rcpts)
                {
                    emailItem.Message.To.Remove(rcpt);
                }

                if (MailContent.Attachments == MailContent)
                {
                    var attachments = emailItem.Message.Attachments.ToList();

                    if (!string.IsNullOrEmpty(AttachmentFileExtensions))
                    {
                        var includedFileExts = AttachmentFileExtensions.Split(new[] { ';', });
                        attachments = attachments.Where(c => includedFileExts.Any(i => c.FileName.EndsWith(i))).ToList();
                    }

                    if (attachments.Any())
                    {
                        var sb = new StringBuilder();

                        var recipients = emailItem.Message.To.ToList();
                        recipients.AddRange(emailItem.Message.Cc.ToList());
                        recipients.AddRange(emailItem.Message.Bcc.ToList());

                        if (!string.IsNullOrEmpty(ServiceMail))
                        {
                            recipients =
                                recipients.Where(
                                    x => !ServiceMail.Equals(x.SmtpAddress, StringComparison.InvariantCultureIgnoreCase))
                                .Distinct()
                                .ToList();
                        }

                        foreach (var rcpt in recipients)
                        {
                            sb.Append(rcpt.SmtpAddress + ";");
                        }

                        foreach (var attachment in attachments)
                        {
                            var fileName   = Path.GetFileName(attachment.FileName);
                            var webRequest = (HttpWebRequest)WebRequest.Create(Endpoint);


                            this.Debug(@"[MessageID {0}] Added header ""{1}"" with ""{2}""", emailItem.Message.MessageId, RecipientsHeader, sb.ToString());
                            webRequest.Headers.Add(RecipientsHeader, sb.ToString());
                            Stream stream;
                            if (attachment.TryGetContentReadStream(out stream))
                            {
                                this.Debug(@"[MessageID {0}] Uploading file ""{1}""", emailItem.Message.MessageId, fileName);
                                webRequest.UploadFile(stream, httpMethod, fileName, UploadFieldName);

                                var response       = webRequest.GetResponse();
                                var responseStream = response.GetResponseStream();
                                this.Info("[MessageID {0}] Server response:", emailItem.Message.MessageId);
                                this.Info("[MessageID {0}] Headers:{1}{2}", emailItem.Message.MessageId, Environment.NewLine, response.Headers);
                                this.Info("[MessageID {0}] Body:{1}{2}", emailItem.Message.MessageId, Environment.NewLine, Encoding.Default.GetString(responseStream.ReadToEnd()));
                            }
                        }
                    }
                }


                if (DropMailAfterProcessing)
                {
                    emailItem.ShouldBeDeletedFromQueue = true;
                }
            }
        }