我正在为我的邮件添加附件,但它正在发送空附件

时间:2018-03-07 13:45:38

标签: c#

我正在为我的邮件添加附件,但它正在发送空附件。 我正在寻找快速解决方案,请回答这个问题。

我正在为我的邮件添加附件,但它正在发送空附件。 我正在寻找快速解决方案,请回答这个问题。

我的API代码 - >

        var UserId = User.Identity.GetUserId();
        UserId = UserId.ToString();

        if (!string.IsNullOrEmpty(UserId))
        {

            // Check if the request contains multipart/form-data.  
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            var provider = await Request.Content.ReadAsMultipartAsync<MemoryMultipartFormDataStreamProvider>(new MemoryMultipartFormDataStreamProvider());
            //access form data  
            NameValueCollection formData = provider.FormData;
            //access files  
            IList<HttpContent> files = provider.Files;
            List<string> fileNames = new List<string>();
            List<string> filePaths = new List<string>();
            List<Stream> inputs = new List<Stream>();
            //HttpContent file1 = files[0];
            foreach (HttpContent file1 in files)
            {
                var thisFileName = file1.Headers.ContentDisposition.FileName.Trim('\"');
                fileNames.Add(thisFileName);
                string filepath = String.Empty;

                Stream input = await file1.ReadAsStreamAsync();
                inputs.Add(input);
                string directoryName = String.Empty;
                string URL = String.Empty;
                string tempDocUrl = WebConfigurationManager.AppSettings["DocsUrl"];

                if (formData["ClientDocs"] != "ClientDocs")
                {
                    var path = HttpRuntime.AppDomainAppPath;
                    directoryName = HttpContext.Current.Server.MapPath("~/Documents/");
                    filepath = System.IO.Path.Combine(directoryName, thisFileName);
                    filePaths.Add(filepath);
                    //Deletion exists file  
                    if (File.Exists(filepath))
                    {
                        File.Delete(filepath);
                    }
                }

                using (var fileStream = new FileStream(filepath, FileMode.Create))
                {

                    await file1.CopyToAsync(fileStream);

                }
            }
            ContactModel contactModel = new ContactModel();
            contactModel.FileName = fileNames;
            contactModel.FilePath = filePaths;
            contactModel.ToEmail = formData["To"];
            contactModel.Message = formData["Message"];
            contactModel.Subject = formData["Subject"];
            contactModel.ContactId = Convert.ToInt64(formData["ContactId"]);
            contactModel.ContentStream = inputs;
            contactModel.ContactTypeId = 2;//Check Enums->ContactTypeId for more description
            bool status = await _ContactService.ContactByEmail(contactModel);

            HttpResponses.CreateResponsesMessage(HttpStatusCodeEnum.Ok.ToString("D"), Resource.EmailSent, responseMessage);
        }
        else
        {
            responseMessage = HttpResponses.CreateResponsesMessage(HttpStatusCodeEnum.UnAuthorized.ToString("D"), Resource.AuthorizationFail, responseMessage);
        }
        return xxx.CommonClass.HttpResponses.GetHttpResponseMessage(HttpStatusCode.OK, responseMessage);
    }

我的邮件代码 - &gt;

        bool status;

        if (contentStream != null && fileName != null)
        {
            var i = 0;

            foreach (var contentStrea in contentStream)
            {
                System.Net.Mail.Attachment attachment;
                attachment = new System.Net.Mail.Attachment(contentStrea, fileName[i].Trim());
                mailMessage.Attachments.Add(attachment);
                i++;
            }

        }
        mailMessage.From = new MailAddress(ConfigurationManager.AppSettings["SenderMailAddress"]);
        mailMessage.IsBodyHtml = true;
        status = await SMTPCredentials(mailMessage);
        return status;

    }

See email screenshot here

1 个答案:

答案 0 :(得分:1)

我不确定,但在添加附件之前尝试寻找流的开头。

contentStrea.Seek(0, System.IO.SeekOrigin.Begin);
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(contentStrea, fileName[i].Trim());