2011-03-22 1 views
0

System.Net.Mail.SmtpClient을 사용하여 원격 SMTP 서버를 통해 전자 메일을 보냅니다. 내가 보낸 메시지의 헤더를보고있을 때, 나는 그 메시지가 X 스팸으로부터 2.5 히트를받는 것을 본다. From 필드의 base64 인코딩을 어떻게 방지하고 NULL_IN_BODY 히트를 없앨 수 있습니까? 비록 그것이 스팸으로 표시되어 있지는 않지만, 나는 그것을 완벽하게하고 싶습니다. 이 문제와 관련된 정보를 찾을 수 없습니다 (실제로 문제가있는 경우).SmtpClient()를 통해 전송 된 메일의 X- 스팸 조회 감소

MIME-Version: 1.0 
From: Myself <[email protected]> 
To: [email protected] 
Date: 25 Mar 2011 15:20:23 +0100 
Subject: Test subject 
Content-Type: text/plain; charset=us-ascii 
X-Spam-Status: No, hits=0.5 required=5.0 
X-Spam-Report: 0.5 hits, 5.0 required; 
    * -0.5 ALL_TRUSTED   Passed through trusted hosts only via SMTP 
    * 1.0 NULL_IN_BODY   FULL: Message has NUL (ASCII 0) byte in message 
X-Virus-Scanned: by moam (http://www.moam.net/) 
X-Moam-Version: 0.95 
Content-Transfer-Encoding: 8bit 
X-MIME-Autoconverted: from quoted-printable to 8bit by mx02.example.com id p2PEKKNs014451 

Hello, sshow! 
Below is your login information 

Username: sshow 
Password: a8sJdfl 

Sent from http://me.myself.com 

편집 : 나는 분야에 대한 모든 인코딩을 제거하여, 가장 중요한 하나 FROM_EXCESS_BASE64에 대한 경고를 제거 할 수 있었다. 이전에이 필드에 수동으로 Encoding.UTF8을 설정했습니다.

body 문자열에서 모든 제어 문자를 제거하면 더 이상 경고가 발생하지 않습니다. 그러나이 또한 줄 바꿈을 제거합니다.

foreach (char c in body) 
{ 
    stringBuilder.Append(Char.IsControl(c) ? ' ' : c); 
} 

편집 :은 행 구분을 제외한 모든 제어 문자를 제거 할 때 경고를 반환! 해당하는 경우 이메일이나 소스 코드의 몸을 보지 않고

foreach (char c in body) 
{ 
    stringBuilder.Append(Char.IsControl(c) && c != '\r' && c != '\n' ? ' ' : c); 
} 

답변

1

, 그것은 확실히 말할 수는 없습니다 만, 나는 다음과 같은 가정 것 :

  • 당신은 base64로 헤더부터 인코딩 한 비록 그렇게 할 필요는 없지만. SpamAssassin은 이것을 무언가를 모호하게 만들려고 시도합니다. http://wiki.apache.org/spamassassin/Rules/FROM_EXCESS_BASE64
  • 이메일 본문에 바이너리 데이터 (특히 null 바이트)가 있습니다. 예를 들어 일반 영어 문자가 각각 2 바이트로 표시되므로 UTF-16 (UTF-32)으로 인코딩 된 텍스트를 전자 메일 본문에 쏟아 넣는 경우이 중 하나가 발생할 수 있습니다.

그래도 문제가 해결되지 않으면 전체 코드와 전체 메시지의 16 진수 덤프를 게시하십시오.

UPDATE :

Char.IsControl뿐만 아니라 CR 및 LF 문자를 제거 ('\ r에'와 '\ n'). 예 :

Char.IsControl(c) && c != '\r' && c != '\n' ? ' ' : c 
+0

이러한 문자는 From 헤더의'mailbox' 부분에 나타날 수 있습니다. – Anomie

+0

@Anomie : 좋은 지적입니다. 내 대답을 좀 더 명확하게 업데이트했습니다. –

+0

답장을 보내 주셔서 감사합니다. 내 편집 내용을 확인하십시오. – sshow