4

我目前正在开发 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);

感谢您的任何帮助,您可以提供。

4

1 回答 1

0

@Boardy,

唯一引起我注意的是以下行:

Attachment attachment = new Attachment(fileStream, attachments[0].realFileName, MediaTypeNames.Application.Octet);

Attachment 构造函数的第二个参数应该是ContentType,而不是文件名。

 message.Attachments.Add(new Attachment(imageFile.InputStream, imageFile.ContentType, MediaTypeNames.Image.Jpeg));

有关更多信息,请点击此链接: C# 发送带有附件的电子邮件(图片)

干杯。

于 2016-01-15T02:51:40.117 回答