Уменьшить количество попаданий X-Spam на почту, отправляемую через SmtpClient () - PullRequest
0 голосов
/ 22 марта 2011

Я использую System.Net.Mail.SmtpClient для отправки электронной почты через удаленный SMTP-сервер.Когда я просматриваю заголовки отправленного сообщения, я вижу, что сообщение получает 2,5 обращения от X-Spam.Как можно предотвратить кодирование 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);
}

1 Ответ

1 голос
/ 25 марта 2011

Не видя тела письма или исходного кода, невозможно сказать наверняка, но я бы предположил, что верно следующее:

  • У вас есть base64, закодированный заголовок From, дажехотя в этом не было необходимости.SpamAssassin считает это вероятной попыткой запутать что-либо: http://wiki.apache.org/spamassassin/Rules/FROM_EXCESS_BASE64
  • У вас есть двоичные данные (в частности, нулевой байт) в теле вашего письма.Это может произойти, например, если вы поместите кодированный в UTF-16 (UTF-32) текст в тело письма, поскольку обычные английские символы будут представлены в виде двух (четырех) байтов каждый, один (три) из которых равен нулю.

Если это не решит проблему, опубликуйте свой полный код и шестнадцатеричный дамп всего сообщения.

ОБНОВЛЕНИЕ:

Char.IsControl удаляет CR иLF символы ('\ r' и '\ n').Измените свой код, чтобы не удалять их, например:

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