У меня есть сервер, на котором выполняется почтовое программное обеспечение. Это программное обеспечение использует phpmailer. Если я отправлю электронное письмо с помощью этого программного обеспечения, у меня нет проблем, я получаю SPF=PASS
, а также DKIM=PASS
.dkim = softfail с почтой(), но не с phpmailer?
Однако, когда я пытаюсь использовать обычный PHP-файл, который просто использует mail()
, я получаю письмо с ошибкой dkim=softfail (fail, body has been altered) [email protected]
. Ниже приведены особенности.
Я проверил онлайн в течение нескольких часов, но все, что я нашел, было ссылкой на спецификации RFC, заявив, что эта проблема вызвана такими вещами, как «Линии длиной более 990 байт» или «Окончания окончательной строки» (оба из которых делают здесь не применяется, поскольку я использую chunk_split()
).
Что может вызвать эту проблему с DKIM в моем коде? Есть ли еще одна спецификация RFC, которую я пропускаю?
**PHP script I use:**
//build array with headers
$header = array();
$boundary = md5(uniqid(rand()));
$header[] = "MIME-Version: 1.0";
$header[] = "Content-Type: multipart/alternative; boundary = $boundary";
$header[] = "From: Me <[email protected]>";
// get html version
ob_start();
include('html.php');
$Html = ob_get_contents();
ob_end_clean();
// get TXT version
ob_start();
include('txt.php');
$Txt = ob_get_contents();
ob_end_clean();
// Build final message body
// TXT part of message
$body = "--$boundary\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\n";
$body .= chunk_split(base64_encode($Txt));
// HTML part of message
$body .= "--$boundary\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\n";
$body .= chunk_split(base64_encode($Html));
$body .= "--$boundary--";
// sent email
$isMailed = mail("[email protected]","=?UTF-8?B?".base64_encode($subject)."?=",$body, implode("\n", $header));
EDIT: чтобы помочь решить эту проблему, вот образец заголовок электронной почты, который я получаю с вышеприведенным сценарием:
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from localhost (mx1.example.com [127.0.0.1])
by mx1.example.com (Postfix) with ESMTP id 4E50FBF31F
for <[email protected]>; Tue, 16 Dec 2014 16:54:43 +0100 (CET)
X-Virus-Scanned: Debian amavisd-new at mx1.example.com
Authentication-Results: mx1.example.com (amavisd-new);
dkim=softfail (fail, body has been altered) [email protected]
Received: from mx1.example.com ([127.0.0.1])
by localhost (mx1.example.com [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id o8MXZhIlf1tF for <[email protected]>;
Tue, 16 Dec 2014 16:54:42 +0100 (CET)
Received: from example.com (example.com [123.23.45.67])
by mx1.example.com (Postfix) with SMTP id 92A21AF218
for <[email protected]>; Tue, 16 Dec 2014 16:54:41 +0100 (CET)
Received: from localhost (mailsvr [127.0.0.1])
by example.com (Postfix) with ESMTP id 895B51018227
for <[email protected]>; Tue, 16 Dec 2014 16:56:23 +0100 (CET)
X-Virus-Scanned: amavisd-new at example.com
Received: from example.com ([127.0.0.1])
by localhost (mailsvr.example.com [127.0.0.1]) (amavisd-new, port 10024)
with LMTP id gm+3YJEGgEc7 for <[email protected]>;
Tue, 16 Dec 2014 16:56:22 +0100 (CET)
Received: by example.com (Postfix, from userid 47)
id A973B317802E; Tue, 16 Dec 2014 16:56:20 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com;
s=default; t=1418745380;
bh=wL3reSbwXm4SPw5A8n9RooRKg+7j0rkM5+iBCFG51XI=;
h=To:Subject:MIME-Version:Content-Type:From:Message-Id:Date;
b=BALRnjP3rx8LcYUxvrLBSASiZyFgA5ckTvGHoKF4V+o8JOLtLTmpmPQS91ohHIwOq
UFRhv6qJl9ObvFWl0c6QyVthGjCz2+2vB6RkMXQxzJgwxPIe6X51iIEDxA4Y3EYs+x
0DxmjMTt5tNKNBrjvEtZiEolkfbua8cearxA/Q3M=
To: [email protected]
Subject: =?UTF-8?B?dGVzdA==?=
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary = 47eacbbcbff31a13d0894e4f9ac0450b
From: Me <[email protected]>
Message-Id: <[email protected]>
Date: Tue, 16 Dec 2014 16:56:20 +0100 (CET)
--47eacbbcbff31a13d0894e4f9ac0450b
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
dGVzdA==
--47eacbbcbff31a13d0894e4f9ac0450b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
PGh0bWw+PGhlYWQ+PC9oZWFkPg0KPGJvZHk+DQo8cD50ZXN0PC9wPg0KPC9ib2R5Pg0KPC9odG1s
Pg==
--47eacbbcbff31a13d0894e4f9ac0450b--
Этот код, очевидно, не выполняет подпись DKIM - так что это? – Synchro
Вы не должны создавать mime-сообщения вручную в любом случае. Используйте PHPMailer или Swiftmailer, который сделает большую часть вашего кода избыточным. –
@MarcB Да, может быть, правда. Однако здесь возникает вопрос, почему мой сценарий вызывает 'dkim = softfail'. Я просто протестировал простую «почту» («[email protected]», «test», «test»); 'и письмо приходит с помощью PASS. Поэтому в приведенном выше сценарии должно быть что-то, что-то вызывает softfail, поскольку функция PHP 'mail()' сама не создает проблему. Я предполагаю, что это имеет какое-то отношение к формату, точно так же, как указано в разных онлайн-ответах, за исключением того, что я не могу понять, что, следуя тем правилам RFC, которые были указаны (как упоминалось в моем сообщении). – koljanep