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); }
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); }
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); }
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)); } }