2014-09-25 4 views
1

.Net 웹 사이트에서 사용할 Python 코드를 변환하려고합니다. 코드는 RFC822 형식으로 저장된 메시지를 검색하고 다시 사용하여 SMTP 서버에 메시지를 보냅니다 C에서 RFC822 파일을 보내는 방법 #

mail from: blah blah 
rcpt to: blah blah 
data 
<send the text from the RFC822 file here> 
. 

는 그래서 RFC822 파일의 더 분석이 필요하지 않습니다 (다행히!). 파이썬에서이 단순히 : 파일이 변수 MSG에 읽은

smtp = smtplib.SMTP(_SMTPSERVER) 
smtp.sendmail(_FROMADDR, recipient, msg) 

. C#에서이 작업을 수행하는 쉬운 방법이 있습니까?

내장 된 C# SMTP 개체는이 작업을 수행하는 방법을 제공하지 않거나 최소한 방법을 찾지 못했습니다. 이들은 주소, 제목 및 본문을 별도로 제공함으로써 MailMessage를 구축하는 원칙에 기반한 것으로 보입니다. SmtpClientSend(string, string, string, string) 메서드를 가지고 있지만, 다시 별도의 제목과 본문이 필요하므로 RFC822 형식의 메시지가 생성됩니다.

필요한 경우 메일을 보내기위한 자체 클래스를 작성할 수 있습니다. 오래 걸리지 않는 간단한 요구 사항입니다. 그러나 표준 라이브러리를 사용하는 방법이 있다면 내 코드보다 버그가 적을 것입니다.

답변

1

당신 말이 맞아요, 내장 된 물건은 이것을위한 해결책을 제공하지 않습니다.

제 조언은 TcpClient 및 StreamReader/StreamWriter를 사용하여 SMTP 서버와 상호 작용하는 코드를 작성하는 것입니다. 50 줄 이상의 코드가 필요하지 않습니다.

+0

당신은의 구성 가능성을 다시 작성해야하고 싶지 않아 SmptClient. OP가 인증, 암호화, 다른 서버 등을 사용하려면 구성을 읽는 코드를 사용해야합니다. – CodeCaster

+0

@CodeCaster 왜 안 되니? OP의 요구 사항은 SmtpClient가 설계 한 것에 적합하지 않으며 단일 SMPT 서버 (또는 소수)만을 지원하는 것처럼 보입니다. 수동 솔루션은 잘 수행해야합니다. SMTP 프로토콜은이 목적을 위해 간단합니다. – Polynomial

+0

고마워, 나는 내가 직접 그 일을 끝내고 있다고 생각했다. 저는 C++ SMTP 클래스를 사용하여 돌 시대에 다시 작성했습니다. C#에서 매우 신속하게 다시 처리 할 수 ​​있으므로 큰 문제는 아닙니다. 제안이 없으면 내일 받아 들일 것입니다. –

2

MimeKit을 사용하여 메시지 파일을 구문 분석 한 다음 MailKit을 사용하여 SMTP를 통해 보내는 것이 좋습니다. MailKit은 MimeKit을 기반으로하므로 잘 작동하며 MailKit의 SmtpClient는 System.Net.Mail의 구현보다 우수합니다. 메시지를 보내기

var message = MimeMessage.Load (fileName); 

이 몇 줄만큼 간단하다 : 메시지를 구문 분석

이하는 것만 큼 간단

using (var client = new SmtpClient()) { 
    client.Connect ("smtp.gmail.com", 465, true); 
    client.Authenticate ("username", "password"); 
    client.Send (message); 
    client.Disconnect (true); 
} 
+0

감사합니다. Jeffrey,하지만 RFC822 파일을 구문 분석 할 필요가 없습니다. 그냥 SMTP 서버에 소켓을 보내야합니다. TcpClient를 사용하여 파일을 보내는 간단한 클래스를 작성하는 데 약 한 시간이 걸렸습니다. 모든 예외 추적을 추가 할 때까지는 50 행의 다항식 추정치가 다소 낙관적 이었지만 여전히 빠른 작업이었습니다. –