Как отправить письмо с Phpmailer с подписью DKIM? - PullRequest
3 голосов
/ 03 января 2012

Я использую PHPmailer для отправки электронной почты.

Я установил постфиксный сервис и DKIM-Milter для генерации ключа.

Работает нормально, если я использую командную строку для отправки почты, а почта с подписью DKIM с надписью «подписано: mydomain.com»

Authentication-Results: mx.google.com; spf=pass (google.com: domain of root@mydomain.com designates 182.50.xxx.xxx as permitted sender) smtp.mail=root@mydomain.com; dkim=pass header.i=@mydomain.com

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mydomain.com; s=default;
    t=1325531456; bh=+gZFhu4Id2AXb8UVbFLzDVVlChWGhvxvJUIdjdMLQsk=;
    h=To:Subject:Message-Id:Date:From;
    b=mH4GV8ayicc6UMn1uopCc9VJb5v2MiOKQpEtwJjckzoJ8ePhRKQIZI5KnzSdSoSP3
     BtmehOQhMn9kIR/TlL2dlSog2EkRNeAaWcmO1K3khtCZ7rkXHGJsDn9C6l49K0tJa2
     rplPOSI7wS8+3NCEiuc5sjZimPo4v9WuTECVqxkg=

Но я хочу использовать PHPmailer (5.1) для отправки почты с поддержкой подписи DKIM, но возвращает это:

Authentication-Results: mx.google.com; spf=pass (google.com: domain of info@mydomain.com designates 182.50.xxx.xxx as permitted sender) smtp.mail=info@mydomain.com; dkim=neutral (bad format) header.i=info@mydomain.com

DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=70; s=default;
    t=1325533594; c=relaxed/simple;
    h=From:To:Subject;
    d=mydomain.com; i=@mydomain.com;
    z=
    |
    |Subject:=20Testing=20email=20from=20phpmailer;
    bh=lC+16EvauA2HuJG03ArE6CtgLuY=;
    b=

Я проверил файл class.phpmailer.php, и у него есть несколько параметров DKIM:

  public $DKIM_selector   = 'default';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_identity   = '';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_domain     = '';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_private    = '';

Как настроить эту опцию? Я знаю открытый и закрытый ключи, но что такое $ DKIM_private и $ DKIM_identity?

Ответы [ 4 ]

8 голосов
/ 03 января 2012

$ DKIM_private для вашего личного ключа и $ DKIM_identity, ну, я не уверен, но это необязательно, и вы можете найти больше информации здесь: http://dkim.org/specs/draft-allman-dkim-base-01.html#anchor9. Вот пример кода.

$mail->DKIM_domain = 'mydomain.com';
$mail->DKIM_private = '/path/to/private_key';
$mail->DKIM_selector = 'default'; //this effects what you put in your DNS record
$mail->DKIM_passphrase = '1234567';

Надеюсь, что помогает

3 голосов
/ 05 января 2012

Вам нужно разбить заголовок DKIM-Signature так, чтобы каждое свойство отображалось в новой строке.Реализация PHPMailer в DKIM имеет некоторые проблемы, которые необходимо исправить.

Значение $DKIM_identity является необязательным.Чтобы понять роль $DKIM_private, см. Метод DKIM_Sign.

0 голосов
/ 08 февраля 2016

Я обнаружил, что в последней версии используется sha256 вместо sha1, поэтому существующий генератор DKIM (http://dkim.worxware.com/) не будет работать, если вы не зайдете в файл class.phpmailer.php и отредактируете все упоминания о sha256 обратно вsha1, это устраняет проблемы, связанные с тем, что верификаторы не могут использовать sha256 для открытого ключа (выдает ошибку)

0 голосов
/ 31 января 2016

Начните здесь

http://dkim.worxware.com/

Внизу - нажмите Продолжить ....

Это позволит вам сгенерировать закрытый / открытый ключ с инструкциями

Вкратце: - настройка отправки с использованием файла закрытого / открытого ключа для добавления заголовков dkim в заголовок сообщения электронной почты - изменение записи txt DNS для открытого ключа

...