2013-03-07 4 views
4

В настоящее время я работаю над приложением 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); 

Спасибо за любую помощь, которую вы можете предоставить.

+0

Я смотрю, но, похоже, что-то связано с не-ОС 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

+0

@ RandomUs1r Спасибо, это не выглядит так, как будто это именно то, так же, как я не могу изменить расширение, поскольку содержимое полностью неверно. Я попытался установить тип содержимого в сообщении SO, которое вы связали ранее, но не имеет никакого значения. Очень странно – Boardy

+0

Хммм ... вы пробовали установить кодировку? http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.bodyencoding.aspx – RandomUs1r

ответ

0

@Boardy,

Единственное, что привлекло мое внимание следующую строку:

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

Второй параметр конструктора вложений должен быть ТипСодержимого, а не имя файла.

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

Для получения дополнительной информации по этой ссылке: C# Sending Email with attached file (image)

Приветствия.

Смежные вопросы