当前位置: 首页 > 编程语言 > C#

使用Amazon-SES发送附件分享

时间:2023-04-11 02:06:56 C#

C#学习教程:使用Amazon-SES发送附件在阅读Amazon-SES现在支持发送附件后,我正在搜索C#示例但找不到它。我认为使用AWSSDKfor.NET和MimeKit是非常简单和干净的解决方案。您可以通过SESAPI(而非SMTP)发送带附件的电子邮件。您可以直接将MimeMessage写入MemoryStream,然后将其与SESSendRawEmail一起使用:usingAmazon.SimpleEmail;使用Amazon.SimpleEmail.Model;使用亚马逊;使用Amazon.Runtime;使用MimeKit;privatestaticBodyBuilderGetMessageBody(){varbody=newBodyBuilder(){HtmlBody=@"AmazonSESTestbody",TextBody="AmazonSESTestbody",};body.Attachments.Add(@"c:attachment.txt");返回身体;}privatestaticMimeMessageGetMessage(){varmessage=newMimeMessage();message.From.Add(newMailboxAddress("FooBar","foo@bar.com"));message.To.Add(newMailboxAddress(string.Empty,"foobar@example.com"));message.Subject="亚马逊SES测试";message.Body=GetMessageBody().ToMessageBody();回复信息;}privatestaticMemoryStreamGetMessageStream(){varstream=newMemoryStream();GetMessage().WriteTo(流);返回流;}privatevoidSendEmails(){varcredentals=newBasicAWSCredentials("","");使用(varclient=newAmazonSimpleEmailServiceClient(credentals,RegionEndpoint.EUWest1)){varsendRequest=newSendRawEmailRequest{RawMessage=newRawMessage(GetMessageStream())};尝试{varresponse=client.SendRawEmail(sendRequest);Console.WriteLine("邮件发送成功。");}catch(Exceptione){Console.WriteLine("邮件未发送。");Console.WriteLine("错误信息:"+e.Message);}}}publicBooleanSendRawEmail(Stringfrom,Stringto,Stringcc,StringSubject,Stringtext,Stringhtml,StringreplyTo,stringattachPath){AlternateViewplainView=AlternateView.CreateAlternateViewFromString(text,Encoding.UTF8,"text/plain");AlternateViewhtmlView=AlternateView.CreateAlternateViewFromString(html,Encoding.UTF8,"text/html");MailMessagemailMessage=newMailMessage();mailMessage.From=newMailAddress(来自);ListtoAddresses=to.Replace(",",",").Split(',').ToList();foreach(StringtoAddressintoAddresses){mailMessage.To.Add(newMailAddress(toAddress));}列表ccAddresses=cc.Replace(",",",").Split(',').Where(y=>y!="").ToList();foreach(StringccAddressinccAddresses){mailMessage.CC.Add(newMailAddress(ccAddress));}mailMessage.Subject=主题;mailMessage.SubjectEncoding=Encoding.UTF8;if(replyTo!=null){mailMessage.ReplyToList.Add(newMailAddress(replyTo));}if(text!=null){mailMessage.AlternateViews.Add(plainView);}if(html!=null){mailMessage.AlternateViews.Add(htmlView);}if(attachPath.Trim()!=""){if(System.IO.File.Exists(attachPath)){System.Net.Mail.AttachmentobjAttach=newSystem.Net.Mail.Attachment(attachPath);objAttach.ContentType=newContentType("application/octet-stream");System.Net.Mime.ContentDisposition处置=objAttach.ContentDisposition;disposition.DispositionType="附件";disposition.CreationDate=System.IO.File.GetCreationTime(attachPath);disposition.ModificationDate=System.IO.File.GetLastWriteTime(attachPath);显示position.ReadDate=System.IO.File.GetLastAccessTime(attachPath);mailMessage.Attachments.Add(objAttach);}}RawMessagerawMessage=newRawMessage();使用(MemoryStreammemoryStream=ConvertMailMessageToMemoryStream(mailMessage)){rawMessage.WithData(memoryStream);}SendRawEmailRequest请求=newSendRawEmailRequest();request.WithRawMessage(rawMessage);request.WithDestinations(toAddresses);请求.WithSource(来自);AmazonSimpleEmailServiceses=AWSClientFactory.CreateAmazonSimpleEmailServiceClient(ConfigurationManager.AppSettings.Get("AccessKeyId"),ConfigurationManager.AppSettings.Get("SecretKeyId"));尝试{SendRawEmailResponseresponse=ses.SendRawEmail(request);SendRawEmailResult结果=response.SendRawEmailResult;返回真;}catch(AmazonSimpleEmailServiceExceptionex){返回false;}}publicstaticMemoryStreamConvertMailMessageToMemoryStream(MailMessagemessage){Assemblyassembly=typeof(SmtpClient).Assembly;典型值emailWriterType=assembly.GetType("System.Net.Mail.MailWriter");MemoryStreamfileStream=newMemoryStream();ConstructorInfomailWriterContructor=mailWriterType.GetConstructor(BindingFlags.Instance|BindingFlags.NonPublic,null,new[]{typeof(Stream)},null);objectmailWriter=mailWriterContructor.Invoke(newobject[]{fileStream});MethodInfosendMethod=typeof(MailMessage).GetMethod("发送",BindingFlags.Instance|BindingFlags.NonPublic);sendMethod.Invoke(message,BindingFlags.Instance|BindingFlags.NonPublic,null,new[]{mailWriter,true},null);MethodInfocloseMethod=mailWriter.GetType().GetMethod("关闭",BindingFlags.Instance|BindingFlags.NonPublic);closeMethod.Invoke(mailWriter,BindingFlags.Instance|BindingFlags.NonPublic,null,newobject[]{},null);返回文件流;在这里找到更新:方法签名在.NET4.5中发生了变化,它打破了上面的内容:在.NET中。NET4.5beta使用System.Net.Mail.MailMessage作为MemoryStream您还可以设置IISSMTP以通过SES中继您需要安装并设置Stunnel然后您可以设置IISSMTP智能主机和一些其他选项,它将通过SES转发您的电子邮件。上述链接要点的说明:取自亚马逊文档并根据需要修改的说明。1.安装stunnel:[SMTP-TLS-打包纸]接收=127.0.0.1:2525客户=是connect=email-smtp.us-east-1.amazonaws.com:4652.配置IISSMTP这是一个使用MimeKit使用亚马逊的非常简单的现实;使用Amazon.SimpleEmail;使用Amazon.SimpleEmail.Model;使用MimeKit;使用System.IO;namespaceSendEmailWithAttachments{classProgram{staticvoidMain(string[]args){//如果不使用,请记住输入您的(AWSAccessKeyID,AWSSecretAccessKey)并且IAM用户使用分配给您的实例和您的RegionEndpoint的凭据使用(varclient=newAmazonSimpleEmailServiceClient("YourAWSAccessKeyID","YourAWSSecretAccessKey",RegionEndpoint.USEast1))使用(varmessageStream=newMemoryStream()){varmessage=newMimeMessage();varbuilder=newBodyBuilder(){TextBody="HelloWorld"};message.From.Add(newMailboxAddress("FROMADDRESS@TEST.COM"));message.To.Add(newMailboxAddress("TOADDRESS@TEST.COM"));message.Subject="你好世界";//我用的是stream方法,但是你不必。使用(FileStreamstream=File.Open(@"Attachment1.pdf",FileMode.Open))builder.Attachments.Add("Attachment1.pdf",stream);使用(FileStreamstream=File.Open(@"Attachment2.pdf",FileMode.Open))builder.Attachments.Add("Attachment2.pdf",stream);message.Body=builder.ToMessageBody();message.WriteTo(messageStream);varrequest=newSendRawEmailRequest(){RawMessage=newRawMessage(){Data=messageStream}};client.SendRawEmail(请求);我的存储库中有代码https://github.com/gianluis90/amazon-send-email我不确定这是否是您要找的,但这是我能够找到的唯一资源关于这个话题我也想更好地回答这个问题。http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/它解释了如何使用它,但它非常神秘,至少对我而言。那里有更好的指南吗?我也需要帮助,但到目前为止我发现您需要发送一个包含以base64编码的附件的多部分MIME消息。我认为您需要按照此链接上的说明进行操作。Amazon不允许您添加附件或其他更复杂的消息类型(iCalendar事件)。基本上,您需要通过字符串构造和操作来手动处理消息正文。目前,我在遗留系统上为iCalendar格式的电子邮件执行此操作。这很麻烦,但如果您阅读RFC2822,它会非常清楚地告诉您格式是什么。特别提示:祝你好运。我不知道是否有一个开放的库可以在C#中为您做这类事情。如果您能找到一个,那么请尝试使用它,因为由于处理RFC的复杂性,应该有血压升高和脱发的医疗通知。以上就是C#学习教程:使用Amazon-SES发送附件,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢