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); } }
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; } }
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("-----------------------------------------------------------"); } }
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(); }
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); }
/// <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); }
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(); } } }