我目前正在开发 ac# 应用程序,我正在制作自己的电子邮件服务器,用于侦听包括附件数据在内的 SMTP 流量,然后找到 MX 记录电子邮件地址并将其转发给收件人。
除了一个我不明白的奇怪问题外,这一切都很好。
该问题仅影响在 Mono 下在 Linux 上运行 C# 程序,在 Windows 上一切正常。
问题是,如果我的电子邮件服务器程序在端口 26 上运行(端口 25 已在使用中),那么我的 Windows PC 上有一个用于发送文件的测试 c# 程序。然后我得到附件数据,成功地将附件写入临时文件,重新创建附件对象并随消息发送附件。收到电子邮件后,电子邮件内容不再存在并调用附件noname
,如果我查看附件,它包含电子邮件标题的一部分和构成附件的基本 64 字符串。
但是,如果我然后将程序更改为在端口 25 上运行,那么一切都会以完全相同的方式完成,但是这次当电子邮件到达我的 gmail 帐户时,电子邮件与邮件正文和附件完全一致正确的名称和格式。我不明白为什么在不同端口下的 linux 上运行我的程序会导致这个问题。我检查了工作和非工作之间的标题,一切似乎都很好。
这是单声道的问题吗?当我在 MX 记录上发送它时,我还尝试将 smtp 客户端的端口设置为端口 25,但没有任何不同。以下是我发送附件的方式。
FileStream fileStream = new FileStream(attachmentTempName, FileMode.Open, FileAccess.Read);
Attachment attachment = new Attachment(fileStream, attachments[0].realFileName, MediaTypeNames.Application.Octet);
message.Attachments.Add(attachment);
message.From = new MailAddress(emailInfo["EmailFrom"]);
message.To.Add(emailInfo["EmailTo"]);
message.Subject = emailInfo["Subject"];
if (emailInfo["Headers"] != "")
{
message.Headers.Add(getHeaders(emailInfo["Headers"]));
}
message.Body = emailInfo["Body"];
message.Body = "This is a test hardcoded";
if (emailInfo["EmailFormat"] == ManageEmail.EmailFormat.HTML.ToString())
{
message.IsBodyHtml = true;
}
else
{
message.IsBodyHtml = false;
}
SmtpClient smtp = new SmtpClient(mxRecords[0]);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = 25;
smtp.Send(message);
感谢您的任何帮助,您可以提供。