public bool SendEmailWithAttachments(string AWSAccessKey, string AWSSecretKey, MailAddress From, MailAddress[] To, String Subject, System.Net.Mail.Attachment[] Attachments, String Text = null, String Html = null, MailAddress ReplyTo = null, MailAddress[] CCAddresses = null, MailAddress[] BCCAddresses = null) { AlternateView plainView = null; if (Text != null) plainView = AlternateView.CreateAlternateViewFromString(Text, Encoding.UTF8, "text/plain"); AlternateView htmlView = null; if (Html != null) htmlView = AlternateView.CreateAlternateViewFromString(Html, Encoding.UTF8, "text/html"); MailMessage mailMessage = new MailMessage(); mailMessage.From = From; foreach (MailAddress toAdd in To ?? Enumerable.Empty<MailAddress>()) mailMessage.To.Add(toAdd); foreach (MailAddress toCC in CCAddresses ?? Enumerable.Empty<MailAddress>()) mailMessage.CC.Add(toCC); foreach (MailAddress toBcc in BCCAddresses ?? Enumerable.Empty<MailAddress>()) mailMessage.Bcc.Add(toBcc); mailMessage.Subject = Subject; mailMessage.SubjectEncoding = Encoding.UTF8; if (ReplyTo != null) { mailMessage.ReplyTo = ReplyTo; } if (Text != null) { mailMessage.AlternateViews.Add(plainView); } if (Html != null) { mailMessage.AlternateViews.Add(htmlView); } foreach (System.Net.Mail.Attachment a in Attachments ?? Enumerable.Empty<System.Net.Mail.Attachment>()) { mailMessage.Attachments.Add(a); } RawMessage rawMessage = new RawMessage(); using (MemoryStream memoryStream = ConvertMailMessageToMemoryStream(mailMessage)) { rawMessage.WithData(memoryStream); } SendRawEmailRequest request = new SendRawEmailRequest(); request.WithRawMessage(rawMessage); request.WithDestinations(To.Select(a => a.Address)); request.WithSource(From.Address); AmazonSimpleEmailService ses = AWSClientFactory.CreateAmazonSimpleEmailServiceClient(AWSAccessKey, AWSSecretKey); try { SendRawEmailResponse response = ses.SendRawEmail(request); SendRawEmailResult result = response.SendRawEmailResult; return true; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(string.Format("There was an error sending the e-mail: {0}", ex.Message)); return false; } }
//From E-mail address must be verified through Amazon /// <summary> /// Text Only for now, no attachments yet. Amazon SES is still in Beta /// </summary> /// <param name="AWSAccessKey">public key associated with our Amazon Account</param> /// <param name="AWSSecretKey">private key associated with our Amazon Account</param> /// <param name="From">Who is the e-mail from, this must be a verified e-mail address through Amazon</param> /// <param name="To">Who do you want to send the E-mail to, seperate multiple addresses with a comma</param> /// <param name="Subject">Subject of e-mail</param> /// <param name="Attachment">File Location of attachment. PDF's, text files and images supported, seperate multiple addresses with a comma</param> /// <param name="Text">Plain text for e-mail, can be null</param> /// <param name="Html">Html view for e-mail, can be null</param> /// <param name="ReplyTo ">Email address for replies, can be null</param> /// <param name="CCAddresses ">ArrayList of strings for CC'd addresses</param> /// <param name="BCCAddresses ">ArrayList of strings for BCC'd addresses</param> public bool SendEmailWithAttachments(string AWSAccessKey, string AWSSecretKey, String From, String To, String Subject, String Attachment, String Text = null, String Html = null, String ReplyTo = null, ArrayList CCAddresses = null, ArrayList BCCAddresses = null) { AlternateView plainView = null; if (Text != null) plainView = AlternateView.CreateAlternateViewFromString(Text, Encoding.UTF8, "text/plain"); AlternateView htmlView = null; if (Html != null) htmlView = AlternateView.CreateAlternateViewFromString(Html, Encoding.UTF8, "text/html"); MailMessage mailMessage = new MailMessage(); mailMessage.From = new MailAddress(From); List<String> toAddresses = To.Replace(", ", ",").Split(',').ToList(); foreach (String toAddress in toAddresses) { mailMessage.To.Add(new MailAddress(toAddress)); } if (CCAddresses != null) { foreach (String ccAddress in CCAddresses) { mailMessage.CC.Add(new MailAddress(ccAddress)); } } if (BCCAddresses != null) { foreach (String bccAddress in BCCAddresses) { mailMessage.Bcc.Add(new MailAddress(bccAddress)); } } mailMessage.Subject = Subject; mailMessage.SubjectEncoding = Encoding.UTF8; if (ReplyTo != null) { mailMessage.ReplyTo = new MailAddress(ReplyTo); } if (Text != null) { mailMessage.AlternateViews.Add(plainView); } if (Html != null) { mailMessage.AlternateViews.Add(htmlView); } // Attachment Fix //System.Net.Mail.Attachment a = new System.Net.Mail.Attachment(Attachment); //mailMessage.Attachments.Add(a); foreach (String attachment in Attachment.Replace(", ", ",").Split(',').ToList()) { System.Net.Mail.Attachment a = new System.Net.Mail.Attachment(attachment); mailMessage.Attachments.Add(a); } RawMessage rawMessage = new RawMessage(); using (MemoryStream memoryStream = ConvertMailMessageToMemoryStream(mailMessage)) { rawMessage.WithData(memoryStream); } SendRawEmailRequest request = new SendRawEmailRequest(); request.WithRawMessage(rawMessage); request.WithDestinations(toAddresses); request.WithSource(From); AmazonSimpleEmailService ses = AWSClientFactory.CreateAmazonSimpleEmailServiceClient(AWSAccessKey, AWSSecretKey); try { SendRawEmailResponse response = ses.SendRawEmail(request); SendRawEmailResult result = response.SendRawEmailResult; return true; } catch { return false; } }
/// <summary> /// <see cref="Send" /> this message. /// </summary> /// <returns> /// <see langword="true" /> if it succeeds, <see langword="false" /> if it fails. /// </returns> internal bool Send() { _email.MessageId = string.Empty; try { var mailMessage = new MailMessage { From = new MailAddress(_email.FromAddress) }; foreach (string toAddress in _email.ToAddressList) mailMessage.To.Add(new MailAddress(toAddress)); foreach (string ccAddress in _email.CcAddressList) mailMessage.CC.Add(new MailAddress(ccAddress)); foreach (string bccAddress in _email.BccAddressList) mailMessage.Bcc.Add(new MailAddress(bccAddress)); mailMessage.Subject = _email.MessageSubject; mailMessage.SubjectEncoding = Encoding.UTF8; mailMessage.AlternateViews.Add( _email.HTML ? AlternateView.CreateAlternateViewFromString(_email.MessageBody, Encoding.UTF8, "text/html") : AlternateView.CreateAlternateViewFromString(_email.MessageBody, Encoding.UTF8, "text/plain")); var attachment = new Attachment(_email.AttachmentFilePath) { ContentType = new ContentType("application/octet-stream") }; ContentDisposition disposition = attachment.ContentDisposition; disposition.DispositionType = "attachment"; disposition.CreationDate = File.GetCreationTime(_email.AttachmentFilePath); disposition.ModificationDate = File.GetLastWriteTime(_email.AttachmentFilePath); disposition.ReadDate = File.GetLastAccessTime(_email.AttachmentFilePath); mailMessage.Attachments.Add(attachment); var rawMessage = new RawMessage(); using (MemoryStream memoryStream = ConvertMailMessageToMemoryStream(mailMessage)) rawMessage.WithData(memoryStream); var request = new SendRawEmailRequest { RawMessage = rawMessage, Destinations = _email.Destination.ToAddresses, Source = _email.FromAddress }; using (var client = new Client(_email.Credentials)) { _email.MessageId = client.SendRawEmail(request); } return !_email.ErrorExists; } catch (AmazonSimpleEmailServiceException ex) { return _email.SetErrorMessage( string.Format( "AWS Simple Email Service Exception\n\nError Type: {0}\n" + "Error Code: {1}\nRequest Id: {2}\nStatus Code: {3}\n\n{4}", ex.ErrorType, ex.ErrorCode, ex.RequestId, ex.StatusCode, ex)); } catch (AmazonClientException ex) { return _email.SetErrorMessage(ex.ToString()); } catch (Exception ex) { return _email.SetErrorMessage(ex.ToString()); } }