我在.NET Core 2中开发了一项工作,该工作使用MailKit在特定的电子邮件中收集.xml的附件。代码如下:
public List<string> GetXmls()
{
// ...
// ...
// ...
for (int nEmail = 0; nEmail < exchange.Count; nEmail++)
{
try
{
var mensagem = exchange.GetMessage(nEmail);
foreach (MimePart attachment in mensagem.Attachments)
{
if (attachment.FileName.ToLower().EndsWith(".xml", StringComparison.Ordinal))
{
try
{
xmlPaths.Add(DownloadXml(attachment));
}
catch (Exception ex)
{
Log.Aviso(ex);
}
}
}
}
catch (Exception ex)
{
Log.Error(ex);
}
}
return xmlPaths;
}
public string DownloadXml(MimePart attachment)
{
var path = Path.Combine(@"", $"Attachments\\xml_{DateTime.Now.ToString(_formatoData)}.xml");
using (var memoryStream = new MemoryStream())
{
attachment.Content.DecodeTo(memoryStream);
using (var stream = File.Create(path))
{
using (var binaryWriter = new BinaryWriter(stream))
{
binaryWriter.Write(memoryStream.ToArray());
Log.Debug($"Attachment {attachment.FileName} - Downloaded with success");
}
}
}
return path;
}
该代码在我的计算机上正常运行,我发送了两封电子邮件,共77个xml,并且该代码下载了所有xml。但是,当我尝试在服务器上运行.exe时,作业仅下载了一些xml。我运行了几次,有时作业下载了20 xml,有时是25、27,这是断断续续的。
最奇怪的是,在我运行该工作的所有时间里,该日志打印了77次“成功下载”日志,并且没有引发任何异常。
我在5台计算机上进行了测试,其中2台正常工作(我的,安装了.NET Core SDK,而我朋友的PC,没有安装.NET Core SDK,都是Win 10 x64),其他3台都解决了此问题(1台PC Win7 x64和另外两个是Windows Server 2008 R2,所有这些都未安装.NET Core SDK。
我发布作业的方式是.net cli: dotnet发布-c版本-r win7-x64-自包含
抱歉,我的英语不好,巴西人在这里! :)