예제 #1
0
 public void Test()
 {
     MailBee.Mime.MailMessage email = Pop3ReceiveEmail();
     if (email != null)
     {
         Console.WriteLine("Subject: " + email.Subject);
         Console.WriteLine("**********************Headers:*****************************");
         foreach (MailBee.Mime.Header header in email.Headers)
         {
             Console.WriteLine(header.Name + ": " + header.Value);
         }
         Console.WriteLine("**********************Attachments:*****************************");
         foreach (MailBee.Mime.Attachment att in email.Attachments)
         {
             Console.WriteLine("attachment contentId: " + att.ContentID);
             Console.WriteLine("attachment ContentType: " + att.ContentType);
             Console.WriteLine("attachment Filename: " + att.Filename);
             Console.WriteLine("attachment FilenameOriginal: " + att.FilenameOriginal);
             Console.WriteLine("attachment IsInline: " + att.IsInline);
             Console.WriteLine("attachment AsMimePart: " + att.AsMimePart);
             Console.WriteLine("attachment ContentLocation: " + att.ContentLocation);
         }
         Console.WriteLine("*************************Body:**************************");
         Console.WriteLine(email.BodyHtmlText);
     }
 }
예제 #2
0
        public static void BuildMessage(string mailType, MailBee.Mime.MailMessage message, SmtpServer server)
        {
            switch (mailType)
            {
            case "126":

                message.From       = new EmailAddress("*****@*****.**");
                message.Subject    = "Test Send from 126 Mail";
                server.Name        = "smtp.126.com";
                server.AccountName = "frankfeng23";
                server.Password    = "******";
                break;

            case "qq":
                message.From       = new EmailAddress("*****@*****.**");
                message.Subject    = "Test Send from qq Mail";
                server.Name        = "smtp.qq.com";
                server.AccountName = "306836903";
                server.Password    = "******";
                break;

            case "gmail":
                message.From       = new EmailAddress("*****@*****.**");
                message.Subject    = "Test Send from gmail Mail";
                server.Name        = "smtp.gmail.com";
                server.AccountName = "fengchufu";
                server.Password    = "******";
                break;

            default:
                break;
            }
        }
예제 #3
0
        public static void Print(MailBee.Mime.MailMessage email, int index, string uid)
        {
            if (email != null)
            {
                string ss = $"Index:{index}, From:{email.From.Email}";
                //string ss = $"Index:{index}, Time:{email.DateReceived.ToShortDateString()}, Subject:{email.Subject}, From:{email.From.Email}";
                Console.WriteLine(ss);

                //ss +=  "\n";
                //System.IO.File.AppendAllText(@"subjects.txt", ss);
                Console.WriteLine($"Uid: {uid}");
                Console.WriteLine($"UidOnServer: {email.UidOnServer}");
                Console.WriteLine($"MessageId: {email.MessageID}");
                //Console.WriteLine("**********************Headers:*****************************");
                //foreach (MailBee.Mime.Header header in email.Headers)
                //{
                //    Console.WriteLine(header.Name + ": " + header.Value);
                //}
                //Console.WriteLine("**********************Attachments:*****************************");
                //foreach (MailBee.Mime.Attachment att in email.Attachments)
                //{
                //    Console.WriteLine("attachment contentId: " + att.ContentID);
                //    Console.WriteLine("attachment ContentType: " + att.ContentType);
                //    Console.WriteLine("attachment Filename: " + att.Filename);
                //    Console.WriteLine("attachment FilenameOriginal: " + att.FilenameOriginal);
                //    Console.WriteLine("attachment IsInline: " + att.IsInline);
                //    Console.WriteLine("attachment AsMimePart: " + att.AsMimePart);
                //    Console.WriteLine("attachment ContentLocation: " + att.ContentLocation);
                //}
                //Console.WriteLine("*************************Body:**************************");
                //Console.WriteLine(email.BodyHtmlText);
                Console.WriteLine("-----------------------------------------------------------");
            }
        }
예제 #4
0
        public static void SendMailWithTLS()
        {
            //System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
            string type = "tls";  //
            string body = "no ssl";

            MailBee.SmtpMail.Smtp       smtp       = new MailBee.SmtpMail.Smtp();
            MailBee.SmtpMail.SmtpServer smtpServer = new MailBee.SmtpMail.SmtpServer();
            switch (type)
            {
            case "ssl":
                smtpServer.SslMode     = MailBee.Security.SslStartupMode.OnConnect;
                smtpServer.SslProtocol = MailBee.Security.SecurityProtocol.Auto;
                smtpServer.Port        = 465;
                body = "with ssl";
                break;

            case "tls":
                smtpServer.SslMode = MailBee.Security.SslStartupMode.UseStartTlsIfSupported;
                //smtpServer.SslProtocol = MailBee.Security.SecurityProtocol.Tls12;
                smtpServer.Port = 587;
                body            = "with tls";
                break;

            default:
                smtpServer.Port = 25;
                break;
            }
            MailBee.Mime.MailMessage message = new MailBee.Mime.MailMessage();
            BuildMessage("qq", message, smtpServer);
            smtpServer.AuthMethods = MailBee.AuthenticationMethods.SaslLogin;
            smtp.SmtpServers.Add(smtpServer);
            //bool con = smtp.Connect();
            //bool login = smtp.Login();
            message.To.Add(new EmailAddress("*****@*****.**"));
            message.BodyHtmlText = body;

            smtp.Message      = message;
            smtp.Log.Enabled  = true;  //写日志
            smtp.Log.Filename = @"F:\DevProject\MailTestDemo\log.txt";
            smtp.Send();
        }
예제 #5
0
 public string SendMIMEMessage(string sessionKey, string[] To, string[] Cc, string[] Bcc, List<byte[]> attachments, ArrayList attachmentNames, string body, string subject)
 {
     try
     {
         MailBee.Mime.MailMessage message = new MailBee.Mime.MailMessage();
         message.Subject = subject;
         foreach (string to in To)
             message.To.Add(to);
         foreach (string cc in Cc)
             message.Cc.Add(cc);
         foreach (string bcc in Bcc)
             message.Bcc.Add(bcc);
         for (int i = 0; i < attachments.Count; i++)//byte[] file in attachments)
         {
             if (attachmentNames[i].ToString().Contains(".xml"))
                 message.Attachments.Add(attachments[i], attachmentNames[i].ToString(), null, "text/xml", null, NewAttachmentOptions.None, MailTransferEncoding.Base64);
             else
                 message.Attachments.Add(attachments[i], attachmentNames[i].ToString(), null, null, null, NewAttachmentOptions.None, MailTransferEncoding.Base64);
         }
         message.BodyHtmlText = "<pre>" + body + "</pre>";
         Stream stream = new MemoryStream();
         message.SaveMessage(stream);
         string finalMessage = StreamToString(stream);
         string result = client.SendMIMEMessage(sessionKey, finalMessage);
         string returnString = "test";
         using (XmlReader reader = XmlReader.Create(new StringReader(result)))
         {
             while (reader.Read())
             {
                 if (reader.NodeType == XmlNodeType.Element)
                 {
                     if (reader.Name == "NewMID")
                     {
                         while (reader.Value == "")
                             reader.Read();
                         returnString = reader.Value;
                     }
                 }
             }
         }
         return returnString;
     }
     catch (Exception ex)
     {
         throw new Exception("", ex);
     }
 }
        /// <summary>
        /// Converts MailBee mail message to .NET FX mail message.
        /// </summary>
        /// <param name="mailBeeMailMessage">MailBee mail message.</param>
        /// <returns>.NET FX mail message.</returns>
        private static System.Net.Mail.MailMessage ConvertToNetMailMessage(MailMessage mailBeeMailMessage)
        {
            var mailMessage = new System.Net.Mail.MailMessage
            {
                Sender  = new MailAddress(mailBeeMailMessage.From.AsString),
                Subject = mailBeeMailMessage.Subject,
                Body    =
                    mailBeeMailMessage.IsBodyAvail("text/html", false)
                                                ? mailBeeMailMessage.BodyHtmlText
                                                : mailBeeMailMessage.BodyPlainText,
                IsBodyHtml = mailBeeMailMessage.IsBodyAvail("text/html", false),
                From       = new MailAddress(mailBeeMailMessage.From.AsString),
            };

            foreach (EmailAddress emailAddress in mailBeeMailMessage.To)
            {
                mailMessage.To.Add(new MailAddress(emailAddress.AsString));
            }
            foreach (EmailAddress emailAddress in mailBeeMailMessage.Cc)
            {
                mailMessage.CC.Add(new MailAddress(emailAddress.AsString));
            }
            foreach (EmailAddress emailAddress in mailBeeMailMessage.Bcc)
            {
                mailMessage.Bcc.Add(new MailAddress(emailAddress.AsString));
            }
            switch (mailBeeMailMessage.Priority)
            {
            case MailPriority.Low:
            case MailPriority.Lowest:
                mailMessage.Priority = System.Net.Mail.MailPriority.Low;
                break;

            case MailPriority.None:
            case MailPriority.Normal:
                mailMessage.Priority = System.Net.Mail.MailPriority.Normal;
                break;

            case MailPriority.High:
            case MailPriority.Highest:
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                break;
            }
            foreach (Attachment mailBeeAttachment in mailBeeMailMessage.Attachments)
            {
                if ((!mailBeeAttachment.IsFile && !mailBeeAttachment.IsInline) && !mailBeeAttachment.IsMessageInside)
                {
                    continue;
                }

                var attachmentName = GetAttachmentName(mailBeeAttachment);

                var newAttachment = new System.Net.Mail.Attachment(
                    new MemoryStream(mailBeeAttachment.GetData()),
                    attachmentName,
                    mailBeeAttachment.ContentType);

                if (mailBeeAttachment.IsInline && !String.IsNullOrEmpty(mailBeeAttachment.ContentID))
                {
                    newAttachment.Name = mailBeeAttachment.ContentID;
                }
                mailMessage.Attachments.Add(newAttachment);
            }
            return(mailMessage);
        }
예제 #7
0
        /// <summary>
        /// Converts MailBee mail message to .NET FX mail message.
        /// </summary>
        /// <param name="mailBeeMailMessage">MailBee mail message.</param>
        /// <returns>.NET FX mail message.</returns>
        private System.Net.Mail.MailMessage ConvertToNetMailMessage(MailMessage mailBeeMailMessage)
        {
            var mailMessage = new System.Net.Mail.MailMessage
            {
                Sender  = new MailAddress(mailBeeMailMessage.From.AsString),
                Subject = mailBeeMailMessage.Subject,
                Body    =
                    mailBeeMailMessage.IsBodyAvail("text/html", false)
                                                ? mailBeeMailMessage.BodyHtmlText
                                                : mailBeeMailMessage.BodyPlainText,
                IsBodyHtml = mailBeeMailMessage.IsBodyAvail("text/html", false),
                From       = new MailAddress(mailBeeMailMessage.From.AsString),
            };

            foreach (var emailAddress in mailBeeMailMessage.To.Cast <EmailAddress>().Where(emailAddress => !mailMessage.To.TryAdd(emailAddress.AsString)))
            {
                _log.WarnFormat("To address \"{0}\" is not in a recognized format.", emailAddress.AsString);
            }
            foreach (var emailAddress in mailBeeMailMessage.Cc.Cast <EmailAddress>().Where(emailAddress => !mailMessage.CC.TryAdd(emailAddress.AsString)))
            {
                _log.WarnFormat("Cc address \"{0}\" is not in a recognized format.", emailAddress.AsString);
            }
            foreach (var emailAddress in mailBeeMailMessage.Bcc.Cast <EmailAddress>().Where(emailAddress => !mailMessage.Bcc.TryAdd(emailAddress.AsString)))
            {
                _log.WarnFormat("Bcc address \"{0}\" is not in a recognized format.", emailAddress.AsString);
            }
            switch (mailBeeMailMessage.Priority)
            {
            case MailPriority.Low:
            case MailPriority.Lowest:
                mailMessage.Priority = System.Net.Mail.MailPriority.Low;
                break;

            case MailPriority.None:
            case MailPriority.Normal:
                mailMessage.Priority = System.Net.Mail.MailPriority.Normal;
                break;

            case MailPriority.High:
            case MailPriority.Highest:
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                break;
            }
            foreach (Attachment mailBeeAttachment in mailBeeMailMessage.Attachments)
            {
                if ((!mailBeeAttachment.IsFile && !mailBeeAttachment.IsInline) && !mailBeeAttachment.IsMessageInside)
                {
                    continue;
                }

                var attachmentName = GetAttachmentName(mailBeeAttachment);

                var newAttachment = new System.Net.Mail.Attachment(
                    new MemoryStream(mailBeeAttachment.GetData()),
                    attachmentName,
                    mailBeeAttachment.ContentType);

                if (mailBeeAttachment.IsInline && !String.IsNullOrEmpty(mailBeeAttachment.ContentID))
                {
                    newAttachment.Name = mailBeeAttachment.ContentID;
                }
                mailMessage.Attachments.Add(newAttachment);
            }
            return(mailMessage);
        }
예제 #8
0
        private bool TryDeliverMessage(SentMailMessage message)
        {
            using (var mailClient = new Smtp())
            {
                try
                {
                    var senderAccount = FindMailAccountFor(message.From.Address);

                    if (senderAccount == null)
                    {
                        throw new ArgumentException("Could not deliver message - invalid account");
                    }

                    if (message.ReplyTo.Count() == 0 && !string.IsNullOrWhiteSpace(senderAccount.ReplyTo))
                    {
                        message.ReplyTo.Add(new MailAddress()
                        {
                            Address = senderAccount.ReplyTo
                        });
                    }

                    var server = mailClient.SmtpServers.Add(senderAccount.ServerAddress, senderAccount.ServerUsername, senderAccount.ServerPassword);
                    server.Port    = senderAccount.ServerPort;
                    server.Timeout = 60000;

                    var email = new MailBeeMessage()
                    {
                        Charset = "utf-8", ThrowExceptions = true
                    };

                    email.From = new MailBeeEmailAddress(senderAccount.SenderEmailAddress, message.From.DisplayName ?? senderAccount.SenderDisplayName);
                    message.To.ForEach(to => email.To.Add(to.Address, to.DisplayName));
                    message.ReplyTo.ForEach(to => email.ReplyTo.Add(to.Address, to.DisplayName));
                    message.CC.ForEach(cc => email.Cc.Add(cc.Address, cc.DisplayName));
                    message.BCC.ForEach(bcc => email.Bcc.Add(bcc.Address, bcc.DisplayName));

                    email.Subject       = message.Subject;
                    email.BodyPlainText = message.IsBodyHtml ? null : message.Body;
                    email.BodyHtmlText  = message.IsBodyHtml ? message.Body : null;

                    foreach (var attachment in message.Attachments)
                    {
                        if (attachment.Content != null)
                        {
                            email.Attachments.Add(attachment.Content, attachment.Name, string.Empty, attachment.ContentType, null, NewAttachmentOptions.None, MailTransferEncoding.None);
                        }
                        else if (!string.IsNullOrEmpty(attachment.Path))
                        {
                            email.Attachments.Add(attachment.Path, attachment.Name, string.Empty, attachment.ContentType, null, NewAttachmentOptions.None, MailTransferEncoding.None);
                        }
                    }

                    if (message.IsEncrypted)
                    {
                        email = new Smime().SignAndEncrypt(email, new Certificate(senderAccount.CertificateFilePath, CertFileType.Pfx, senderAccount.CertificatePassword), FindAllRecipientCertificatesFor(message));
                    }
                    else if (message.IsSigned)
                    {
                        email = new Smime().Sign(email, new Certificate(senderAccount.CertificateFilePath, CertFileType.Pfx, senderAccount.CertificatePassword));
                    }

                    email.EncodeAllHeaders(System.Text.Encoding.UTF8, HeaderEncodingOptions.None);

                    mailClient.Message = email;
                    mailClient.Send();

                    message.DeliveryStatus = DeliveryStatus.Sent;
                    message.SentOn         = DateTime.UtcNow;
                    return(true);
                }
                catch (Exception ex)
                {
                    message.FailedOn       = DateTime.UtcNow;
                    message.FailureCount  += 1;
                    message.FailureMessage = ex.ToString();
                    message.DeliveryStatus = (message.FailureCount < config.SuspendMailAfterAttempts) ? DeliveryStatus.Failed : DeliveryStatus.Suspended;
                    return(false);
                }
                finally
                {
                    db.SaveChanges();
                }
            }
        }