DKIM с настраиваемыми заголовками писем?

Я очень успешно использую PHPMailer для рассылки электронных писем SPF / DKIM с моего веб-сайта. Успешно, так как в его спам-рейтинге ушел практически в ноль.

Однако я хотел бы добавить к подписи настраиваемый почтовый заголовок, чтобы иметь некоторую достоверность ее значения.

  1. Можно ли это сделать?
  2. Можно ли это сделать с помощью PHPMailer?
  3. Если да, то как?

Иллюстрация:

Допустим, у меня есть настраиваемое поле X-app-originalSender.

Когда я смотрю на источник исходящего сообщения электронной почты, я вижу

Delivered-To: [email protected]
Received: by 10.10.10.10 with SMTP id v7csp230623wjf;
        Tue, 6 May 2014 05:20:04 -0700 (PDT)
X-Received: by 10.10.10.10 with SMTP id v2mr38890846oer.37.1399378803091;
        Tue, 06 May 2014 05:20:03 -0700 (PDT)
Return-Path: <[email protected]>
Received: from mail-oa0-x22e.gogol.com (mail-oa0-x22e.gogol.com [2607:f8b0:4003:c02::22e])
        by mx.gogol.com with ESMTPS id vj5si8402166obb.10.10.10.10.05.20.02
        for <[email protected]>
        (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Tue, 06 May 2014 05:20:03 -0700 (PDT)
Received-SPF: none (gogol.com: [email protected] does not designate permitted sender hosts) client-ip=2607:f8b0:4003:c02::22e;
Authentication-Results: mx.gogol.com;
       spf=neutral (gogol.com: [email protected] does not designate permitted sender hosts) [email protected];
       dkim=pass [email protected]
Received: by mail-oa0-x22e.gogol.com with SMTP id i4so9294020oah.19
        for <[email protected]>; Tue, 06 May 2014 05:20:02 -0700 (PDT)
X-gogol-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:delivered-to:to:subject:dkim-signature:date:from
         :reply-to:message-id:mime-version:content-type;
        bh=ObNkr4SNFALRke4Aa0VT3bZmEq19ZIWHnngz5uCPG3U=;
        b=hbiSE6cEr+FEAIGUCqsCfNOQq9SYsYZ9fa4lC333uWyUY9x6srMgwHeOa28IoKxD31
         76LnRKfqc3YZBqMFKJ37plvyVXdaRsPCwLdYrNNMxmvNVVb5siC8r6Frx6v2QCBPcPEQ
         U+c6Qn/Rl9dHYHD9GCoC346DWkC8CcAF/MG6oipVcf9kojwfuYR/UgzpjmVMKcueUpEy
         nHKKGmfVT9RcqHgPMsOj1/W8/k/drKRUk2QlzLH8anR6foeWqjNtyUmHYxo/Qc6eKoxh
         Zua23/rTAgb/1SF4yalyeaeTa9xWO07bHeDwgknvg7QuYBSjDt+7iIXngkZXVYaSNAEJ
         xZIw==
X-Gm-Message-State: ALoCoQmfamLXlJ4EXccj5awNP/G2qU/uIZcjuLJKrB+5YOVHQsc1ARYlMw6wxCDTCchbQnufkN4N
X-Received: by 10.10.10.10 with SMTP id my9mr1885484obb.61.1399378802595;
        Tue, 06 May 2014 05:20:02 -0700 (PDT)
X-Forwarded-To: [email protected]
X-Forwarded-For: [email protected] [email protected]
Delivered-To: [email protected]
Received: by 10.10.10.10 with SMTP id hd5csp216265obb;
        Tue, 6 May 2014 05:20:01 -0700 (PDT)
X-Received: by 10.10.10.10 with SMTP id a49mr10690110eei.46.1399378800211;
        Tue, 06 May 2014 05:20:00 -0700 (PDT)
Return-Path: <[email protected]>
Received: from rembrandt.net.de (rembrandt.net.de. [10.10.10.10])
        by mx.gogol.com with ESMTPS id n46si13234148eeo.10.10.10.10.05.19.59
        for <[email protected]>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Tue, 06 May 2014 05:20:00 -0700 (PDT)
Received-SPF: pass (gogol.com: domain of [email protected] designates 10.10.10.10 as permitted sender) client-ip=10.10.10.10;
Received: (qmail 29290 invoked by uid 10269); 6 May 2014 14:19:59 +0200
To: [email protected]
Subject: Whatever
X-app-originalSender: Roger Rabbit
X-PHP-Originating-Script: 10269:class.phpmailer.php
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=937; s=website;
  t=1399378799; c=relaxed/simple;
  h=From:To:Subject;
  d=website.com;
  z=From:=20"website.com=20Warning"=20<[email protected]>
  |To:[email protected]
  |Subject:=20Whatever;
  bh=Yvxg9fVS37EmFVuVWzUji3Wry5Q=;
  b=JmNeGJsvhhC5s/rTLfXPSBte2NfYCPLNiNrNi4/bbjcdKvPNt/LvySGOpD+4hIAxsjwGtknsz7CMDOhcmJLPK/FHge18q+Dw1j0chtRehIZUdEHKcHDU5n2X2/x+ja+EohtfNFwCfjm3Zyfjf+cDyvsKUrf8l6mtWqK9oWpjyrg=
Date: Tue, 6 May 2014 14:19:59 +0200
From: "website.com Warning" <[email protected]>
Reply-To: "website.com Warnung" <[email protected]>
Message-ID: <[email protected]>
X-Priority: 3
X-Mailer: website.com platform (https://website.com)
MIME-Version: 1.0
Content-Type: multipart/alternative;

Меня больше всего заинтриговала строка h=From:To:Subject;, и я предполагаю, что должен быть способ добавить в нее мое настраиваемое поле.

Как?

Характеристики DKIM

из http://dkim.org/specs/draft-allman-dkim-base-01.html#rfc.section.3.5

Подписанные поля заголовка (обычный текст, но см. Описание; ОБЯЗАТЕЛЬНО). Список> разделенных двоеточиями имен полей заголовков, которые идентифицируют поля заголовка, представленные алгоритму подписи. Поле ДОЛЖНО содержать полный список полей заголовка в порядке, представленном алгоритму подписи. Поле МОЖЕТ содержать имена полей заголовков, которые не существуют после подписи; несуществующие поля заголовка не участвуют в вычислении подписи (то есть они обрабатываются как нулевые входные данные, включая имя поля заголовка, разделительное двоеточие, значение поля заголовка и любой терминатор CRLF), и при проверке несуществующий заголовок поля ДОЛЖНЫ обрабатываться таким же образом. Поле НЕ ДОЛЖНО включать поле заголовка DKIM-Signature, которое создается или проверяется. Складывающийся пробел (FWS) МОЖЕТ быть включен по обе стороны от разделителя двоеточия. Имена полей заголовка ДОЛЖНЫ сравниваться с фактическими именами полей заголовка без учета регистра. ABNF: sig-h-tag = "h =" FWS hdr-name 0 (* FWS ":" * FWS hdr-name) hdr-name = field-name ИНФОРМАЦИОННОЕ ОБЪЯСНЕНИЕ: "Подписав" поля заголовка, которые фактически не существуют, подписывающая сторона может предотвратить вставку этих полей заголовка перед проверкой. Однако, поскольку отправитель не может знать, какие поля заголовка могут быть созданы в будущем, и что некоторые MUA могут представлять поля заголовка, встроенные в сообщение (например, как тип содержимого message / rfc822), безопасность этого решения является не всего. ИНФОРМАЦИОННОЕ ОБЪЯСНЕНИЕ: исключение имени поля заголовка и двоеточия, а также значения поля заголовка для несуществующих полей заголовка не позволяет злоумышленнику вставить фактическое поле заголовка с нулевым значением.


person Swiss Mister    schedule 06.05.2014    source источник


Ответы (1)


Вы правы, что в подпись DKIM можно включать произвольные заголовки, но PHPMailer не предоставляет средств для этого. В методе DKIM_Add происходит интересный момент, и вы можете видеть, что h=From:To:Subject; жестко запрограммирован. Вероятно, самый простой способ обойти это - создать подкласс PHPMailer и переписать эту функцию, чтобы включить в нее дополнительные заголовки.

Обновление: PHPMailer теперь поддерживает добавление дополнительных заголовков в подпись DKIM через свойство DKIM_extraHeaders, например:

$mail->DKIM_extraHeaders = ['List-Unsubscribe', 'List-Help'];
person Synchro    schedule 09.07.2014