10

SPF、DKIM、およびリバース DNS が構成されたメール サーバーが正常に動作しています。次のようなものを使用して、Outlook.com に電子メールを送信できます。

echo "This is only a test" | mail username@outlook.com

同じサーバーを使用して PHP 経由で電子メールを送信しようとすると、問題が発生します。

$header .= "Return-Path: Some User <mailsender@mydomain.com>\r\n";
$header .= "From: Some User <mailsender@mydomain.com>\r\n";
$header .= "Content-Type: text/plain; charset=iso-8859-1\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "User-Agent: Some User Mail Sender\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n";

mail("usernama@outlook.com","My title", "Message body", $header);

appmaildev.com を使用してメッセージを確認しようとしましたが、レポートには次のように記載されています。

DKIM result: fail (wrong body hash: <*** body hash ***>)

このエラーがあっても、Outlook.com は DKIM 検証に合格したと言っていますが、PHP のメール機能によって送信されたすべてのメッセージはジャンク フォルダーに移動します。以下は、Bash および PHP を介して直接送信されるメッセージの例です: http://pastebin.com/ndXJszic

誰でも私を助けることができますか?

ありがとう。

EDITヘッダーから\rを 削除した後、DKIM ボディ ハッシュ エラーはなくなりました。しかし、まだ Outlook に電子メールを送信できません...

4

4 に答える 4

0

メール配信の問題をトラブルシューティングするときは、ポート 25 のメール チェックを使用します。

通過するものと通過しないもの、および SpamAssasin がメッセージをどのようにランク付けするかを示します。

URL は http://www.port25.com/support/authentication-center/email-verification/です。

結果を任意のアドレスに直接受け取るには、そのアドレスを check-auth アドレスに追加する必要があります。たとえば、結果を jsmith@yourdomain.com に送信するには、サンプル メッセージを check-auth-jsmith=yourdomain.com@verifier.port25.com に送信する必要があります。

これを使用すると、DKIM が適切に動作しているかどうか、検証済みかどうか、および SpamAssasin のスコアを確認できます。

于 2013-04-23T14:41:55.603 に答える
0

Pear mailを使用してみて、その周りにラッパー クラスを作成します。私はDKIMでそれを使用していますが、問題はありません。SpamAssassin (前述) と ClamAV も使用しています。

<?php

// Include the Pear Mail header
require_once '/usr/share/php/Mail.php';


class MailWrapper {
    public static function Send($to, $subject, $body) {
        // Email details
        $from = 'No Reply <noreply@yourdomain.com>';
        $server = 'mail.yourdomain.com';
        $port = 25;
        $username = 'sending.account@yourdomain.com';
        $password = 'yourp4ssw0rd';
        // Formalize mail server connection info
        $headers = array('From' => $from,
                 'To' => $to,
                 'Subject' => $subject,
                 'Date' => date('r'),
                 'Return-Path' => $from,
                 'Content-Type' => 'text/html; charset=UTF-8',
                 'Content-Transfer-Encoding' => '7bit',
                 'Mime-Version' => '1.0',
                 'X-Mailer' => 'Your Company (https://yourdomain.com)',
                 'X-Accept-Language' => 'en',
                 'Message-ID' => sha1($body).'@yourdomain.com'
        );
        $connection = array('host' => $server,
                    'auth' => true,
                    'username' => $username,
                    'password' => $password
        );
        // Create the mail server connection 
        $smtp = Mail::factory('smtp', $connection);
        // Send the message
        $mail = $smtp->send($to, $headers, $body);
        // Check for errors
        if (PEAR::isError($mail)) {
            echo '! [email] ['.time().'] Failed sending mail to "'.$to.'"'.PHP_EOL;
            $result = false;
        } else {
            echo '  [email] ['.time().'] Mail sent to "'.$to.'"'.PHP_EOL;
            $result = true;
        }
        return $result;
    }
}

?>
于 2013-03-22T23:23:08.150 に答える