質問

私は使っている System.Net.Mail.SmtpClient リモートSMTPサーバーを介して電子メールを送信します。送信されたメッセージのヘッダーを見ているとき、メッセージがX-Spamから2.5ヒットになることがわかります。 Base64エンコードを防ぐにはどうすればよいですか From フィールド、そしてそれを取り除く方法 NULL_IN_BODY 打つ?スパムとはマークされていませんが、完璧であることを望んでいます。この問題に関する情報を見つけることができません(実際に問題である場合)。

MIME-Version: 1.0
From: Myself <no-reply@myself.com>
To: me@myself.com
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);
}
役に立ちましたか?

解決

電子メールやソースコードの本文を見なければ、確かに言うことはできませんが、以下が真実であると思います。

  • それを行う必要はありませんでしたが、Base64はFrom Headerをエンコードしています。 Spamassassinは、これが何かを難読化する試みの可能性が高いと考えています。 http://wiki.apache.org/spamassassin/rules/from_excess_base64
  • メールの本文には、バイナリデータ(特にヌルバイト)があります。これは、UTF-16(UTF-32)を電子メールの本文にエンコードしたテキストをダンプする場合に発生する可能性があります。これは、通常の英語の文字がそれぞれ2つのバイトとして表され、その1つ(3)がnullです。

それが問題を解決しない場合は、完全なコードとメッセージ全体の16進ダンプを投稿してください。

アップデート:

char.iscontrolは、crおよびlf文字も削除します( ' r'および ' n')。コードを変更して削除しないように変更します。

Char.IsControl(c) && c != '\r' && c != '\n' ? ' ' : c
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top