2013-03-07 5 views
4

현재 첨부 파일 데이터를 포함한 SMTP 트래픽을 수신하는 전자 메일 서버를 만들고 해당 전자 메일 주소로 MX 레코드를 찾아 전달하는 aC# 응용 프로그램에서 작업 중입니다. 받는 사람에게.다른 smtp 포트에 첨부 파일이있는 전자 메일 보내기

내가 이해하지 못하는 하나의 이상한 문제를 제외하면이 모든 것이 완벽하게 작동합니다.

이 문제는 Linux에서 Mono로 C# 프로그램을 실행하는 경우에만 영향을줍니다. Windows에서는 문제가 없습니다.

문제는 포트 26 (포트 25가 이미 사용 중임)에서 전자 메일 서버 프로그램을 실행하고있는 경우 파일을 보내는 Windows PC에 테스트 C# 프로그램이 있다는 것입니다. 그런 다음 첨부 파일 데이터를 임시 파일에 성공적으로 쓰고 첨부 파일을 다시 만들고 메시지와 함께 첨부 파일을 보냅니다. 전자 메일을 받으면 전자 메일 컨텐트는 더 이상 존재하지 않고 첨부 파일은 noname이라고하며 첨부 파일을 볼 경우 전자 메일 제목의 일부와 첨부 파일을 구성하는 기본 64 문자열이 있습니다.

그러나 프로그램을 포트 25에서 실행하도록 변경하면 모든 것이 정확히 같은 방식으로 수행됩니다.하지만 이번에는 전자 메일이 내 Gmail 계정에 도착하면 전자 메일은 메시지 본문과 완벽하게 일치합니다 올바른 이름과 형식으로 첨부하십시오. 왜 다른 포트에서 Linux에서 내 프로그램을 실행하면이 문제가 발생하는지 이해할 수 없습니다. 나는 일하는 것과 일하지 않는 것 사이의 헤더를 점검했고 모든 것이 잘된 것처럼 보입니다.

모노와 관련된 문제입니까? 또한 포트를 25 번으로 설정하여 MX 레코드에 보낼 때 smtp 클라이언트에 포트를 설정하려고 시도했지만 별다른 차이는 없습니다. 아래 첨부 파일을 보내는 방법입니다.

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); 

도움을 주셔서 감사합니다.

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

은 첨부 파일 생성자의 두 번째 매개 변수는 ContentType이이 아닌 파일 이름이어야합니다 :

+0

제가보기에는하지만, 비 Windows OS와 관련이있는 것으로 보입니다 ... 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-attach-to-gmail 수신 noname 첨부 파일은 다음과 같습니다. http://www.jquery.info/noname/ – RandomUs1r

+0

@ RandomUs1r 감사합니다. 콘텐츠가 완전히 잘못 되었기 때문에 확장 프로그램을 변경할 수 없습니다. 난 당신이 이전에 링크 된 게시물에 콘텐츠 유형을 설정했지만 어떤 차이를 만들지 시도했습니다. 그 아주 이상한 – Boardy

+0

음 ... 인코딩 설정을 시도 했습니까? http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.bodyencoding.aspx – RandomUs1r

답변

0

@Boardy,

내 관심을 끌었있는 유일한 방법은 다음 줄이었다. C# Sending Email with attached file (image)

건배 :

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

자세한 내용은이 링크를 따르십시오.

관련 문제