2012-05-08 4 views
0

Я запускаю виртуальную машину под AWS EC2, это Linux под ключ, который AFAIK основан на Ubuntu/Debian.phpMailer DKIM Вход для Amazon SES

У меня есть веб-сайт, который работает на Wordpress, и у него есть абонентская база Newsletter около 10.000 человек, поэтому я хочу использовать SAS Amazon для отправки электронной почты, дешевой и хорошей скорости доставки.

Проблема в том, что у меня есть DKIM. Я пишу e-mail самостоятельно ... поэтому я использую плагин Wordpress, который основан на phpMailer.

Плагин отправляет электронное письмо правильно, мои записи SPF в порядке, Amazon SES работает отлично, только проблема DKIM SIGN - сообщения электронной почты не правильно подписаны.

Я застрял в точке, где плагин пытается сделать openssl_pkey_get_private - он должен что-то вернуть, но ничего не возвращает. Он также выдает ошибку на openssl_error_string() объекта, как показано ниже:

error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt 

Эта ошибка не остановить сценарий, я должен был вырыть, чтобы найти его.

Ну, сценарий продолжается, поскольку он пытается открыть openssl_sign с пустым privKey.

В результате получилось электронное письмо, которое не подтверждает DKIM. Ниже заголовка DKIM немного из моего почтового ящика Gmail:

DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=233; s=ses; 
    t=1336494976; c=relaxed/simple; 
    h=From:To:Subject; 
    d=joaodedeus.com.br; 
    z=From:=20=3D?UTF-8?Q?Casa_Dom_In=3DC3=3DA1cio_de_Loyola?=3D=20<[email protected]> 
    |To:[email protected] 
    |Subject:=20Test=20message=20from=20your=20WordPress=20blog; 
    bh=Z+aAYGyi+5Sk1vIJcjjdy28rCuQ=; 
    b= 

Вот что http://www.brandonchecketts.com/emailtest.php говорит об этом электронной почты в DKIM Вход:

result = fail 
Details: OpenSSL error: data too small for key size 

Message contains this DKIM Signature: 
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=270; s=ses; 
    t=1336494983; c=relaxed/simple; 
    h=From:To:Subject; 
    d=joaodedeus.com.br; 
    z=From:=20=3D?UTF-8?Q?Casa_Dom_In=3DC3=3DA1cio_de_Loyola?=3D=20 
    |To:[email protected] 
    |Subject:=20Test=20message=20from=20your=20WordPress=20blog; 
    bh=LVAqBtz26jyffwhHPhhXdLQOLhA=; 
    b= 

Signature Information: 
v= Version:   1 
a= Algorithm:  rsa-sha1 
c= Method:   relaxed/simple 
d= Domain:   joaodedeus.com.br 
s= Selector:  ses 
q= Protocol:  dns/txt 
bh=     LVAqBtz26jyffwhHPhhXdLQOLhA= 
h= Signed Headers: From:To:Subject 
b= Data: 

**Public Key DNS Lookup** 
Building DNS Query for ses._domainkey.joaodedeus.com.br 
Retrieved this publickey from DNS: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYCkhM+6KDL5ndu4uhaP+jBp1BYBVN8Z8/BnXJ7JFc/HXcqW9Emt1vgmlcVqzBcHLFLk6GRRMbm4RIgOV1TCkr41ZTB8UYCjmUB6qqSY88hCdVIBQmTHgxq2DWhzlWiiOlqzeIQuMiMc0lgEaO8Zq3+d5gntPZXoxmTPQH32zA7wIDAQAB 

Вот что функция PHPMailer DKIM_Sign пытается сделать:

public function DKIM_Sign($s) { 
    $privKeyStr = file_get_contents($this->DKIM_private); 
    if ($this->DKIM_passphrase!='') { 
     $privKey = openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase); 
    } else { 
     $privKey = $privKeyStr; 
    } 
    $privKey = $privKeyStr; 
    if (openssl_sign($s, $signature, $privKey)) { 
     return base64_encode($signature); 
    } 
    } 

Проблема: openssl_pkey_get_private ничего не возвращает. Затем функция openssl_sign пытается подписать с EMPTY $ privKey.

$ privKeyStr правильно считывает ключ (file_get_contents), если я его повторяю, его содержимое совпадает с содержимым ключа.

$ this-> DKIM_passphrase также верный, j0 @ 0d3deus5.

Вот как я генерироваться ключи, следуя инструкции плагина Wordpress Amazon SES DKIM Мейлера:

openssl genrsa -des3 -passout pass:change-me -out .htkeyprivate 1024 && openssl rsa -in .htkeyprivate -passin pass:change-me -pubout -out .htkeypublic 

Конечно я изменил пароль: переключающий меня к правильной ключевой фразы, j0 @ 0d3deus5.

Я не могу обойтись без DKIM. Похоже, что hotmail сильно зависит от него.

Вот пример из моей учетной записи hotmail -> обратите внимание, что она идет непосредственно в папку нежелательной почты из-за ошибки DKIM.

x-store-info:4r51+eLowCe79NzwdU2kRyU+pBy2R9QCQ1WNUtV+VDcgEpN5KOTd9UyMPxTZoGJzS/h26zeEkCEVmH2zMg90yYxKot4DO0sKOsk98MBHLTNpOuzjxN5a42AR5Kz/5hEhx7XveDgnXqY= 
Authentication-Results: hotmail.com; sender-id=pass (sender IP is 199.255.192.147) [email protected]; dkim=permerror header.d=joaodedeus.com.br; x-hmca=pass 
X-SID-PRA: [email protected] 
X-DKIM-Result: PermError 
X-Message-Status: n:0:n 
X-SID-Result: Pass 
X-AUTH-Result: PASS 
X-Message-Delivery: Vj0xLjE7dXM9MDtsPTA7YT0wO0Q9MjtHRD0yO1NDTD00 
X-Message-Info: 11chDOWqoTkwLXPc6a+BBmU8PZ8Fa4uSQFuX56QoKCDSXsl9i7U4MyfUnfj2m3DtVW2PyTXMqyT/fwR9UtNuG4HNxTPmpoMwQBL+DemPeAzSpRs8zDKsN3uVpfPKiw+g1EW50e42Qd0= 
Received: from a192-147.smtp-out.amazonses.com ([199.255.192.147]) by BAY0-MC4-F33.Bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4900); 
    Tue, 8 May 2012 10:26:29 -0700 
X-PHPMAILER-DKIM: phpmailer.anatta.com 
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=233; s=ses; 
    t=1336497986; c=relaxed/simple; 
    h=From:To:Subject; 
    d=joaodedeus.com.br; 
    z=From:=20=3D?UTF-8?Q?Casa_Dom_In=3DC3=3DA1cio_de_Loyola?=3D=20<novidad[email protected]> 
    |To:[email protected] 
    |Subject:=20Test=20message=20from=20your=20WordPress=20blog; 
    bh=X6QtcRzw7+F7llznB77GikLQnko=; 
    b= 

Любые помощь приветствуются.

С наилучшими пожеланиями и извините за мой английский.

+0

есть вопрос здесь? – TheOx

+0

Извините TheOx, я испортил, когда писал вопрос. – ddutra

ответ

0

я получил, что работать с этим плагином:

http://wordpress.org/extend/plugins/amazon-ses-and-dkim-mailer/

Не забудьте предоставить права доступа к файлу закрытого ключа. Он не должен быть ниже корневого каталога.

Howerver, я все еще не могу подписать HTML-письма. Работая над этим сейчас!

Edit:

Получили DKIM право путем обеспечения все содержимое было corretly закодирован. Это помогло: Why Does DOM Change Encoding?

0

Я заметил, что если вы отправляете с помощью SMTP API, DKIM действителен, но с использованием REST API DKIM терпит неудачу.

Это странно, так как я использую SendRawEmail действие, чтобы отправить содержимое из GetSentMIMEMessage

Любое предложение приветствуется

Смежные вопросы