Angolao
Angolao

Reputation: 992

How to send email with Phpmailer with DKIM signature?

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?

Upvotes: 3

Views: 22014

Answers (4)

madhermit
madhermit

Reputation: 367

$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

Upvotes: 9

The Defpom
The Defpom

Reputation: 1

I found that the latest version uses sha256 instead of sha1 so the existing DKIM generator (http://dkim.worxware.com/) doesn't work unless you go into the class.phpmailer.php file and edit all the mentions of sha256 back to sha1, doing this fixes issues with verifiers not being able to use sha256 for the public key (giving an error)

Upvotes: 0

Aveesh
Aveesh

Reputation: 65

Start here

http://dkim.worxware.com/

At the bottom - click Continue....

It will alow you to generate private/public key with instructions

In brief: - setup to send using the private/public key file to add dkim headers in email header - modify DNS txt record for the public key

Upvotes: 0

N Rohler
N Rohler

Reputation: 4615

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.

Upvotes: 3

Related Questions