В настоящее время я работаю над приложением aC#, где я создаю свой собственный почтовый сервер, который прослушивает SMTP-трафик, включая данные вложения, а затем найдите запись MX и адрес электронной почты получателю.Отправка электронной почты с приложением на другом порту smtp
Это все работает отлично, за исключением одной странной проблемы, которую я не понимаю.
Эта проблема влияет только на запуск программы C# в Linux под Mono, все в порядке в Windows.
Проблема в том, что у меня есть программа почтового сервера, работающая на порте 26 (порт 25 уже используется). Затем у меня есть тестовая программа C# на моем ПК с Windows, которая отправляет файл. Затем я получаю данные вложения, которые успешно записывают вложение во временный файл, воссоздают объект вложения и отправляют вложение с сообщением. Когда электронное письмо получено, содержимое электронной почты больше не существует и вложение называется noname
, и если я просмотрю вложение, у него есть часть заголовков электронной почты и базовая 64-строка, которая составляет вложение.
Однако, если я изменил программу для работы на 25-м порту, все будет выполнено точно таким же образом, но на этот раз, когда письмо поступит в мою учетную запись gmail, письмо полностью в такте с телом сообщения и вложение с правильным именем и форматом. Я не понимаю, почему запуск моей программы на Linux под другим портом вызовет эту проблему. Я проверил заголовки между рабочими и нерабочими, и все выглядит нормально.
Это проблема с моно. Я также попробовал установить порт на порт 25 для клиента smtp, когда я отправляю его на запись MX, но не делаю иначе. Ниже приводится способ отправки приложения.
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);
Спасибо за любую помощь, которую вы можете предоставить.
Я смотрю, но, похоже, что-то связано с не-ОС Windows ... http://turadg.aleahmad.net/2007/10/psa-when-you-receive-noname- вложения/http://www.drslewis.org/grant/2008/01/25/gmail-noname-attachment-bug/, вот возможное решение: http://stackoverflow.com/questions/6657363/using-mail- mime-to-send-attachment-to-gmail-receive-noname-attachment, вот инструмент: http://www.jquery.info/noname/ – RandomUs1r
@ RandomUs1r Спасибо, это не выглядит так, как будто это именно то, так же, как я не могу изменить расширение, поскольку содержимое полностью неверно. Я попытался установить тип содержимого в сообщении SO, которое вы связали ранее, но не имеет никакого значения. Очень странно – Boardy
Хммм ... вы пробовали установить кодировку? http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.bodyencoding.aspx – RandomUs1r