public async Task <EmailSendResult> SendEmailAsync(EmailRequest emailRequest)
        {
            var result = new EmailSendResult()
            {
                Success      = true,
                EmailRequest = emailRequest
            };

            try
            {
                await _smtpClient.SendMailAsync(GetMailMessage(emailRequest));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                result.Success      = false;
                result.ErrorMessage = e.Message;
                result.Exception    = e;
            }
            finally
            {
                result.TimeSent = DateTime.UtcNow;
            }

            return(result);
        }
Example #2
0
        public static EmailSendResult Send(EmailSendModel send)
        {
            var result = new EmailSendResult()
            {
                IsSuccessful = false
            };

            var appSettings = ConfigurationManager.AppSettings;
            var smtpHost    = string.IsNullOrEmpty(appSettings["SmtpHost"]) ? string.Empty : appSettings["SmtpHost"];
            var smtpPort    = string.IsNullOrEmpty(appSettings["SmtpPort"]) ? 25 : Convert.ToInt32(appSettings["SmtpPort"]);
            var account     = string.IsNullOrEmpty(appSettings["EmailAccount"]) ? string.Empty : appSettings["EmailAccount"];
            var password    = string.IsNullOrEmpty(appSettings["EmailPw"]) ? string.Empty : appSettings["EmailPw"];
            //简单邮件传输协议类
            SmtpClient client = new SmtpClient();

            client.Host = smtpHost; //邮件服务器
            client.Port = smtpPort; //smtp主机上的端口号,默认是25.
            client.UseDefaultCredentials = false;
            //if (!string.IsNullOrEmpty(password))
            //{
            //邮件发送方式:通过网络发送到SMTP服务器
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //凭证,发件人登录邮箱的用户名和密码
            client.Credentials = new NetworkCredential(account, password);
            //}
            client.EnableSsl = false;
            //电子邮件信息类
            MailAddress fromAddress = new MailAddress(account, "QRQC System");         //发件人Email,在邮箱是这样显示的,[发件人:小明<*****@*****.**>;]
            MailAddress toAddress   = new MailAddress(send.MailAddress, string.Empty); //收件人Email,在邮箱是这样显示的, [收件人:小红<*****@*****.**>;]
            MailMessage mailMessage = new MailMessage(fromAddress, toAddress);         //创建一个电子邮件类

            mailMessage.Subject = send.MailTitle;
            //string filePath = Server.MapPath("/index.html");//邮件的内容可以是一个html文本.
            //System.IO.StreamReader read = new System.IO.StreamReader(filePath, System.Text.Encoding.GetEncoding("GB2312"));
            //string mailBody = read.ReadToEnd();
            //read.Close();
            mailMessage.Body = send.MailContent;             //可为html格式文本
            //mailMessage.Body = "邮件的内容";//可为html格式文本
            mailMessage.SubjectEncoding = Encoding.UTF8;     //邮件主题编码
            mailMessage.BodyEncoding    = Encoding.UTF8;     //邮件内容编码
            mailMessage.IsBodyHtml      = true;              //邮件内容是否为html格式
            mailMessage.Priority        = MailPriority.High; //邮件的优先级,有三个值:高(在邮件主题前有一个红色感叹号,表示紧急),低(在邮件主题前有一个蓝色向下箭头,表示缓慢),正常(无显示).
            try
            {
                client.Send(mailMessage);//发送邮件
                result.IsSuccessful = true;
                //client.SendAsync(mailMessage, "ojb");异步方法发送邮件,不会阻塞线程.
            }
            catch (Exception ex)
            {
                result.Message          = ex.Message;
                result.ExceptionMessage = ex.ToString();
            }
            return(result);
        }
Example #3
0
        public static EmailSendResult SendToSystemAdmin(EmailSendModel send)
        {
            var result = new EmailSendResult()
            {
                IsSuccessful = false
            };
            var appSettings = ConfigurationManager.AppSettings;

            send.MailAddress = string.IsNullOrEmpty(appSettings["SystemAdminEmail"]) ? string.Empty : appSettings["SystemAdminEmail"];
            if (string.IsNullOrEmpty(send.MailAddress))
            {
                result.Message = "please config the System Admin Email";
                return(result);
            }
            result = Send(send);
            return(result);
        }
Example #4
0
 private void AssertEmailResult(EmailSendResult result)
 {
     Assert.IsTrue(result.Sent.Contains(PartnerEmail));
     Assert.IsTrue(result.Sent.Contains(MyEmail));
     Assert.IsTrue(!result.NotSent.Any());
 }
        /// <summary>
        /// 전자우편을 전송합니다.
        /// </summary>
        /// <param name="to">[필수] 받는 사람 전자우편주소</param>
        /// <param name="cc">참조 전자우편주소</param>
        /// <param name="bcc">숨은 참조 전자우편주소</param>
        /// <param name="subject">[필수] 제목</param>
        /// <param name="body">[필수] 내용</param>
        /// <param name="useHtmlBody">내용 Html 사용여부; 기본값: true</param>
        /// <param name="cancellationToken">취소 토큰; 기본값 취소토큰</param>
        /// <returns>결과</returns>
        public async Task <EmailSendResult> SendAsync(
            IList <EmailAddressInfo> to,
            IList <EmailAddressInfo> cc,
            IList <EmailAddressInfo> bcc,
            string subject,
            string body,
            bool useHtmlBody = true,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                if (String.IsNullOrWhiteSpace(options.ApiKey))
                {
                    throw new ArgumentException(nameof(options.ApiKey));
                }

                if (options.From == null || String.IsNullOrWhiteSpace(options.From.ToString()))
                {
                    throw new ArgumentException(nameof(options.From));
                }

                if (to.Count == 0)
                {
                    throw new ArgumentException(nameof(to));
                }

                if (String.IsNullOrWhiteSpace(subject))
                {
                    throw new ArgumentException(nameof(subject));
                }

                if (String.IsNullOrWhiteSpace(body))
                {
                    throw new ArgumentException(nameof(body));
                }

                var client = new SendGridClient(options.ApiKey);

                var message = new SendGridMessage()
                {
                    From             = options.From.ToEmailAddress(),
                    Subject          = subject,
                    HtmlContent      = useHtmlBody ? body : null,
                    PlainTextContent = useHtmlBody ? null : body,
                };

                foreach (var toEmailAddressInfo in to)
                {
                    message.AddTo(toEmailAddressInfo.ToEmailAddress());
                }

                if (cc.Count > 0)
                {
                    foreach (var ccEmailAddressInfo in cc)
                    {
                        message.AddCc(ccEmailAddressInfo.ToEmailAddress());
                    }
                }

                if (bcc.Count > 0)
                {
                    foreach (var bccEmailAddressInfo in bcc)
                    {
                        message.AddBcc(bccEmailAddressInfo.ToEmailAddress());
                    }
                }

                var response = await client.SendEmailAsync(message, cancellationToken);

                if (IsSuccessResponseState(response.StatusCode))
                {
                    return(EmailSendResult.Succeed);
                }
                else
                {
                    return(EmailSendResult.Fail($"{response.StatusCode}", "Could not send a mail within SendGrid."));
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, ex.Message);

                return(EmailSendResult.Fail($"{HttpStatusCode.InternalServerError}", ex.Message));
            }
        }