微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法通过电子邮件发送文件

如何解决无法通过电子邮件发送文件

我使用 rdlc 报告系统创建了一个报告查看器。但是问题来了,当我通过电子邮件发送这个文件时,我发现了一个错误。我的程序是这样的:-

首先,我创建了一个报告流程,它显示了我的“订单”数据库的所有信息。当我运行应用程序时,该信息将我显示为桌面上的一个文件系统。这个文件,我想通过电子邮件发送。但是当我尝试发送这个时,我发现了很多错误

这是我的代码:-


   public async Task<IActionResult> CheckOut(Order11 anorder)
   {

      //other code


         
                //report process



                string mimetype = "";
                int extension = 1;
                var path = $"{this._webHostEnvironment.WebrootPath}\\Reports\\Report2.rdlc";
                Dictionary<string,string> parameters = new Dictionary<string,string>();
                var products = _db.Order.ToList();
                LocalReport localReport = new LocalReport(path);
                localReport.AddDataSource("DataSet1",products);

                var result = localReport.Execute(RenderType.Pdf,extension,parameters,mimetype);

                 var s= File(result.MainStream,"application/pdf");
              
                

                //report process end




                //Email Sender start



                var email = anorder.Email;
                var message = new MimeMessage();
                message.From.Add(new MailBoxAddress("Ghatia Bazar","pri@gmail.com"));
                message.To.Add(new MailBoxAddress("pritom",email));
                message.Subject = "Order Details";
                message.Body = new TextPart("plain")
                {
                    Text = "Hi,Thanks For Order.",};
                //add attach
                MemoryStream memoryStream = new MemoryStream();
                BodyBuilder bb = new BodyBuilder();
                using (var wc = new WebClient())
                {
                   
                    bb.Attachments.Add("s",wc.DownloadData("path"));
                  

                }

                message.Body = bb.ToMessageBody();
                //end attach
                using (var client = new SmtpClient())
                {
                    client.Connect("smtp.gmail.com",587,false);
                    client.Authenticate("pri@gmail.com","MyPassword");
                    client.Send(message);
                    client.disconnect(true);
                }


                //Email sender end


//other code

当我使用它时,我也使用了 bb.Attachments.Add("s",result.MainStream); 而不是 bb.Attachments.Add("s",wc.DownloadData("path")); ,然后我发现了一封意外的电子邮件在这封电子邮件文件中,我发现了很多代码。所以现在 bb.Attachments.Add("s",wc.DownloadData("path")); 我正在使用这个过程来附加一个文件。但在这里我发现了一个不同的错误

这是我的输出:-

enter image description here

我将如何解决这个问题。我如何通过电子邮件发送我创建的文件。我还是初学者,请帮忙。

解决方法

从代码看来,您正在使用 AspNetCore.Reporting 库从 RDLC 文件生成报告。

此库的代码可在 GitHub 上获得,网址为 https://github.com/amh1979/AspNetCore.Reporting

此库中的LocalReport 类具有返回Execute 类实例的ReportResult 方法。

这两个类的代码位于 https://github.com/amh1979/AspNetCore.Reporting/blob/master/AspNetCore.Reporting/LocalReport.cs

ReportResult 类有一个属性 MainStream,它将报表的内容表示为字节数组。

现在,通过 BodyBuilder 附加到 MimeMessage 支持文件内容的各种输入,例如 Stream、byte[] 等。

有了这些知识,我认为您可以直接使用 ReportResult.MainStream 将文件附加到 BodyBuilder。

您可以按如下方式更改代码以使其正常工作。

var path = $"{this._webHostEnvironment.WebRootPath}\\Reports\\Report2.rdlc";
Dictionary<string,string> parameters = new Dictionary<string,string>();
var products = _db.Order.ToList();
LocalReport localReport = new LocalReport(path);
localReport.AddDataSource("DataSet1",products);

//Following line of code returns an instance of ReportResult class
var result = localReport.Execute(RenderType.Pdf,extension,parameters,mimetype);

var email = anOrder.Email;
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Ghatia Bazar","pri@gmail.com"));
message.To.Add(new MailboxAddress("pritom",email));
message.Subject = "Order Details";
message.Body = new TextPart("plain")
{
    Text = "Hi,Thanks For Order.",};
var bb = new BodyBuilder();

// Following line will attach the report as "MyFile.pdf".
// You can use filename of your choice.
bb.Attachments.Add("Myfile.pdf",result.MainStream);

message.Body = bb.ToMessageBody();

using (var client = new SmtpClient())
{
    client.Connect("smtp.gmail.com",587,false);
    client.Authenticate("pri@gmail.com","MyPassword");
    client.Send(message);
    client.Disconnect(true);
}

希望这能帮助您解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。