web-dev-qa-db-ja.com

Spfは、受信者のアドレスに応じて合格または不合格になります

Ubuntu13.10にdovecotを設定した接尾辞があります。ノードアプリケーションを介して(email-templatesを使用して)メールを送信します。

[email protected]から[email protected]email 1)にメールを送信すると、spfレコードが渡されます。 [email protected]から[email protected]にメールを送信すると(メール2)、spfレコードが失敗します。

私のspfレコード:

v=spf1 a mx ~all

IPを指定してバリエーションを試しましたが、メールで同じパス/ソフトフェイルが発生します12

@ mydomain.comのメールをGmailにリンクしたので、そこからメールを読んだり、Gmailのヘッダーを確認したりできます。

email 1のヘッダーは次のとおりです。

Delivered-To: [email protected]
Received: by 10.220.131.9 with SMTP id v9csp9729vcs;
        Thu, 3 Apr 2014 02:07:44 -0700 (PDT)
X-Received: by 10.204.243.137 with SMTP id lm9mr3945288bkb.33.1396516062351;
        Thu, 03 Apr 2014 02:07:42 -0700 (PDT)
Return-Path: <[email protected]>
Received: from mydomain.com (mydomain.com. [81.4.107.88])
        by mx.google.com with ESMTPS id de1si2116722bkc.265.2014.04.03.02.07.41
        for <[email protected]>
        (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Thu, 03 Apr 2014 02:07:41 -0700 (PDT)
Received-SPF: pass (google.com: domain of [email protected] designates 81.4.107.88 as permitted sender) client-ip=81.4.107.88;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of [email protected] designates 81.4.107.88 as permitted sender) [email protected]
Received: from [127.0.0.1] (mydomain [127.0.0.1])
    (Authenticated sender: username)
    by mydomain.com (Postfix) with ESMTPA id 2FE0730A095F
    for <[email protected]>; Thu,  3 Apr 2014 05:07:41 -0400 (EDT)
X-Mailer: Nodemailer (0.6.1; +http://github.com/andris9/nodemailer;
 smtp/0.3.23)
Date: Thu, 03 Apr 2014 09:07:41 GMT
Message-Id: <[email protected]>
From: [email protected]
To: [email protected]
Subject: Welcome to mydomain

email 2のヘッダーは次のとおりですが、失敗します。

Delivered-To: [email protected]
Received: by 10.220.131.9 with SMTP id v9csp9756vcs;
        Thu, 3 Apr 2014 02:08:20 -0700 (PDT)
X-Received: by 10.220.103.141 with SMTP id k13mr2007429vco.25.1396516099631;
        Thu, 03 Apr 2014 02:08:19 -0700 (PDT)
Authentication-Results: mx.google.com;
       spf=softfail (google.com: best guess record for domain of transitioning [email protected] does not designate <unknown> as permitted sender) [email protected]
Received-SPF: softfail (google.com: best guess record for domain of transitioning [email protected] does not designate <unknown> as permitted sender)
Received: by 10.220.241.77 with POP3 id ld13mf1851813vcb.12;
        Thu, 03 Apr 2014 02:08:19 -0700 (PDT)
X-Gmail-Fetch-Info: [email protected] 3 mail.mydomain.com 110 support
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from [127.0.0.1] (mydomain [127.0.0.1])
    (Authenticated sender: username)
    by mydomain.com (Postfix) with ESMTPA id 2DF0730A095E
    for <[email protected]>; Thu,  3 Apr 2014 05:07:41 -0400 (EDT)
X-Mailer: Nodemailer (0.6.1; +http://github.com/andris9/nodemailer;
 smtp/0.3.23)
Date: Thu, 03 Apr 2014 09:07:41 GMT
Message-Id: <[email protected]>
From: [email protected]
To: [email protected]
Subject: New user signed-up
Content-Type: multipart/alternative;
 boundary="----Nodemailer-0.6.1-?=_1-1396516061189"
MIME-Version: 1.0

メールを送信しているnode.jsコードはどちらも同じトランスポートとログインを使用しているため、問題はないと思います。これは、簡略化された、しかしまだ長いバージョンのコードです。

var transport = nodemailer.createTransport("SMTP", {
      service: "mydomain.com",
        auth: {
                user: "username",
                pass: "password"
        }

    })

//THIS EMAIL FAILS SPF CHECK
exports.send_new_registration = function(username, email){
        emailTemplates(templatesDir, function(err, template) {
                console.log("Attempting to send email.");
          if (err) {
            console.log(err);
          } else {

            var locals = {
                email : email,
                username :username 
            };

            // Send a single email
            template('new_user', locals, function(err, html, text) {
              if (err) {
                console.log(err);
              } else {
                transport.sendMail({
                  from: '[email protected]',
                  to: '[email protected]',
                  subject: "New user signed-up",
                  html: html,
                  // generateTextFromHTML: true,
                  text: text
                }, function(err, responseStatus) {
                  if (err) {
                    console.log(err);
                  } else {
                    console.log(responseStatus.message);
                  }
                });
              }
            });
          }

//THIS EMAIL PASSES SPF CHECK
exports.send_confirmation_email = function(email, token){
        var link = "https://mydomain.com/email-confirmation/" + token;  
        emailTemplates(templatesDir, function(err, template) {
                console.log("Attempting to send email.");
          if (err) {
            console.log(err);
          } else {

                var locals = {
                link : link
                };

            // Send a single email
            template('register', locals, function(err, html, text) {
              if (err) {
                console.log(err);
              } else {
                transport.sendMail({
                  from: '[email protected]',
                  to: email,
                  subject: "Welcome to mydomain",
                  html: html,
                  // generateTextFromHTML: true,
                  text: text
                }, function(err, responseStatus) {
                  if (err) {
                    console.log(err);
                  } else {
                    console.log(responseStatus.message);
                  }
                });
              }
            });
          }
        });     
}

私はそれが関連しているとは思いませんが、私はまだTLSを接尾辞で動作させていません。また、postfix-policyd-spf-Perlを機能させようとしましたが、失敗しました。自分のアカウントから自分のアカウントにメールを送信する場合、これによりヘッダーが追加されます。関連していると思いますが、よくわかりません。

参考までに、check_policy_service unix:private/policy-spf/etc/postfix/main.cfに追加すると、メールに[email protected]から[email protected]への追加のヘッダーが表示されます。

    Received-SPF: softfail (mydomain.com: Sender is not authorized by default to use 
'[email protected]' in 'mfrom' identity, however domain is not currently prepared for false
 failures (mechanism '~all' matched)) receiver=mydomain.com; identity=mailfrom; envelope-
from="[email protected]"; helo="[an_ip]"; client-ip=a_diff_ip

これがグーグルソフトフェイルチェックに関連しているかどうかわからないので、これを追加するだけです...

編集:質問を明確にするために、Gmailアカウントにメールを送信すると、spfチェックに合格するのに、自分のドメインにメールを送信すると失敗する理由はわかりません。

2
Simon

SPFは失敗していません。結果を誤って解釈しています。

メールがGMailアカウントに送信されると、Googleは(適切に)チェックを行います。 Googleは、POP3経由で取得するときにもチェックを追加しています。それがどこから来たのかわからないので、それはソフトフェイルをマークします。

GoogleがPOP3で取得したメールをチェックしている理由はわかりませんが、チェックするべきではありません。

Googleにヘッダーを操作させるのではなく、独自のSPFチェックを行うアドレスに送信して直接取得する必要があります。

4
David Crowell