web-dev-qa-db-ja.com

PHPによって送信された電子メールのMessage-Idの問題は何ですか

PhpからGmailアカウントに送信されたメールの疑わしいmessage-idヘッダーがあります:

Message-Id: <[email protected]>

この奇妙なフォーマットがあり、SMTPIN_ADDED_MISSINGがここで何を意味するのか教えていただけますか?インターネットで見た例では、送信ドメインを含むこのような形式でしたが、何らかの理由でメッセージIDに含まれていません。

[email protected]

このヘッダーをZend_Mailに設定したとは思いません。このヘッダーを生成するものは何ですか?このヘッダーに問題がありますか?

15
Oleg

適切な送信メールクライアントは、メールの送信時にMessage-IDヘッダーを生成する必要があります。 Googleは「ニース」であり、メッセージがメールシステムを通過するときに生成しますが、ほとんどの場合は生成されません。ほとんどのスパムフィルタは、メッセージがスパムである可能性が高いことを示すものとして、この欠落しているヘッダーを受け取ります。不正な形式または欠落しているヘッダーは、「スパムスコア」に追加されます。

生成するのは難しくありません。必要なのは、メッセージごとに一意であるということだけです。

$message-id = time() .'-' . md5($sender . $recipient) . '@' $_SERVER['SERVER_NAME'];

または

$message-id = time() .'-' . md5($sender . $recipient) . '@yourdomain.com';

与える:

[email protected]
17
Sammitch

Google SMTPは、欠落している場合にそれを生成します。このヘッダーは、最初のSMTPサーバーで設定する必要があります。だからあなたはそれを生成しません-グーグルは生成します。複数の配信を防ぎ、関連するメッセージをリンクするために使用されます。

メッセージIDヘッダーを設定する必要はありませんが、ほとんどの(すべてではありませんが、構成されているだけです)smtpがこのヘッダーを追加する(修正される可能性があります)のは良い習慣のようです。したがって、他の人によるこのヘッダーの生成を回避するために、自分で生成することができます。

6
clover

これは私にとってはうまくいきます(私にとってもスパムの問題だったので、ヘッダーに「日付」行を追加しました)。 このコードの平和 に基づいています。

これが私のPHP配列アプローチ(PearのMailおよびMimeライブラリを使用)です:

$headers = array(
   'From'       => $from,
   'Subject'    => $subject,
   'To'     => $to,
   'Cc'     => '',
   'Date'       => date('r'),
   'Message-ID' => sprintf("<%s.%s@%s>",
                                base_convert(microtime(), 10, 36),
                                base_convert(bin2hex(openssl_random_pseudo_bytes(8)), 16, 36),
                                'youdomain.com')
                );

Olegが別の回答でコメントしたように、文字通り$_SERVER['SERVER_NAME']の代わりに'youdomain.com'を使用しても、phpcliでは機能しないことに注意してください。

1
Heitor

tl; dr;電子メールを送信するときにポート25を使用せず、代わりにポート587を使用します

カスタム作成したgolangメールクライアントからポート25を使用して、宛先のメールアドレスがgmailまたはgoogle gsuite adddressのいずれかでローカルのPostfixサーバーに送信メールを送信していたとき、

Message ID  <[email protected]>

gmailの宛先メールアドレスから見た場合Show Original ...ただし、golang電子メールクライアントとローカルpostfixサーバーの両方で完全なTLS証明書を使用しているため、アウトバウンド電子メールクライアントでポート25の使用を安全なポート587に置き換えると(postfixはすでにTLS証明書を使用していました)、適切な

Message ID  <[email protected]>

注-メールヘッダーを定義することはありませんmessage-id実際、私が使用しているgolangリポジトリには、そのヘッダーを定義するためのapi呼び出しがありません。

0
Scott Stensland

交換されたメッセージを追跡するために同じMessageIdを使用しています。

私はMessageIdを次のように修正します:

$mail->MessageID =sprintf('<%s@%s>', $myMessageID, 'myserver');
0
Flavio Ariano