How to send email with Phpmailer with DKIM signature?

20,212

Solution 1

$DKIM_private is for your private key and $DKIM_identity, well I'm not sure, but it's optional, and you can find more info here: http://dkim.org/specs/draft-allman-dkim-base-01.html#anchor9. Here is some example code.

$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';

Hope that helps

Solution 2

You need to break up the DKIM-Signature header such that each property appears on a new line. The PHPMailer implementation of DKIM has some issues that must be corrected.

The $DKIM_identity value is optional. To understand the role of $DKIM_private, see the DKIM_Sign method.

Share:
20,212
Angolao
Author by

Angolao

Updated on July 05, 2022

Comments

  • Angolao
    Angolao almost 2 years

    I`m using PHPmailer to sent email.

    I installed postfix service and DKIM-Milter to generate the key.

    It works fine if i use command line to sent mail, and the mail is with DKIM signature displaying "signed-by:mydomain.com"

    Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email protected] designates 182.50.xxx.xxx as permitted sender) [email protected]; dkim=pass [email protected]
    
    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=
    

    But i want to use PHPmailer (5.1) to sent mail with DKIM signature supported, but returns this:

    Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email protected] designates 182.50.xxx.xxx as permitted sender) [email protected]; dkim=neutral (bad format) [email protected]
    
    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; [email protected];
        z=
        |
        |Subject:=20Testing=20email=20from=20phpmailer;
        bh=lC+16EvauA2HuJG03ArE6CtgLuY=;
        b=
    

    I checked the class.phpmailer.php file, and it has some DKIM options:

      public $DKIM_selector   = 'default';
    
      /**
       * Used with DKIM DNS Resource Record
       * optional, in format of email address '[email protected]'
       * @var string
       */
      public $DKIM_identity   = '';
    
      /**
       * Used with DKIM DNS Resource Record
       * optional, in format of email address '[email protected]'
       * @var string
       */
      public $DKIM_domain     = '';
    
      /**
       * Used with DKIM DNS Resource Record
       * optional, in format of email address '[email protected]'
       * @var string
       */
      public $DKIM_private    = '';
    

    How to configure this option? I know the public key and private key, but what`s is $DKIM_private and $DKIM_identity?