Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用内存流时,SMTP mail.send()C#.net核心API项目中出现获取对象引用未设置错误_C#_Asp.net Web Api_.net Core_Smtp_Memorystream - Fatal编程技术网

使用内存流时,SMTP mail.send()C#.net核心API项目中出现获取对象引用未设置错误

使用内存流时,SMTP mail.send()C#.net核心API项目中出现获取对象引用未设置错误,c#,asp.net-web-api,.net-core,smtp,memorystream,C#,Asp.net Web Api,.net Core,Smtp,Memorystream,我有一个.docx模板,其中定义了一些动态显示字符串,如下所示 {{FirstName}}, {{ContactNumber}}",{{EmailId}} 现在我需要阅读这个.docx文件,需要用它的等价文本替换上面的文本 需要将该文档作为附件发送给用户。这就是我想要达到的目标 到目前为止,我编写了这样的代码 string content = System.IO.File.ReadAllText(path); content.Replace("{{FirstName}

我有一个.docx模板,其中定义了一些动态显示字符串,如下所示

 {{FirstName}}, {{ContactNumber}}",{{EmailId}}
现在我需要阅读这个.docx文件,需要用它的等价文本替换上面的文本 需要将该文档作为附件发送给用户。这就是我想要达到的目标

到目前为止,我编写了这样的代码

 string content = System.IO.File.ReadAllText(path);
 content.Replace("{{FirstName}}", objUser.FirstName);
 content.Replace("{{ContactNumber}}", objUser.Contact);
 content.Replace("{{EmailId}}", objUser.EmailId);

 var stream = new MemoryStream();
 var writer = new StreamWriter(stream);

 writer.WriteLine(content);
 writer.Flush();

 stream.Position = 0;

 using (var client = new SmtpClient())
  {
      client.Host = "relay-hosting.secureserver.net";
      client.Port = 25;

      using (var emailMessage = new MailMessage())
      {
          System.Net.Mime.ContentType contentType = new 
          
  
System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Application.Pdf);
          var coverAttachment = new Attachment(stream, contentType);
          coverAttachment.ContentDisposition.FileName = "CoverLetter.pdf";
          emailMessage.Attachments.Add(coverAttachment);

         emailMessage.To.Add(new MailAddress(value.toemail));
                            emailMessage.CC.Add(new 
         MailAddress("My To Address"));
         emailMessage.From = new MailAddress(_configuration["Email:Email"]);
         emailMessage.Subject = value.subject;
         emailMessage.Body = message;
         emailMessage.IsBodyHtml = true;
         emailMessage.BodyEncoding = Encoding.UTF8;
         emailMessage.SubjectEncoding = Encoding.Default;
         emailMessage.Priority = MailPriority.High;
         emailMessage.ReplyToList.Add(new MailAddress(_configuration["Email:Email"]));
//在调用client.send()之前

我有一个类似的代码

client.SendCompleted += (s, e) =>
                            {
                                client.Dispose();
                                emailMessage.Dispose();
                                writer.Dispose();
                            };
这里有什么我做错的吗?

两个观察结果:

  • 如果您在“使用”块中创建了SmtpClient和MailMessage对象,它将自动调用这些对象上的Dispose方法。你不需要自己称呼他们
  • 异步电子邮件发送操作完成时发生SendCompleted事件。 您可能应该使用SendAsync()而不是Send()

  • 更多信息:

    Hi当我使用SendAsync()时,我遇到了超时错误。嘿,我尝试了Send()和SendAsync()(SendAsync()不带using块),效果很好。您可以检查附件大小,或者尝试使用其他SMTP服务器吗?对于SendAsynch UserToken,如果不适用,我可以将其作为NULL传递?此外,我也可以使用SendMailAsync进行此操作?System.Net.Internals.SocketExceptionFactory.ExtendedSocketException:'连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应'这就是我的情况getting@NidhinPaul-是的,我尝试使用NULL作为用户令牌。Send()或SendAsync()中有没有一个适合您?并且,您可以共享您正在使用的SendMailAsync的代码。