Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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
C# 一段时间后,电子邮件中的附件开始丢失_C#_Email Attachments - Fatal编程技术网

C# 一段时间后,电子邮件中的附件开始丢失

C# 一段时间后,电子邮件中的附件开始丢失,c#,email-attachments,C#,Email Attachments,我对电子邮件中的附件有问题。每隔几天,用户就在电子邮件中找不到预期的附件。这种情况似乎持续了大约10-20分钟,然后它自行更正,这意味着稍后的电子邮件将包含附件。我不确定这背后的原因是什么。这就是我的代码的样子 型号 public class EmailAttachment { public string FileName { get; set; } public byte[] FileContent { get; set; } } var emailAttachment=

我对电子邮件中的附件有问题。每隔几天,用户就在电子邮件中找不到预期的附件。这种情况似乎持续了大约10-20分钟,然后它自行更正,这意味着稍后的电子邮件将包含附件。我不确定这背后的原因是什么。这就是我的代码的样子

型号

public class EmailAttachment
{
    public string FileName { get; set; }
    public byte[] FileContent { get; set; }
} 
var emailAttachment= new EmailAttachment();
emailAttachment.FileContent = CreatePDFFile();
emailAttachment.FileName = "file.pdf";
EmailGeneratedCertificate(emailAttachment);
编码发送电子邮件的触发器

public class EmailAttachment
{
    public string FileName { get; set; }
    public byte[] FileContent { get; set; }
} 
var emailAttachment= new EmailAttachment();
emailAttachment.FileContent = CreatePDFFile();
emailAttachment.FileName = "file.pdf";
EmailGeneratedCertificate(emailAttachment);
电子邮件准备代码

public void EmailGeneratedCertificate(EmailAttachment file)
{
    //file.FileContent is a byte array  
    var ms = new MemoryStream(file.FileContent);
    ms.Position = 0;
    var contentType = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Application.Pdf);

    var from = "xx@x.com";
    var fromTargetName = "XXX";
    var recepient="xx2@x.com"
    var subject = "Attachment";
    var body="<strong>Please find attachment.</strong>"
    var attachment = new Attachment(ms, contentType);
    attachment.ContentDisposition.FileName = file.FileName;
    var attachments = new List<Attachment>();
    attachments.Add(attachment);
    _mailService.Send(recepient, null, subject, body, attachments);
}
public void EmailGeneratedCertificate(电子邮件附件文件)
{
//FileContent是一个字节数组
var ms=newmemoryStream(file.FileContent);
ms.Position=0;
var contentType=new System.Net.Mime.contentType(System.Net.Mime.MediaTypeNames.Application.Pdf);
变量from=”xx@x.com";
var fromTargetName=“XXX”;
var recepient=”xx2@x.com"
var subject=“附件”;
var body=“请查找附件。”
var附件=新附件(ms,contentType);
attachment.ContentDisposition.FileName=file.FileName;
var attachments=新列表();
附件。添加(附件);
_mailService.Send(recepient,null,subject,body,attachments);
}

我想指出的另一件事是,我有两个网站在不同的
应用程序池中运行
,两个网站都有相同的电子邮件发送代码,如上所述,当出现此问题时,这两个网站似乎同时发生10-15分钟,然后自行更正。请建议。

在您的问题中,您没有编写
createPdfile()
的所有代码,因为IMHO是导致这种奇怪行为的原因,所以我只能从您发布的代码中猜测

我看到两个主要问题:

  • 私有字节[]读取文件(字符串路径)
    :您正在接受任何异常,如果存在一些异常,它将返回一个空字节数组,因此没有附件
  • EmailGeneratedCertificate(EmailAttachment文件)
    中的
    MemoryStream
    :您没有处理流,这可能会导致一些意外行为

  • “经过一段时间(4-5天),用户在那里的电子邮件中找不到预期的附件。”-让他们更加努力。邮箱独立于您的电子邮件发送代码工作。对不起,我没有收到您的电子邮件。你能解释一下吗?我的代码有问题吗?电子邮件发送很好,只是附件有问题。可能是内存相关的问题?不确定。您绝对确定附件总是添加到电子邮件中吗?为了确保安全,您可以在发送电子邮件之前添加以下内容:mailMessage.Body+=“有”+mailMessage.Attachments.Count()+“此电子邮件的附件。”;你是说附件在4-5天后停止发送,在重新启动IE后再次开始发送?还是已经发送的电子邮件中的附件正在出现和消失?感谢您指出这些,我将在第一封邮件中添加catch块,并记录可能发生的任何异常。对于第二个问题,您能告诉我如何处理内存蒸汽吗?如果我在
    EmailGeneratedCertificate(EmailAttachment文件)
    中处置,我将不再收到email@AmmarKhan你应该在电子邮件发送后处理memorystream:将其放入USE语句中,并在邮件服务之后关闭。发送…如果你注意到我的电子邮件代码在单独的线程上运行,你还认为它会在发送电子邮件后关闭内存流吗?@AmmarKhan mhh我没有注意到。为什么不使用
    SmtpClient.SendAsync
    ?无论如何,要使用异步调用处理流,您应该重写代码的这一部分。最简单的方法可能是加入2种方法。您能更新我的电子邮件代码以解决必要的更改吗?